繁体   English   中英

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

[英]@Async Copy bean scope from one thread to another

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

问候。

您不能将Hibernate会话传递给另一个线程。 一些bean连接到当前线程。 活动数据库事务就是这样的一个bean。 Spring将其保存在ThreadLocal ,没有API可以将其传递给另一个线程。

您需要做的是将您要处理的对象传递到新线程,在那里获得一个新会话,并将对象em.merge()进入新会话。 或者,如果您想真正干净,只需传递主键并从Hibernate重新加载对象即可。 由于它们可能会在缓存中,所以它应该不会很昂贵。

只需在ApplicationContext中提供bean范围,或在声明bean的地方提供Annotation。 如果该bean被多个线程使用,则无需执行任何显式操作即可复制作用域

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM