使用MongoTransactionManager无法回滚

时间:2019-06-24 15:11:00

标签: spring mongodb transactions

您好,我正在使用Spring Boot和MongoDB 4.0开发后端。为了添加事务,我已经实现了MongoTransactionManager,如文档spring mongo transactions

中所示
@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
} 

但是,当我使用@Transactional(rollbackFor = NullPointerException.class)注释方法时,不会为该异常回滚。 例如,以下测试不起作用。 您对解决此问题有任何建议吗?

@Test
@Transactional(rollbackFor = NullPointerException.class)
public void testTransaction() {
    try {
        myRepo.deleteAll();
        throw new NullPointerException();
       } catch (
        NullPointerException e) {
    } finally {
        assertThat(myRepo.findAll()).isNotEmpty();
    }
}

2 个答案:

答案 0 :(得分:0)

请弄清楚,如果您还注册Bean MongoTemplate,则MongoTransactionManager不起作用。 此外,令人惊讶的是,如果@Transactional方法是@Test方法,则它不起作用。您必须在@Service中提取@Transactional方法。

答案 1 :(得分:0)

因为您刚刚抓到NPE,却对其不做任何事情。对于要回滚的事务,您的方法应将NPE排除在该方法之外。