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

相关推荐
红树林074 分钟前
渗透测试之sql注入--盲注
数据库·sql·安全·web安全
m***66735 分钟前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端
智能化咨询10 分钟前
(66页PPT)高校智慧校园解决方案(附下载方式)
大数据·数据库·人工智能
hhwyqwqhhwy11 分钟前
linux 设备树内容和plateform_device
java·linux·数据库
v***85713 分钟前
SpringBoot Maven快速上手
spring boot·后端·maven
浪漫血液&14 分钟前
索引为什么用B+树而不是B树
数据结构·数据库·b树·b+树
Overt0p14 分钟前
抽奖系统 (1)
java·spring boot·spring·java-ee·java-rabbitmq
7***998718 分钟前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
2的n次方_18 分钟前
openGauss压力测试:性能、稳定性与AI能力的全面探索
数据库·人工智能·压力测试
y***031720 分钟前
Spring Boot(快速上手)
java·spring boot·后端