Spring @Transactional多线程

时间:2014-05-07 05:27:12

标签: java spring transactions

我在事务范围内运行了一个方法A:

  1. 修改实体A以从状态A切换到状态B
  2. 将任务传递给执行者服务,该服务期望实体在执行时处于状态B
  3. 问题是在A方法提交之前运行此任务(我无法控制的事情)时,它没有看到所需的状态发生变化,因为在方法A级事务结束之前它不会阻塞。

    使用spring bean和@ Transactional-annotated方法运行任务,如下所示:

    @Service
    public class TransactionalProcessingAdapter implements ProcessingAdapter {
    
        @Override
        @Transactional
        public void execute(ProcessingAdaptedMethod processingAdapter) {
            processingAdapter.execute();
        }
    
    }
    

    我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

事情是Spring事务是线程限制的 - 例如,事务只在其初始线程中可见。 ThreadLocal用于实现该属性。

您可能希望在Spring中实现自己的TransactionSynchronizationManager并将其注入。使用类似InheritableThreadLocal而不是ThreadLocal。