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

标签 java spring

我正在使用 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/

相关文章:

java - Spring 如何从 ProxyFactoryBean 获取具有原型(prototype)范围的 bean

spring - spring数据保存和hibernate保存有什么区别?

java - Spring 启动测试 : context loaded for every test?

spring - Spring Data JPA 如何在内部工作

java - 使用 Spotify API - 如何在 Java 中跟踪多个重定向链接?

java - java和javaw的区别

java - 空对象 - 实例化或单例的东西?

java - 如何在不同的线程中做不同的事情?

java - 如何在这个java程序中读取另一个java程序的std输出?

spring - 使用 Spring JPA PagingAndSortingRepository 和 thymeleaf 进行分页