今天在開發(fā)中嘗試使用MongoDB4.0及以上版本中支持的CUID,由于第一次使用,文檔也來不及仔細研讀,只好先采取拿來主義把項目跑起來。為此搜了不少如何使用的文章,也踩了一些坑,記錄如下。
1.pom.xml中引入相關包
首先在pom.xml中引入事務依賴的相關包,建議用最新的版本。
2.配置application-dev.properties
在該文件中配置replica-set
3.實現事務管理類
實現后可以用注解方式控制事務。
4.注入
在實體操作類中需要事務的方法中使用注釋@Transactional(rollbackFor = { Exception.class }),且在異常中增加一行代碼"TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();"
下面說幾個坑:
(1)注解必須是@Transactional(rollbackFor = { Exception.class }),不能僅僅是@Transactional;
(2)如果有捕獲異常,則必須加一行代碼,否則發(fā)生異常時還是能insert到數據庫;加了后才能回滾insert操作。
(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即可。
未完待續(xù)...
本文參考了以下文章,在此一并向作者致謝!
參考文章:
(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