SpringBoot使用MongoDB事务实现多文档间原子操作及在properties文件中配置replica-set

今天在开发中尝试使用MongoDB4.0及以上版本中支持的CUID,由于第一次使用,文档也来不及仔细研读,只好先采取拿来主义把项目跑起来。为此搜了不少如何使用的文章,也踩了一些坑,记录如下。

1.pom.xml中引入相关包
首先在pom.xml中引入事务依赖的相关包,建议用最新的版本。


repo.PNG

2.配置application-dev.properties
在该文件中配置replica-set


properties.PNG

3.实现事务管理类
实现后可以用注解方式控制事务。
transactionManager.PNG

4.注入
在实体操作类中需要事务的方法中使用注释@Transactional(rollbackFor = { Exception.class }),且在异常中增加一行代码"TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();"


Transactional.PNG

下面说几个坑:
(1)注解必须是@Transactional(rollbackFor = { Exception.class }),不能仅仅是@Transactional;
(2)如果有捕获异常,则必须加一行代码,否则发生异常时还是能insert到数据库;加了后才能回滚insert操作。

2.PNG

(3)必须在properties文件中配置replica-set,否则报错"Sessions are not supported by the MongoDB cluster to which this client is connected"。配置方式是spring.data.mongodb.uri=mongodb://host1:port1,host2:port2,host3:port3/数据库名称?replicaSet=复制集名称(各host、port及replicaSet的值见作者文章“Win7下MongoDB配置replica-set”),不能分开配置spring.data.mongodb.host、spring.data.mongodb.port、spring.data.mongodb.database。
(4)pom.xml中不必引入spring-data-mongodb包,只需要spring-boot-starter-data-mongodb、spring-data-commons和mongo-java-driver即可。

未完待续...

本文参考了以下文章,在此一并向作者致谢!
参考文章:
(1)Springboot教程系列之 Springboot中的MonogoDB多文档事务
http://it.hzqiuxm.com/springboot%E8%BF%9B%E9%98%B6%E6%95%99%E7%A8%8B%E7%B3%BB%E5%88%97%E4%B9%8B/
(2)spring springmvc 和mongodb 整合时,关于事务的回滚,在配置文件里是怎么配置?(感谢回答者@浮i浅)

https://ask.csdn.net/questions/691493

你可能感兴趣的:(SpringBoot使用MongoDB事务实现多文档间原子操作及在properties文件中配置replica-set)