美文网首页
SpringBoot使用MongoDB事务实现多文档间原子操作及

SpringBoot使用MongoDB事务实现多文档间原子操作及

作者: wxb2dyj | 来源:发表于2019-02-26 23:56 被阅读0次

    今天在开发中尝试使用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事务实现多文档间原子操作及

          本文链接:https://www.haomeiwen.com/subject/lbetuqtx.html