![](/img/trans.png)
[英]Should @transactional services be singleton or prototype in spring?
[英]Spring singleton @Transactional concurrent accesses
在使用@Controller
@Service, @Repository
@Controller
, @Service, @Repository
的Spring 3 MVC Web應用程序場景中@Service, @Repository
如果我使用@Transactional
注釋@Service
類,並將bean的范圍保留為Singleton,則事務管理器會在出現以下情況時阻塞該服務方法:並發訪問?
在單例的情況下,由於在任何時間點在應用程序上下文中都會有一個Service類實例,因此不同線程對已在事務內部執行的同一服務方法的后續請求需要等待,直到該服務為止。方法已完成處理,如果是這樣,請告訴我。
我剛剛開始研究Java EE 6,並將@Stateless EJB用於服務類,並將其與Spring中的工作方式進行比較。
@Transactional指定在事務中執行方法代碼。 有不同的事務隔離級別,它們根據基礎數據存儲區(@Transactional批注的隔離屬性)指定方法的行為。
下一個隔離級別: http : //docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Isolation.html 。
此隔離級別是指基礎數據存儲,而不是方法。
最積極的隔離級別是可序列化的:一個常量,指示防止臟讀,不可重復讀和幻像讀。 該級別包括ISOLATION_REPEATABLE_READ中的禁止條件,並且進一步禁止以下情況:一個事務讀取滿足WHERE條件的所有行,第二個事務插入滿足WHERE條件的行,並且第一個事務針對相同條件重新讀取,並檢索其他“幻影”行中的第二讀。 ( http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Isolation.html#SERIALIZABLE )
如果您想限制對此方法的訪問,則應該只使用synced關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.