Spring Data Mongodb事務管理
Spring Data Mongodb事務管理
前言
這是一個很基礎實例demo,並未涉及到相關原理,以及什麼高深的知識。
一、環境
1、Mongodb 4.0副本集羣(必須):
mongo4.0開始支持事務管理,是基於副本集的(mongodb副本集羣搭建教程自行查詢)。
mongo4.2支持分片集羣事務。
2、Spring data mongodb 版本2.1以上(必須):
Spring data mongodb支持事務管理需要配置MongoTransactionManager,而這個Bean從Spring data mongodb 2.1版本纔開始有的(如果你使用的是Spring boot,那麼至少要保證data mongodb的版本在2.1以上,所以建議spring boot版本在2.1以後)
二、實例
1、Spring data mongodb配置
maven依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
application.properties配置文件:
# Mongodb
spring.data.mongodb.uri=mongodb://192.168.1.100:27017,192.168.1.200:27017/db
spring mongodb事務管理bean:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.MongoTransactionManager;
@Configuration
public class MongoTransactionConfig {
@Bean
public MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}
}
spring boot開啓事務管理( @EnableTransactionManagement ):
@EnableTransactionManagement
public class SpringBootApplication{
public static void main(String[] args) {
SpringApplication.run(SpringBootApplication.class, args);
}
}
使用@Transactional註解標記需要事務管理的業務:
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Service
public class ProcessService {
...
@Transactional
public void run() {
// dosomething...
}
...
}