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

相关推荐
hui函数36 分钟前
Flask高效数据库操作指南
数据库·python·flask
朱皮皮呀1 小时前
微服务流量分发核心:Spring Cloud 负载均衡解析
spring cloud·微服务·负载均衡
大新屋1 小时前
MongoDB 分片集群复制数据库副本
数据库·mongodb
努力的小郑1 小时前
放弃使用 Redis 事务!这才是它正确的打开方式!
数据库·redis
ademen2 小时前
spring第9课,spring对DAO的支持
java·数据库·spring
Java小白程序员3 小时前
SQL 语句进阶实战:从基础查询到性能优化全指南
数据库·sql·性能优化
Pitayafruit3 小时前
Spring AI 进阶之路04:集成 SearXNG 实现联网搜索
spring boot·后端·ai编程
君不见,青丝成雪3 小时前
Hadoop技术栈(四)HIVE常用函数汇总
大数据·数据库·数据仓库·hive·sql