Spring事務 異常

2021-08-22 20:12:32 字數 879 閱讀 3699

spring事務、異常

spring的事務實現採用基於aop的***來實現,如果沒有在事務配置的時候註明回滾的checked exception,那麼只有在發生了unchecked exception的時候,才會進行事務回滾。因此在dao層和service層,最好丟擲unckecked exception,畢竟對於資料庫操作,使用unckecked exception更加合適,這個方面的例子hibernate就是乙個,在hibernate2中,hibernateexception還是checked exceptions,但是到了hibernate3中就成了unchecked exceptions,因為對於資料庫操作來說,一旦出現異常,就是比較嚴重的錯誤,而且在client端基本上是無能為力的,所以使用unchecked exceptions更加合適。

另外,在dao和service層的**中,除非是為了異常的轉化、重新丟擲,否則不要捕捉和處理異常,否則aop在攔截的時候就不能捕捉到異常,也就不能正確執行回滾。這一點通常很容易被忽視,只有在明白了spring的事務處理機制後,才能領會到。

對於hibernate的異常,spring會包裝hibernate的upckecked hibernateexception到daoacces***ception,並且丟擲,在事務管理層,一旦接收到daoacces***ception就會觸發事務的回滾,同時該異常會繼續向上層丟擲,供上層進一步處理,比如在ui層向使用者反饋錯誤資訊等。

在spring的事務管理環境下,使用unckecked exception可以極大地簡化異常的處理,只需要在事務層宣告可能丟擲的異常(這裡的異常可以是自定義的unckecked exception體系),在所有的中間層都只是需要簡單throws即可,不需要捕捉和處理,直接到最高層,比如ui層再進行異常的捕捉和處理。

spring預設事務異常處理

spring宣告式事務管理預設對非檢查型異常和執行時異常進行事務回滾,而對檢查型異常則不進行回滾操作。那麼什麼是檢查型異常什麼又是非檢查型異常呢?1 繼承自runtimeexception或error的是非檢查型異常 2 繼承自exception的則是檢查型異常 runtimeexception本身...

Spring事務回滾和異常類

1 異常的一些基本知識 2 spring事務以及配置 transactional rollbackfor myexception.class,norollbackfor otherexception.class public void updateuser user user b 配置方式。定義時宣...

aop與spring事務的異常機制

今天在做自己的專案的時候,明明在配置檔案中配置了事務管理機制,然後想測試一下事務是否生效,一直不生效 後來發現原來是因為我自己定義的日誌切面把異常抓取了,但是沒有丟擲去 後來就把異常丟擲去就行了,最重要的是 切面裡面丟擲的異常必須是spring註解抓取的子類或者等於它,具體的看下 component...