spring事物回滾
Spring 事務管理
什麼是事務回滾?
舉個例子:比如轉賬操作,甲先成功匯給乙現金,若乙沒能取款成功,那麼甲的現金就應該自動退還
Spring提供了很好的事務管理體系
Spring要進行事務管理,首先需要匯入以下jar包:
cglib-nodep-2.1_3.jar
org.springframework.transaction-3.1.1.RELEASE.jar
以下是採用註解方式進行事務操作
1.在配置檔案裡面,首先配置Spring事務管理器:
引用jdbc包下的datasource下的DataSourceTransactionManager
當然,也同樣要為它匹配資料來源,即dataSource,因為我們要告訴事務管理器它操作的物件資料是誰
2.由於我們是採用註解方式操作事務,所以需要在配置檔案中啟動事務註解:
transaction-manager屬性填寫的就是上一步中的事務管理器
3.在需要進行事務管理的具體方法或具體類處進行註解:
在上例中,為這個類標記了:@Transactional(rollbackForClassName="RuntimeException")指的是這個類下的所有方法均賦予事務回滾操作
這個用了註解的方式,目前很多java教程裡面講的都是用註解了,當然也可以使用xml方式來配置,括號中的rollbackForClassName指的是一旦發生了指定異常,就自動進行事務回滾,例如此處指定了RuntimeException
為buy方法標記了:@Transactional(propagation=Propagation.REQUIRES_NEW),指的是賦予這個方法管理事務的標記,若當前類沒有做標記而這個方法做了標記,則指只有這個方法可以操作事務
括號中的propagation是指事務的傳播行為,預設是REQUIRED,指當這個事務被別的事務呼叫時,則進入到那個呼叫的事務中去
若按本例中設定為REQUIRES_NEW則指當這個事務被別的事務呼叫時,則先進行完當前事務,再進行那個呼叫的事務
以上可以舉個通俗的例子:
比如甲有現金40,現在他買了兩本書,一本20元,一本50元,那麼他結賬時按照正常來說應該是隻能買得一本也就是那本20元的,而在事務管理中,結賬就是一個事務,單獨買每一本書也是一個事務,如果我們設定為REQUIRES,則表示按照結賬時的事務來進行,也就是在結賬第二本時發現餘額不足,則結賬事務回滾,導致第一本也買不成。
若我們設定成REQUIRED_NEW,則表示在結賬第一本時,就應該先將結賬這個整體事務先掛起,然後去呼叫買第一本書的事務,成功之後,回到整體事務,但是這個時候買第二本書,所以又會進入到買第二本書的事務,發現餘額不足,所以買第二本不成功,買第二本回滾,但是不影響已經成功的第一本。所以我們才將其設定為REQUIRES_NEW。
相關推薦
spring事物回滾
Spring 事務管理什麼是事務回滾? 舉個例子:比如轉賬操作,甲先成功匯給乙現金,若乙沒能取款成功,那麼甲的現金就應該自動退還 Spring提供了很好的事務管理體系 Spring要進行事務管理,首先需要匯入以下jar包:cglib-nodep-2.1_3.jaror
mysql的engine不同,導致事物回滾失敗的問題
access mat lte col most heap eight replicat pool 近期在項目上遇到遇到一個頭疼的問題,前方銷售團隊反饋了一個客戶那邊在創建用戶(save object to DB)報錯了以後,前臺展示了錯誤,但是數據庫卻保存了這條記錄。 接
peewee 事物 回滾
create reat utf-8 ext def mod one color password peewee 事物 回滾 #!/usr/bin/env python # coding=utf-8 from peewee import * db = MySQLData
PHP 如何在Redis中實現事物(事物提交和事物回滾)
講了這麼多Redis的使用,今天我們來講下Redis的事物 1.首先,我們來看一下Redis中事物相關的指令, 命令原型 命令描述 MULTI 用於標記事務的開始,其後執行的命令都將被存入命令佇列,直到執行EXEC時,這些命令才會被原子執行.
spring手動回滾事務
@Transactional(rollbackFor = { Exception.class }) public String methods() { String str = "-----------"; try { doSomethin
spring事務回滾的多種方式
轉:https://www.cnblogs.com/zeng1994/p/8257763.html start 看下下面的說明,會對理解本人貼出的程式碼有幫助。 1.程式碼中事務控制的3種方式 程式設計式事務:就是直接在程式碼裡手動開啟事務,手動提交,手動回滾。優點就是可以靈活控制,缺點
Java異常與事物回滾探究
轉自 http://www.linuxidc.com/Linux/2014-03/98885.htm spring 事務註解 預設遇到throw new RuntimeException("...");會回滾 需要捕獲的throw new Exception("...")
mybatis事物回滾
1.新增: @Transactional 2.丟擲runtime異常 throw new RuntimeException("引數錯誤,事物回滾"); @Override @Transactional public Message updateSeed(J
spring 事務回滾、程式碼回滾
1、遇到的問題 當我們一個方法裡面有多個數據庫儲存操作的時候,中間的資料庫操作發生的錯誤。虛擬碼如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(P
關於Spring事務回滾@Transactional使用記錄
測試@Transactional的在處理異常時是否生效, 首先這裡隨便寫一個update的方法,對資料庫進行更新操作,然後在操作完之後拋一個異常 @Override @Transactional(rollbackFor = {Exception.class})
spring日誌回滾方法
在使用spring中,配置了事務,並且在service方法上添加了@Transactional但是當程式出錯時並不能回滾,分析原因發現,預設spring事務只在發生未被捕獲的 runtimeexcetpion時才回滾。 spring aop 異常捕獲原理:被攔截的方法需顯式丟擲異常,並不能經
ThinkPHP資料庫驅動之mysql事物回滾
很簡單的一個事物回滾,簡單介紹下事物回滾,示例怎麼使用Thinkphp的回滾。下面上倆個由淺入深的例子。會給你幫助理解,和提升。 //具體的講解請允許我把它放在了 http://www.ichasem.com/?p=331 這裡 1、開啟事務方法 startTrans() 2、事務提交方
try catch異常丟擲與spring事務回滾策略相關
將異常捕獲,並且在catch塊中不對事務做顯式提交(或其他應該做的操作如關閉資源等)=生吞掉異常; spring的事務邊界是在呼叫業務方法之前開始的,業務方法執行完畢之後來執行commit or rollback(Spring預設取決於是否丟擲runtime異常).
Spring學習-回滾事務之修改預設回滾型別
今天發現了個奇怪的問題,自定義的異常(extens Exception)丟擲的異常既然不會滾,然後查了下資料,原來spring預設回滾RuntimeException(及其下所有子類)。 解決辦法: 1.自定義的異常extens RuntimeException 2.在事務
Spring事務回滾與異常
Spring的事務管理預設是針對unchecked exception回滾,也就是預設對Error異常和RuntimeException異常以及其子類進行事務回滾,且必須對丟擲異常,若使用try-catch對其異常捕獲則不會進行回滾,會把事物吞併!需要手動丟擲執行時異常才會回滾(Error
spring 事務回滾
1、遇到的問題 當我們一個方法裡面有多個數據庫儲存操作的時候,中間的資料庫操作發生的錯誤。虛擬碼如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(Person2);//假如這句發生了錯
PHP中PDO連線進行事物回滾及try{}catch(){}
<?php echo "hellow"; header('content-type:text/html;charset=utf8'); $mysql="mysql:host=127.0.0.1;dbname=user"; $pdo=new PDO($mysql,'r
hibernate的executeWithNativeSession(HibernateCallbk())、execute(new HibernateCallback())無法對spring事務回滾
hibernate作為DAO使用如下的方法操作資料庫時,無法對spring在service層新增的事務進行回滾。 hibernateTemplate.executeWithNativeSession(new HibernateCallback(
異常型別 && spring事務回滾
使用spring難免要用到spring的事務管理,要用事務管理又會很自然的選擇宣告式的事務管理,在spring的文件中說道,spring宣告式事務管理預設對非檢查型異常和執行時異常進行事務回滾,而對檢查型異常則不進行回滾操作。那麼什麼是檢查型異常什麼又是非檢查型異常呢?最簡單的判斷點有兩個:1.繼承自runt
java spring事務回滾
spring 事務回滾 1、遇到的問題 當我們一個方法裡面有多個數據庫儲存操作的時候,中間的資料庫操作發生的錯誤。虛擬碼如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.