事务
MongoPlus提供了对MongoDB的事务操作(声明式事务和编程式事务),但前提是MongoDB需要开启副本集并且版本需要在MongoDB4以上才会支持
配置文件
- 我们需要在配置文件中配置一些额外的配置
yaml
mongo-plus:
data:
mongodb:
host: 192.168.110.1,192.168.110.1
port: 27017,27018
database: mp
connectTimeoutMS: 50000
retryWrites: true
w: majority
replicaSet: mp #指定rs的name
声明式事务 -> @MongoTransactional注解
- 无需手动try catch和提交回滚,只需一个注解即可
- 标注了此注解,即可轻松实现对MongoDB的事务操作
使用Spring的@Transactional注解:
- MongoPlus支持使用Spring的@Transactional注解的方式控制事务
- 需要注意的是,Spring已经弃用了将事务管理器组合起来的类,暂时还没有找到可替换的类
- 使用时,需要启动该配置,配置详情请查看 配置->配置文件->Spring配置->transaction 项,由于无法组合起来,所以会使用MongoPlus的事务管理器
声明式事务示例:
- 接下来我们用一个简单的案例来进行编程式事务事务操作
java
@PostMapping("/addRole")
@ApiOperation("添加角色")
//使用事务注解
@MongoTransactional
public Boolean addRole(@RequestBody Role role){
return roleService.save(role);
}
编程式事务 -> MongoTransactional类
- 该类提供对事务的一些操作,创建、开启、提交、回滚、关闭
createTransaction()
- 创建一个事务,方法会返回一个ClientSession接口,其中包含事务的信息
startTransaction()
- 创建并开启一个事务,该方法将会返回一个ClientSession接口
startTransaction(ClientSession clientSession)
- 启动一个事务,该方法需要手动传递一个ClientSession,将会开启传递的ClientSession
commitTransaction()
- 提交一个事务,该方法需要手动传递一个ClientSession,将会提交该事务
commitAndCloseTransaction(ClientSession clientSession)
- 提交并关闭一个事务,该方法需要手动传递一个ClientSession,将会提交并关闭该事务
rollbackTransaction(ClientSession clientSession)
- 回滚一个事务,该方法需要手动传递一个ClientSession,将会回滚该事务
rollbackAndCloseTransaction(ClientSession clientSession)
- 回滚并关闭一个事务,该方法需要手动传递一个ClientSession,将会回滚并关闭该事务
closeTransaction(ClientSession clientSession)
- 关闭一个事务,该方法需要手动传递一个ClientSession,将会关闭该事务
编程式事务示例:
- 接下来我们用一个简单的案例来进行编程式事务事务操作
java
// 创建并开启一个事务
ClientSession clientSession = MongoTransactional.startTransaction();
try {
//执行删除操作
userService.removeById(clientSession,1);
int i = 1 / 0;
}catch (Exception e){
//回滚并关闭事务
MongoTransactional.rollbackAndCloseTransaction(clientSession);
return false;
}
//提交并关闭事务
MongoTransactional.commitAndCloseTransaction(clientSession);
return true;