Mongodb事务:基于spring+springmvc

spring+springmvc
https://docs.spring.io/spring-data/mongodb/docs/2.2.6.RELEASE/reference/html/#mongo.core
框架版本(必须):
1.MongoDB 4.0.x
2.spring 5.1.1.RELEASE以上
3.spring-data-mongodb:2.1.1.RELEASE以上
4.Mongodb副本集

mongodb.properties 文件

#config for mongoDB
mongo.username=bryce
mongo.password=bryce
#mongo.host=192.168.161.128
#mongo.port=27088
mongo.replSet=10.15.55.100:27017
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=testdb

mongodb.xml文件

<mongo:mongo-client id="mongo" replica-set="${mongo.replSet}" credentials="${mongo.username}:${mongo.password}@${mongo.database}">
		<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="mongo"/>

	<!-- 去除“_class”字段(为类型字段名typeKey设为null) -->
	<bean id="dbRefResolver" class="org.springframework.data.mongodb.core.convert.DefaultDbRefResolver">
		<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
	</bean>
	<bean id="mappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
	<bean id="notTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
		<constructor-arg name="typeKey"><null/></constructor-arg>
	</bean>
	<bean id="mongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
		<constructor-arg name="dbRefResolver" ref="dbRefResolver" />
		<constructor-arg name="mappingContext" ref="mappingContext" />
		<property name="typeMapper" ref="notTypeMapper" />
	</bean>

	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
		<constructor-arg name="mongoConverter" ref="mongoConverter"/>
	</bean>

	<!-- 重点配置 事务  -->
	<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"/>

代码示例

//加上事务注解
    @Transactional(rollbackFor = Exception.class)
    public void insertTest(Student student) {
            mongoTemplate.insert(student,"student");
            //回滚测试
            int i = 1/0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值