springboot/spring cloud 手动控制事务提交

1、背景:定时器定时从数据库中拉取数据进行分组处理,每一组如果有任意一个异常导致失败,该组操作事务只能回滚。所以在循环中每一次大循环是一个事务,大循环中的其它小循环中任意一个异常都会回滚处理。

2、service中引入spring的事务管理器

java 复制代码
    @Autowired
    private DataSourceTransactionManager transactionManager;

3、在事务开始的地方:

java 复制代码
DefaultTransactionDefinition transDefinition = new DefaultTransactionDefinition();
         transDefinition.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(transDefinition);

4、在事务回滚的地方添加:

java 复制代码
transactionManager.rollback(status);

5、在事务提交的地方:

java 复制代码
transactionManager.commit(status);

注意:即使没有进行任何处理也没有异常,continue跳出当前循环,必须要回滚事务,这个坑我验证过,自以为没有进行数据库任何增删改操作不需要回滚,结果导致数据库连接不能释放导致数据库链接耗尽,血泪教训呀!!!!!!

相关推荐
A.说学逗唱的Coke7 小时前
【大模型专题】向量数据库深度解析:从原理到实战,构建企业级 AI 知识检索底座
数据库·人工智能
果丁智能7 小时前
智能锁赋能网约房民宿数字化管控:身份核验+远程授权,筑牢安全防线、降本增效
网络·数据库·人工智能·安全·智能家居
无敌的牛8 小时前
redis学习过程
数据库·redis·学习
IT北辰8 小时前
神通数据库管理系统V7.0.251210 for Windows(x86 64bit)安装部署
数据库·神通
北顾笙9808 小时前
MySQL-day2
数据库·mysql
Demons_kirit8 小时前
新项目如何连接上自己本地的数据库
数据库
洪晓露9 小时前
将 rke2 集群证书延长至 10 年
运维·服务器·数据库
程序猿乐锅10 小时前
【MySQL | 第八篇】MySQL 视图
数据库·mysql
jieyucx10 小时前
SQL 查询终极高阶通鉴:从零基础拆解到工业级多表联查、窗口函数与索引优化
数据库·sql
ai_coder_ai11 小时前
论 NoSQL 数据库技术及其应用
数据库·nosql