事務回滾:比如乙個部門裡面有很多成員,這兩者分別儲存在部門表和成員表裡面,在刪除某個部門的時候,假設我們預設刪除對應的成員。但是在執行的時候可能會出現這種情況,我們先刪除部門,再刪除成員,但是部門刪除成功了,刪除成員的時候出異常了。這時候我們希望如果成員刪除失敗了,之前刪除的部門也取消刪除。這種場景就可以使用@transactional事物回滾。
簡單概括為,如果乙個事務方法在執行時某乙個方法出現異常,那麼前所執行的所有該事務方法體內的方法都進行回滾,即失效、
實現事務回滾分三步:
第一步:
配置事務管理器來控制事務
注意:一定不要忘記將事務管理器加入進容器,且事務管理器必須管理資料來源
//事務管理器
@bean
public platformtransactionmanager transactionmanager()
throws propertyvetoexception
第二步:
使用**@transactional註解:給方法上標註@transactional表示當前方法是乙個事務方法;spring在執行這個方法的時候就會進行事務控制,如果這個方法正常進行,那麼所有的方法都提交,如果在執行過程**現異常,那麼所有的方法都回滾。**
@transactional
//表示當前是乙個事務方法
public
void
insertuser()
第三步:
使用@enabletransactionmanagement註解:開啟基於註解的事務管理功能;
示例:配置類:
@componentscan
("com.tx"
)@enabletransactionmanagement
//開啟基於註解的事務管理功能的註解
@configuration
//宣告這是乙個配置類
public
class
txconfig
//jdbctemplate可以簡化增刪改查的操作
@bean
public jdbctemplate jdbctemplate()
throws propertyvetoexception
//註冊事務管理器
@bean
public platformtransactionmanager transactionmanager()
throws propertyvetoexception
}
業務邏輯層(dao):
@repository
public
class
userdao
}
服務層(service):
@service
public
class
userservice
}
測試類:
public
class
test_tx
}
成功效果:
當我們把transactional註解關閉,測試失敗,效果如下:
剛剛開始學spring註解的知識,只是為了記錄。有不對的地方,歡迎指出!
Spring宣告式事務手動回滾方案
spring的事務一般分為宣告式事務 或叫註解式事務 和程式設計式事務,程式設計式事務比較靈活,可以將事務的粒度控制的更細,並且可以控制何時提交,哪種情況回滾。而宣告式事務使用 transactional註解,使用起來沒有那麼靈活,但是對業務 沒有入侵,而且本身支援一些異常情況下的回滾。但是這個異常...
MySQL事務和事務回滾
1 定義 一件事從開始發生到結束的整個過程 2 作用 確保資料一致性 3 事務和事務回滾應用 1 mysql中sql命令會自動commit到資料庫 show variables like autocommit 2 事務應用 1 開啟事務 mysql begin mysql 一條或多條sql語句 此時...
SQL Server 事務及回滾事務
第一種 declare ierrorcount intset ierrorcount 0 begin tran tran1 insert into t1 id,c1 values 1 1 set ierrorcount ierrorcount error insert into t1 id,c1 v...