SpringDataMongoDB多文檔事務(wù)的實(shí)現(xiàn)
一、安裝MongoDB4.0.3(××)
1.1、官方安裝文檔
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
1.2、tar.gz包下載地址
https://www.mongodb.com/download-center/community?jmp=docs
1.3、復(fù)制集官方配置
https://docs.mongodb.com/manual/administration/replica-set-member-configuration/
二、SpringProject版本依賴(×)
Spring:5.1.1.RELEASE 以上
SpringDataMongoDB:2.1.1.RELEASE 以上
三、配置MongoTransactionManager(SpringBoot使用方式)
SpringBoot 集成非常簡(jiǎn)單,配置MongoTransastionManager,目前Spring-boot-starter-data-mongodb 版本較低不支持,因此暫未驗(yàn)證,SpringBoot配置復(fù)制集參考SpringBoot相關(guān)文檔
@Configuration
static class Config extends AbstractMongoConfiguration {
@Bean
MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}
// ...
}
四、配置MongoTransactionManager(普通Spring項(xiàng)目)
<context:property-placeholder location="classpath:mongo.properties" ignore-unresolvable="true"
file-encoding="utf-8" />
<!--
重點(diǎn)配置
1.安全配置:credentials="${mongo.user}:${mongo.password}@${mongo.database}"
2.單機(jī)配置:host="${mongo.host}" port="${mongo.port}"
3.副本集配置:replica-set="${mongo.replSet}"
-->
<mongo:mongo-client id="mongoClient" replica-set="${mongo.replSet}">
<mongo:client-options min-connections-per-host="${mongo.minConnectionsPerHost}"
write-concern="SAFE"
read-preference="NEAREST"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}"
socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}"
max-connection-idle-time="${mongo.maxConnectionIdleTime}"
max-connection-life-time="${mongo.maxConnectionLifeTime}"
heartbeat-socket-timeout="${mongo.heartbeatSocketTimeout}"
heartbeat-connect-timeout="${mongo.heartbeatConnectTimeout}"
min-heartbeat-frequency="${mongo.minHeartbeatFrequency}"
heartbeat-frequency="${mongo.heartbeatFrequency}" />
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" dbname="${mongo.database}"
mongo-ref="mongoClient" />
<bean id="mappingContext"
class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
<bean id="defaultMongoTypeMapper"
class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
<constructor-arg name="typeKey">
<null />
</constructor-arg>
</bean>
<bean id="mappingMongoConverter"
class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mappingContext" ref="mappingContext" />
<property name="typeMapper" ref="defaultMongoTypeMapper" />
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
</bean>
<!-- 重點(diǎn)配置 -->
<bean id="mongoTransactionManager" class="org.springframework.data.mongodb.MongoTransactionManager">
<constructor-arg name="dbFactory" ref="mongoDbFactory"/>
</bean>
<tx:annotation-driven transaction-manager="mongoTransactionManager" proxy-target-class="true"/>
五、使用事務(wù)(×)
@Service
public class StateService {
@Autowired
private MongoTemplate teplate;
@Transactional
void someBusinessFunction(Step step) {
template.insert(step);
log.debug(1/0);
};
});
六、Mongo.properties 配置
mongo.host=192.168.1.66 mongo.port=27017 mongo.replSet=192.168.1.66:2000,192.168.1.66:2001,192.168.1.66:2002 mongo.minConnectionsPerHost=10 mongo.threadsAllowedToBlockForConnectionMultiplier=4 mongo.connectTimeout=30000 mongo.maxWaitTime=3000 mongo.socketKeepAlive=false mongo.socketTimeout=30000 mongo.maxConnectionIdleTime=0 mongo.maxConnectionLifeTime=0 mongo.heartbeatSocketTimeout=20000 mongo.heartbeatConnectTimeout=10000 mongo.minHeartbeatFrequency=3000 mongo.heartbeatFrequency=5000 mongo.database=labsta
七、最后是重點(diǎn)(×××××)
7.1、必須使用復(fù)制集,單節(jié)點(diǎn)不支持,mongodb4.2 會(huì)支持分片集事務(wù),復(fù)制集安裝請(qǐng)自行研究
7.2、使用事務(wù)之前(@Transaction),數(shù)據(jù)庫(kù)和文檔必須提前創(chuàng)建,如何解決呢?且看下篇
7.3、Spring版本和SpringDataMongodb版本必須遵循 @SpringProject版本依賴
7.4、注意,此處的復(fù)制集不是4.0版本之前的主從復(fù)制集群,4.0之后已廢棄主從模式
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot優(yōu)化啟動(dòng)速度的方法實(shí)現(xiàn)
本篇文章主要介紹了SpringBoot優(yōu)化啟動(dòng)速度的方法實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
Spring動(dòng)態(tài)添加定時(shí)任務(wù)的實(shí)現(xiàn)思路
這篇文章主要介紹了Spring動(dòng)態(tài)添加定時(shí)任務(wù)的實(shí)現(xiàn)思路,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07
SpringBoot使用除了Jasypt對(duì)YML文件配置內(nèi)容進(jìn)行加密方式
文章介紹了如何在Java項(xiàng)目中使用Jasypt進(jìn)行加密和解密,包括在pom.xml中添加依賴、在application.yml中配置信息、創(chuàng)建解密Bean以及確保秘鑰和算法的一致性2025-11-11
idea?maven依賴引入失效無法正常導(dǎo)入依賴問題的解決方法
有時(shí)候idea導(dǎo)入一個(gè)新項(xiàng)目,或者pom文件修改(新增)了依賴,pom文件和代碼會(huì)報(bào)紅,提示依賴包不存在,下面這篇文章主要給大家介紹了關(guān)于idea?maven依賴引入失效無法正常導(dǎo)入依賴問題的解決方法,需要的朋友可以參考下2023-04-04
java 分割csv數(shù)據(jù)的實(shí)例詳解
這篇文章主要介紹了java 分割csv數(shù)據(jù)的實(shí)例詳解的相關(guān)資料,這里提供了簡(jiǎn)單實(shí)例,需要的朋友可以參考下2017-07-07

