@Async将bean范围从一个线程复制到另一个线程

时间:2015-04-30 10:07:50

标签: java spring

我使用Spring @Async来发出异步请求,我想知道,当我使用@Async时,如何将Hibernate会话之类的bean从一个线程传递到另一个线程?

问候。

2 个答案:

答案 0 :(得分:1)

您无法将Hibernate会话传递给另一个线程。一些bean连接到当前线程。活动数据库事务就是这样一个bean。 Spring将其保留在ThreadLocal中,并且没有API将其传递给另一个线程。

您需要做的是将您要处理的对象传递给新线程,在那里获得一个新会话,并将em.merge()个对象传递到新会话中。或者,如果你想要非常干净,你可以只传递主键并从Hibernate再次加载对象。由于它们可能位于缓存中,因此这不应该非常昂贵。

答案 1 :(得分:0)

只需在ApplicationContext中提供bean范围,或者在声明bean的地方提供Annotation。如果bean由多个线程使用

,则不必执行任何显式复制范围的操作