大家不要纠结我的例子 可能场景举例不好 主要看标题
问题遇到的现象和发生背景
场景:商品信息保存
方法:使用多线程将数据插入insert拆分成了线程池里一个个子线程进行(这些数据存在不同的表
问题:多线程下导致spring事务失效,子线程无事务管理。
我的解答思路和尝试过的方法
因为spring事务是由ThreadLocal来控制的,而开启子线程导致spring事务无法管理到子线程的操作。
查阅资料后,通过使用spring编程式事务 在主线程和子线程中分别开启事务,并通过同一个倒计时类对象CountDownLatch来分别阻塞主线程和子线程,最后通过回滚标识AtomicBoolean来判断是否需要统一提交事务或统一回滚事务。
但是又有一个新问题:这样操作可以保证事务的统一回滚或统一提交,然而提交/回滚还是通过各自线程进行操作,不能保证原子性,若发生宕机可能会导致部分线程提交/回滚失败的情况出现。