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

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

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


    @Autowired
    private DataSourceTransactionManager transactionManager;

3、在事务开始的地方:

DefaultTransactionDefinition transDefinition = new DefaultTransactionDefinition();
         transDefinition.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(transDefinition);

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

transactionManager.rollback(status);

5、在事务提交的地方:

transactionManager.commit(status);

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

相关推荐

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

    2023-12-29 06:54:06       38 阅读
  2. KafKa手动提交问题描述

    2023-12-29 06:54:06       38 阅读
  3. 事务与并发控制

    2023-12-29 06:54:06       8 阅读
  4. PG事务事务隔离级别、并发控制

    2023-12-29 06:54:06       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-29 06:54:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-29 06:54:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-29 06:54:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-29 06:54:06       20 阅读

热门阅读

  1. uniapp怎么存储用户登录的所有数据?

    2023-12-29 06:54:06       40 阅读
  2. uniapp:富文本回显

    2023-12-29 06:54:06       43 阅读
  3. TypeScript 的基础语法

    2023-12-29 06:54:06       40 阅读
  4. 【大数据】Centos 7安装教程

    2023-12-29 06:54:06       34 阅读
  5. nodejs中间件

    2023-12-29 06:54:06       30 阅读
  6. 5-Docker实例-centos-nginx(3)

    2023-12-29 06:54:06       27 阅读
  7. Python爬虫实战案例

    2023-12-29 06:54:06       38 阅读
  8. 6. C++的引用与指针

    2023-12-29 06:54:06       28 阅读
  9. 深入理解通用的HTTP POST请求发送方法

    2023-12-29 06:54:06       39 阅读