簡體   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