[英]@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.