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

相关推荐
2603_965148114 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
ltl4 小时前
RocksDB 经典故障排查:L0、compaction 与 write stall
数据库
xfhuangfu5 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT5 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData6 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean6 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean6 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
Java成神之路-7 小时前
Spring Cloud 微服务契约先行:为什么 Controller 建议要实现 Feign 接口?
spring·spring cloud·微服务
浪子明X7 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.7 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库