事務 相關問題

2021-09-30 23:38:18 字數 2322 閱讀 5016

需要事物的方法需要加註解@transactional

spring中@transactional

預設在發生runtimeexception時觸發事物:

解決辦法:

當發生exception時觸發異常-進行回滾

@transactional(rollbackfor=exception.class)

類似問題-某些異常忽略不回滾

@transactional(norollbackfor=***exception.class)

1. service類標籤(一般不建議在介面上)上新增@transactional,可以將整個類納入spring事務管理,在每個業務方法執行時都會開啟乙個事務,不過這些事務採用相同的管理方式。

2. @transactional 註解只能應用到 public 可見度的方法上。 如果應用在protected、private或者 package可見度的方法上,也不會報錯,不過事務設定不會起作用。

3. 預設情況下,spring會對unchecked異常進行事務回滾;如果是checked異常則不回滾。 

辣麼什麼是checked異常,什麼是unchecked異常?

4。 唯讀事務: 

@transactional(propagation=propagation.not_supported,readonly=true) 

唯讀標誌只在事務啟動時應用,否則即使配置也會被忽略。 

啟動事務會增加執行緒開銷,資料庫因共享讀取而鎖定(具體跟資料庫型別和事務隔離級別有關)。通常情況下,僅是讀取資料時,不必設定唯讀事務而增加額外的系統開銷。

propagation列舉了多種事務傳播模式,部分列舉如下:

1.required(預設模式):業務方法需要在乙個容器裡執行。如果方法執行時,已經處在乙個事務中,那麼加入到這個事務,否則自己新建乙個新的事務。

2.not_supported:宣告方法不需要事務。如果方法沒有關聯到乙個事務,容器不會為他開啟事務,如果方法在乙個事務中被呼叫,該事務會被掛起,呼叫結束後,原先的事務會恢復執行。

3. requiresnew:不管是否存在事務,該方法總匯為自己發起乙個新的事務。如果方法已經執行在乙個事務中,則原有事務掛起,新的事務被建立。

4. mandatory:該方法只能在乙個已經存在的事務中執行,業務方法不能發起自己的事務。如果在沒有事務的環境下被呼叫,容器丟擲例外。

5. supports:該方法在某個事務範圍內被呼叫,則方法成為該事務的一部分。如果方法在該事務範圍外被呼叫,該方法就在沒有事務的環境下執行。

6.never:該方法絕對不能在事務範圍內執行。如果在就拋例外。只有該方法沒有關聯到任何事務,才正常執行。

7. nested:如果乙個活動的事務存在,則執行在乙個巢狀的事務中。如果沒有活動事務,則按required屬性執行。它使用了乙個單獨的事務,這個事務擁有多個可以回滾的儲存點。內部事務的回滾不會對外部事務造成影響。它只對datasourcetransactionmanager事務管理器起效。

1. 檢查你方法是不是public的。

2. 你的異常型別是不是unchecked異常。

如果我想check異常也想回滾怎麼辦,註解上面寫明異常型別即可。

3. 資料庫引擎要支援事務,如果是mysql,注意表要使用支援事務的引擎,比如innodb,如果是myisam,事務是不起作用的。

4. 是否開啟了對註解的解析

class="true"/>

5. spring是否掃瞄到你這個包,如下是掃瞄到org.test下面的包

package="org.test" >

@transactional 加於private方法, 無效

@transactional 加於未加入介面的public方法, 再通過普通介面方法呼叫, 無效

@transactional 加於介面方法, 無論下面呼叫的是private或public方法, 都有效

@transactional 加於介面方法後, 被本類普通介面方法直接呼叫, 無效

@transactional 加於介面方法後, 被本類普通介面方法通過介面呼叫, 有效

@transactional 加於介面方法後, 被它類的介面方法呼叫, 有效

@transactional 加於介面方法後, 被它類的私有方法呼叫後, 有效

總結: transactional是否生效, 僅取決於是否載入於介面方法, 並且是否通過介面方法呼叫(而不是本類呼叫)

posted @

2018-07-09 15:32

路迢迢 閱讀(

...)

編輯收藏

事務相關問題 特性 讀問題 隔離級別

事務的特性 事務有四大特性 原子性 強調事務的不可分割.一致性 事務的執行的前後,資料的完整性保持一致.隔離性 乙個事務在執行的過程中,不應該受到其他事務的干擾.永續性 事務一旦結束,資料就持久到資料庫中.如果不考慮事務的隔離性 引發一些安全性問題 兩類問題 讀問題 三類 髒讀 乙個事務讀到了另乙個...

SQL Server 連線和事務相關的問題。

方法 1 dbcc opentran sys.dm exec connections dbcc opentran 針對當前資料庫 dbcc opentran studio 針對指定資料庫 可以看到最旱的活動事務是 54 這個session 發起的。下面看一下它做了點什麼。這裡可以看出 session...

C 事務相關

之前在程式中用到事務時,都是在儲存過程中建立事務來對資料進行控制,其實在c 中也有事務類。1 dbtransaction類對資料庫訪問新增事務,它是對資料庫事務操作的基類,繼承此類的有 system.object system.marshalbyrefobject system.data.commo...