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跳出当前循环,必须要回滚事务,这个坑我验证过,自以为没有进行数据库任何增删改操作不需要回滚,结果导致数据库连接不能释放导致数据库链接耗尽,血泪教训呀!!!!!!

相关推荐
翱翔-蓝天29 分钟前
为什么“看起来很规范”的后端项目反而臃肿且性能下降
spring boot
爱学习的阿磊36 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha42 分钟前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞1 小时前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean1 小时前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_550024631 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦1 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_99991 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
80530单词突击赢1 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
玄同7652 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱