【问题标题】:Rollback does not work using MongoTransactionManager使用 MongoTransactionManager 无法回滚
【发布时间】:2019-06-24 15:11:00
【问题描述】:

您好,我正在使用 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();
    }
}

【问题讨论】:

    标签: spring mongodb transactions


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      因为你刚刚抓住了你的 NPE,并没有对它做任何事情。对于要回滚的事务,您的方法应该将 NPE 从方法中抛出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        相关资源
        最近更新 更多