我正在使用Spring Data MongoDB(2.2.5)和MongoDB 4.2.5 社区版本测试事务回滚功能。正如Spring Data官方文档中提到的,我在配置类中配置了MongoTransactionManager,并在后端创建了一个包含3个成员的副本集。
此外,还使用了 mongo 数据库事务存储库。使用@Transactional注释了我的Dao方法。即使我已经在方法中实现了事务范围,我的数据仍然保存在集合中(人员以及地址),并且在应用程序中的运行时异常上数据库层没有发生回滚。我已经提供了我的应用程序所需的源代码和跟踪。请帮助解决真实问题,如果我遗漏了任何内容,请告诉我。
@Slf4j
@Configuration
@EnableMongoRepositories
@EnableTransactionManagement(proxyTargetClass=true)
class ApplicationConfig extends AbstractMongoClientConfiguration {
@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
log.info("Creating dbFactory {}", dbFactory);
MongoTransactionManager manager=new MongoTransactionManager(dbFactory);
log.info("Creating manager {}",manager);
return manager;
}
@Override
public MongoClient mongoClient() {
return MongoClients.create("mongodb://localhost:27020,localhost:27021,localhost:27022/?replicaSet=rs0");
}
@Override
protected String getDatabaseName() {
return "testDB";
}
public @Bean MongoTemplate mongoTemplate() {
return new MongoTemplate(mongoClient(), "testDB");
}
}
@Slf4j
@Service("TestDao")
public class TestDaoImpl implements TestDao{
@Autowired
PersonRepository repository;
@Autowired
MongoOperations ops;
@Autowired …Run Code Online (Sandbox Code Playgroud)