Spring @transactional与MongoDB一起工作吗?

时间:2019-03-10 11:26:23

标签: java mongodb spring-boot spring-mvc transactions

我正在使用Spring Boot和MongoDB开发一个Web应用程序。我想使服务与@transactional spring注释一起使用,但我不知道这是否真的有效。 (我以前没有使用过mongoDB)。

我添加了注释,似乎一切运行正常(应用程序运行并且我可以执行所有CRUD操作),但是,我不知道Spring是否忽略了注释并且它像往常一样工作,或者真的考虑交易性。

在另一篇文章中,我看到我应该在配置类中添加一个新bean,以启用Spring和MongoDB之间的事务性。真的有必要吗?,我只使用带有单个Mongo文档的交易。

1 个答案:

答案 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