线程内的JPA事务代理问题



在我的Controller中,我注入了(@Autowired(这个Service,它实现了Runnable(我需要多线程(,我这样调用它:

Thread t = new Thread(service);
t.start();
t.join();

然后,在我的Servicerun()中,我称之为Repository(简单的JPARepository(,它在Service中也注入了@Autowired:

repository.save(someEntity);

问题是它没有持久化具有id=1的实体。事务代理(和Hibernate连接池(在第一个实体保存失败后初始化。在那之后,它工作得很好。

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

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

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

最新更新