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;
}