在我的Controller
中,我注入了(@Autowired
(这个Service
,它实现了Runnable
(我需要多线程(,我这样调用它:
Thread t = new Thread(service);
t.start();
t.join();
然后,在我的Service
的run()
中,我称之为Repository
(简单的JPARepository
(,它在Service
中也注入了@Autowired
:
repository.save(someEntity);
问题是它没有持久化具有id=1
的实体。事务代理(和Hibernate连接池(在第一个实体保存失败后初始化。在那之后,它工作得很好。
有人能为我的问题指出正确的方向吗?如何在持久化第一个实体之前强制线程初始化Hibernate事务代理?
您应该考虑在刷新Spring上下文后启动线程。这样更安全,因为您所有的bean都可能处于不一致的状态。
@EventListener(ContextRefreshedEvent.class)
public void handleContextStart() {
// ...
}