线程问题内的JPA事务代理

问题描述

@H_502_0@在我的Controller中,我注入了@Autowired这个Service,它实现了Runnable(我需要多线程),我这样称呼它:>

Thread t = new Thread(service);
t.start();
t.join();
@H_502_0@然后,在我的Service的{​​{1}}中,我称其为run()(简单的Repository),它也与{{1 }}:

JPARepository
@H_502_0@问题在于它不会使用Service保留实体。在第一个实体保存失败后,初始化事务代理(和Hibernate连接池)。之后,它可以正常工作。

@H_502_0@有人可以指出我的正确方向吗?如何在持久化第一个实体之前强制线程初始化Hibernate事务代理

解决方法

您应该考虑在刷新Spring上下文之后启动线程。这样比较安全,因为您所有的bean都可能处于不一致状态。

@EventListener(ContextRefreshedEvent.class)
public void handleContextStart() {
   // ...
}