spring 声明式事务 - 线程池并发

2021-01-28 23:19:56 +08:00
 BacGa
  1. 在一个开启事务注解的 service 方法内,多个数据库操作采用线程池异步执行的话,异常后还会正确回滚吗,是不是各个线程跑出的异常会被自己的线程吃掉,没办法触发事务回滚?
  2. 如果是这样的话,一个事务内的多个数据库操作应该怎么优化可以提升整体速度呢?我现在一个事务里两个 insert 两个 update,更新操作依赖于前面插入返回的 id,整体耗时 700ms
1409 次点击
所在节点    问与答
4 条回复
freebird1994
2021-01-28 23:32:56 +08:00
事务无法跨线程。如果不需要同步响应必要数据,可以丢 mq 里,同步返回。其次就是看 db 是否索引建的过多。update 操作是否走了索引等等
jacksparrow414
2021-01-29 09:04:50 +08:00
如何要在异步中管理事务,那么需要使用编程式事务,PlatformTransactionManager 和 TransactionTemplate 了解一下?
BacGa
2021-01-29 11:14:53 +08:00
@freebird1994 如果是通过 mq 解耦 就又要考虑 mq 的落盘问题 因为这些数据都是不容许丢失的
BacGa
2021-01-29 11:15:12 +08:00
@jacksparrow414 我去学习学习

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/749380

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX