很多操作数据库的工具可以保证事务性,这里不讲。
这里讲的是,业务逻辑相关的东西,举例:你更新表A中的字段status
,同时希望改变表B中的status字段
,如果中间更新失败,则都不更新。
首先在应用类上添加注解@EnableTransactionManagement
,开启springboot事务管理功能
@SpringBootApplication
@EnableTransactionManagement
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
然后在接口上添加@Transactional
注解
demo如下:
@Transactional(rollbackFor = Exception.class)
public ResponseBean setStatusById(FlowVo flowVo) {
String source = flowVo.getSource();
Integer status = flowVo.getStatus();
String id = flowVo.getId();
if (source == null || id == null || status == null){
return ResponseBean.builder().code(-1).data("param error").build();
}
Query query = new Query(Criteria.where("id").is(flowVo.getId()));
Update update = new Update();
update.set("status", status);
// 更新A表中的status
boolean ret = mongoUtils.update(query, update, FlowEntity.class, getCollection(source));
Query query1 = new Query(Criteria.where("flowId").is(flowVo.getId()));
// 更新B表中的status
mongoUtils.update(query1, update, FlowRelationEntity.class, getFlowRelationCollection(source));
return ResponseBean.builder().code(100).data(ret).build();
}
详细使用参考:https://www.cnblogs.com/xd502djj/p/10940627.html