2016-09-13 270 views
0

我是春天的新鳥,所以你的幫助對我來說真的很有幫助。春季交易行爲

假設我有以下情形:

@Transactional(propagation = Propagation.REQUIRED, timeout = 1, isolation = Isolation.READ_COMMITTED,rollbackFor=Exception.class) 
public boolean bookMovieTicket() 
{ 
//Check how many tickets are available 
int noTicket=getAvailableTicket(); 
if(noTicket>0) 
{ 
//decrements the count of ticket 
noTicket--; 
updateCount(noTicket); 
return true; 
} 
else 
{ 
return false; 
} 

} 

現在假設兩個用戶打我的應用程序,以便爲我的兩個請求的servlet將創造出具有自己的本地variable.When線程的堆棧新線程的理解如果沒有事務存在,A將觸發函數bookTicket()它將啓動事務。現在我的問題是當線程B調用此方法時,線程B將加入現有事務還是創建新事務?

這個問題可能很愚蠢,但請清除這個疑問,對於每個Web請求,都會有一個由事務管理器創建的新事務? 並針對該請求(該請求的生命週期)應用的事務傳播行爲?

我想知道,對於每一個Web請求是春天的事務管理器啓動一個新的交易線索,我默認

回答

1

事務苦惱,因爲在servlet.xml中,我們通常配置的事務管理器bean作爲單僅用於數據庫,它不會回滾更改的字段。如果您改變了課程中的某個字段,則需要處理併發性問題,例如使計數變量爲AtomicInteger。

+0

感謝您寶貴的回覆,更加清楚我想知道,對於每個Web請求,Spring事務管理器都會啓動一個新的事務,我問這是因爲在servlet.xml中我們通常將事務管理器bean配置爲單例默認 –

+0

不客氣!試試文檔:http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html。 – Journeycorner