spring事務管理與service或dao做try……catch異常拋出

  在配置了事務代理的Service業務邏輯實現類的方法裏,若將異常捕獲,並且在catch塊中不對事務做顯式提交(或其他應該做的操作如關閉資源等)=生吞掉異常;

        spring的事務邊界是在調用業務方法之前開始的,業務方法執行完畢之後來執行commit or rollback(Spring默認取決於是否拋出runtime異常或unchecked異常)。 

      如果拋出runtime exception 並在你的業務方法中沒有catch到的話,事務會回滾。 

      一般不需要在業務方法中catch異常,如果非要catch,在做完你想做的工作後(比如關閉文件等)一定要拋出runtime exception,否則spring會將你的操作commit,這樣就會產生髒數據。所以你的catch代碼是畫蛇添足。 


由此可以推知,在spring中如果某個業務方法被一個 


     try {    

            //bisiness logic code   


          } catch(Exception e) {   


             //handle the exception   


整個包裹起來,則這個業務方法也就等於脫離了spring事務的管理,因爲沒有任何異常會從業務方法中拋出!全被捕獲併吞掉,導致spring異常拋出觸發事務回滾策略失效。


因此可以在Action層做try……catch異常的捕捉處理

 

轉至:http://a-bin.iteye.com/blog/1056839

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章