a.程式設計式事務管理:通過transaction template手動管理事務,實際應用中很少使用。
b.使用xml配置宣告式事務:實際中用的很多因為**侵入性最小,而且是通過aop實現的。
(這裡我們講解一下宣告式事務)
a.基於< tx> 和< aop>命名空間的宣告式事務管理:其與spring aop 結合緊密,可以充分利用切點表示式的強大支援,使得管理事務更加靈活。
b.基於 @transactional 的註解方式:此方式將宣告式事務管理簡化到了極致。操作簡單,功能不遜a方式。(其他兩種方法因長期不使用本次不再介紹)
spring封裝了事務管理的**,事務的操作一般有三步,開啟事務,提交事務,回滾事務。為了讓我們更好的管理事務的物件,spring為我們提供了乙個介面platfromtransactionmanager,它有很多實現類,我們就使用其中的乙個實現類
datasourcetransactionmanager,因為使用jdbc或者ibatis進行資料持久化時使用。
配置xml檔案:
a.將兩個bean建立連線乙個是jdbc乙個是dao層類
b.配置資料來源(並引入外部properties檔案)
$
c.初始化事務管理器
d.配置事務aop通知
e.定義aop配置
這樣就完成了xml方式配置
a.先配置切點表示式
@pointcut("execution(* com.***.spring.******.say..*.*(..))")
b.配置連線資料庫
@propertysource("classpath:jdbc.properties")
@componentpublic class mydatasource extends drivermanagerdatasource") string driver, @value("$") string url, @value("$") string username, @value("$") string password, @value("$") string characterencoding)
}
c.在dao層中設定開始事務以及設定屬性
@transactional(rollbackfor = )
@transactional(readonly = true)//事務的屬性下面介紹
d.在main方法類中新增開啟事務相關註解
@slf4j
@configuration
@componentscan(basepackages = "com.lanou3g.spring.transaction.annotation")// 開啟事務相關註解支援
@enabletransactionmanagement
此時我們使用的@enabletransactionmanagement這個註解,我們可以使用@transactional不過屬性要在後面直接加上,就此註解配置完成。但是spring aop **有兩個弊端乙個是註解方式只能用到public方法上,和自呼叫問題,所以我們可以將aspectj 資訊新增到 xml 配置資訊中,下次再講解。
事務定義介面 transactiondefinition 中定義了事務描述相關的三類常量:事務隔離級別、事務傳播行為、事務預設超時時限,及對它們的操作。
五大隔離級別:
隔離級別說明
七大傳播行為:
我們可以在xml中和註解中分別新增完成開始事務介紹一下xml配置
a.回滾特定異常
b.不會滾特定異常
至此兩種配置方式已經結束,但是關於事務的更多知識還有很多下次分享! Spring Aop實現宣告式事務
在系統的業務邏輯層中,每個業務會涉及到多個資料庫的操作,業務層其實是通過資料層的多個方法共同完成乙個業務,而這些方法要麼都執行,要麼都不執行,否則會造成資料的不一致,由此我們要對業務層進行事務管理。我們有以下兩種方式實現對業務的事務控制。1.傳統的方式 每個業務方法都手動加上事務控制的 2.採用ao...
Spring AOP宣告式事務異常回滾
近日測試用例,發現這樣乙個現象 在業務 中,有如下兩種情況,比如 throw new runtimeexception 事物回滾 throw new exception 事物沒有回滾 自以為很了解事物,或許時間久遠的緣故,沒分析出來何故,遂查閱了下資料,寫下了如下的內容,供參考 1 spring的a...
宣告式事務
宣告式事務編輯以方法為單位,進行事物控制 丟擲異常,事物回滾。最小的執行單位為方法。決定執行成敗是通過是否丟擲異常來判斷的,丟擲異常即執行失敗 宣告式事務 declarative transaction management 是spring提供的對程式事務管理的方式之一。spring的宣告式事務顧名...