我正在使用Spring Boot和MongoDB开发一个Web应用程序。我想使服务与@transactional spring注释一起使用,但我不知道这是否真的有效。 (我以前没有使用过mongoDB)。
我添加了注释,似乎一切运行正常(应用程序运行并且我可以执行所有CRUD操作),但是,我不知道Spring是否忽略了注释并且它像往常一样工作,或者真的考虑交易性。
在另一篇文章中,我看到我应该在配置类中添加一个新bean,以启用Spring和MongoDB之间的事务性。真的有必要吗?,我只使用带有单个Mongo文档的交易。
答案 0 :(得分:4)
@Transactional仅在spring-data-mongodb 2.1.0及更高版本中有效: https://docs.spring.io/spring-data/mongodb/docs/2.1.0.RELEASE/api/
实际上,您必须添加bean:
@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}
我不知道Spring是否忽略了注释并且它像往常一样工作,还是真的在考虑事务性
为此,您可以在2个数据库更新之间引发异常,并检查是否已回滚第一个更新。
但是,如果您在单个Mongo文档中使用事务,则不需要@Transactional注释:
在MongoDB中,写操作在单个级别上是原子的 文档,即使该操作修改了多个嵌入式文档 在单个文档中。 MongoDb documentation - Transactions