我正在使用 Spring @Async
发出异步请求,我想知道,当我使用 时,如何将像 Hibernate session 这样的 Bean 从一个线程传递到另一个线程>@Async
?
问候。
最佳答案
您无法将 Hibernate session 传递给另一个线程。一些 bean 连接到当前线程。 Activity 数据库事务就是这样的一种 bean。 Spring 将其保留在 ThreadLocal 中,并且没有 API 可以将其传递给另一个线程。
您需要做的是将要处理的对象传递给新线程,在那里获取一个新 session ,然后将对象 em.merge()
放入新 session 中。或者,如果您想要真正干净,您可以只传递主键并从 Hibernate 再次加载对象。因为它们可能会在缓存中,所以这应该不会很昂贵。
关于java - @Async 将 bean 范围从一个线程复制到另一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29964871/