簡體   English   中英

捕獲異常后事務回滾

[英]Transaction RollBack after catching exception

在使用聲明式事務管理捕獲異常后,有什么方法可以回滾事務。 我有這段代碼。

@Component
@Transactional(rollbackFor = EvictionException.class)
Public class Eviction{

@Autowired
private Alerter alerter;

@Scheduled(cron = "${evictor.cron.expression}")
public void evictObjectFromDatabase(){
try{
   ....
   DO SOME DELETION QUERIES
}catch(Exception ex){
   alerter.produceAlert("Failed to delete entries from database");
}
}
}

如果在刪除時產生異常,我需要發出警報,由另一個團隊監控 Swing UI。 我還需要回滾事務,但使用 rollBackFor = Exception.class 不起作用。

您需要使用@Transactional(rollbackFor = Exception.class)注釋您的方法,並在 catch 塊中拋出異常(以便事務代理可以檢測到異常並因此回滾)例如

try{
   ....
   DO SOME DELETION QUERIES
}catch(Exception ex){
   alerter.produceAlert("Failed to delete entries from database");
   throw ex;// this is important
}

@Ambuj Jauhari 如果您查看@transactional 的文檔,則回滾會因錯誤或運行時異常而發生。在您沒有為異常 .class 提供回滾時,最有可能發生回滾,因為拋出的異常屬於運行時異常而不是任何檢查異常。如果拋出的異常類型是任何檢查異常,那么如果您沒有為 exception.class 屬性提供回滾,就不會發生回滾

使用 SqlTransaction 和 RollBack

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM