Spring 事務管理

Spring 事務管理
什麼是事務回滾?
舉個例子:比如轉賬操作,甲先成功匯給乙現金,若乙沒能取款成功,那麼甲的現金就應該自動退還
Spring提供了很好的事務管理體系


Spring要進行事務管理,首先需要導入以下jar包:
cglib-nodep-2.1_3.jar
org.springframework.transaction-3.1.1.RELEASE.jar



以下是採用註解方式進行事務操作
1.在配置文件裏面,首先配置Spring事務管理器:

wKioL1bIfp7hHT2YAAAqkz-eK5I593.png
引用jdbc包下的datasource下的DataSourceTransactionManager
當然,也同樣要爲它匹配數據源,即dataSource,因爲我們要告訴事務管理器它操作的對象數據是誰



2.由於我們是採用註解方式操作事務,所以需要在配置文件中啓動事務註解:

wKioL1bIfsHScwXkAABAsfNTRXw418.png
transaction-manager屬性填寫的就是上一步中的事務管理器




3.在需要進行事務管理的具體方法或具體類處進行註解:

wKiom1bIfw7gIYeVAAB45qntHCE995.png
在上例中,爲這個類標記了@Transactional(rollbackForClassName="RuntimeException")指的是這個類下的所有方法均賦予事務回滾操作
括號中的rollbackForClassName指的是一旦發生了指定異常,就自動進行事務回滾,例如此處指定了RuntimeException
爲buy方法標記了:@Transactional(propagation=Propagation.REQUIRES_NEW)指的是賦予這個方法管理事務的標記,若當前類沒有做標記而這個方法做了標記,則指只有這個方法可以操作事務
括號中的propagation是指事務的傳播行爲,默認是REQUIRED,指當這個事務被別的事務調用時,則進入到那個調用的事務中去
若按本例中設置爲REQUIRES_NEW則指當這個事務被別的事務調用時,則先進行完當前事務,再進行那個調用的事務


以上可以舉個通俗的例子:

比如甲有現金40,現在他買了兩本書,一本20元,一本50元,那麼他結賬時按照正常來說應該是隻能買得一本也就是那本20元的,而在事務管理中,結賬就是一個事務,單獨買每一本書也是一個事務,如果我們設置爲REQUIRES,則表示按照結賬時的事務來進行,也就是在結賬第二本時發現餘額不足,則結賬事務回滾,導致第一本也買不成。

若我們設置成REQUIRED_NEW,則表示在結賬第一本時,就應該先將結賬這個整體事務先掛起,然後去調用買第一本書的事務,成功之後,回到整體事務,但是這個時候買第二本書,所以又會進入到買第二本書的事務,發現餘額不足,所以買第二本不成功,買第二本回滾,但是不影響已經成功的第一本。所以我們纔將其設置爲REQUIRES_NEW。


事務回滾所需要的jar包請見文末。

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