isolation :隔離級別
具體的設定方式(註解):例如@transactional(isolation = isolation.default )
隔離級別
含義default
使用資料庫預設的事務隔離級別
read_uncommitted
允許讀取尚未提交的修改,可能導致髒讀、幻讀和不可重複讀
read_committed
允許從已經提交的事務讀取,可防止髒讀、但幻讀,不可重複讀仍然有可能發生
repeatable_read
對相同欄位的多次讀取的結果是一致的,除非資料被當前事務自生修改。可防止髒讀和不可重複讀,但幻讀仍有可能發生
serializable
完全服從acid隔離原則,確保不發生髒讀、不可重複讀、和幻讀,但執行效率最低。
propagation:傳播行為
所謂事務的傳播行為是指,如果在開始當前事務之前,乙個事務上下文已經存在,此時有若干選項可以指定乙個事務性方法的執行行為。
具體的設定方式(註解):@transactional(propagation = propagation.required)
傳播行為
含義required
表示當前方法必須在乙個具有事務的上下文中執行,如有客戶端有事務在進行,那麼被呼叫端將在該事務中執行,否則的話重新開啟乙個事務。(如果被呼叫端發生異常,那麼呼叫端和被呼叫端事務都將回滾)
mandatory
表示當前方法必須在乙個事務中執行,如果沒有事務,將丟擲異常
never
表示當方法務不應該在乙個事務中執行,如果存在乙個事務,則丟擲異常
not_supported
表示該方法不應該在乙個事務中執行。如果有乙個事務正在執行,他將在執行期被掛起,直到這個事務提交或者回滾才恢復執行
supports
表示當前方法不必需要具有乙個事務上下文,但是如果有乙個事務的話,它也可以在這個事務中執行
nested
表示如果當前方法正有乙個事務在執行中,則該方法應該執行在乙個巢狀事務中,被巢狀的事務可以獨立於被封裝的事務中進行提交或者回滾。如果封裝事務存在,並且外層事務丟擲異常回滾,那麼內層事務必須回滾,反之,內層事務並不影響外層事務。如果封裝事務不存在,則同propagation_required的一樣
requires_new
表示當前方法必須執行在它自己的事務中。乙個新的事務將啟動,而且如果有乙個現有的事務在執行的話,則這個方法將在執行期被掛起,直到新的事務提交或者回滾才恢復執行。
幾點說明:
匯入外部資源檔案
註冊元件包掃瞄,把類上標註了@controller @service @repository @component 都會自動加入到spring容器中
配置乙個事物通知,即執行的方法隔離級別和傳播行為, 配置事務通知在類上執行操作(切入點)。
實現步驟:
1、定義資料庫的配置檔案(db.properties),定義業務類userdao,userservice。
2、定義spring的配置檔案(spring-aspect.xml)
匯入通過匯入資料庫配置檔案,然後通過包掃瞄的方式把userdao,userservice註冊到spring的容器當中,配置資料額源,jdbc 的模板,最後事務管理器,配置事務通知,切入點。
配置檔案(db.properties)
db.username=root
db.password=root
db.url=jdbc:mysql:
db.driverclass=com.mysql.jdbc.driver
業務類(userdao,userservice)
@repository
public class userdao
}@service
public class userservice
}
spring配置檔案(spring-aspect.xml)
<?xml version="1.0" encoding="utf-8"?>
測試方法
public class aspecttest
}
基於註解實現
第一步是在需要事務的類或者方法上面新增@transactional()
註解,裡面可以通過propagation和isolation指定事務的隔離級別和傳播行為。
@service
public class userservice
}
@enabletransactionmanagement
來啟用註解式事務管理,相當於之前在xml中配置的
註解驅動。
通過包掃瞄@componentscan相當於 實現業務類註冊到spring容器當中。
通過@propertysource和 @value實現讀取配置檔案,並且把之賦值到對應的屬性當中。
@configuration 說明該類是乙個配置類相當於(),@bean 相當於(),註冊資料來源,jdbc模板,事務管理器。
@enabletransactionmanagement
@componentscan(basepackages = "zfcoding.tx")
@propertysource("classpath:db.properties")
@configuration
public class mydatasourceconfig ")
private string username;
@value("$")
private string password;
@value("$")
private string url;
@value("$")
private string driveclass;
@bean
public datasource datasource() throws propertyvetoexception
@bean
public jdbctemplate jdbctemplate() throws propertyvetoexception
//註冊事務管理器在容器中
@bean
public platformtransactionmanager transactionmanager() throws propertyvetoexception
}
測試類
public class txtest
}
基於xml實現
配置檔案
<?xml version="1.0" encoding="utf-8"?>
測試類
public class xmltxtest
}
以上就是spring 事務配置的全過程,完事。
往期內容
spring ioc 知識點彙總
spring aop 的實現方式(xml, 註解)
深入理解spring中bean的生命週期
spring事務管理方式
spring配置檔案中關於事務配置總是由三個組成部分,分別是datasource transactionmanager和 機制這三部分,無論哪種配置方式,一般變化的只是 機制這部分。datasource transactionmanager這兩部分只是會根據資料訪問方式有所變化,比如使用hibern...
Spring事務管理
spring是ssh中的管理員,負責管理其它框架,協調各個部分的工作。今天一起學習一下spring的事務管理。spring的事務管理分為宣告式跟程式設計式。宣告式就是在spring的配置檔案中進行相關配置 程式設計式就是用註解的方式寫到 裡。下面先說宣告式 spring配置檔案中關於事務配置總是由三...
spring事務管理
一 xml配置事務 二 註解的方式配置事務 bean id txmanaager class org.springframework.orm.hibernate3.hibernatetransactionmanager property name sessionfactory ref session...