您好,我正在使用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();
}
}
答案 0 :(得分:0)
请弄清楚,如果您还注册Bean MongoTemplate,则MongoTransactionManager不起作用。 此外,令人惊讶的是,如果@Transactional方法是@Test方法,则它不起作用。您必须在@Service中提取@Transactional方法。
答案 1 :(得分:0)
因为您刚刚抓到NPE,却对其不做任何事情。对于要回滚的事务,您的方法应将NPE排除在该方法之外。