spring的事務管理分為:宣告式事務和程式設計式事務
spring對事務管理通常分為三部分:datasource、transactionmanager和**機制這三部分,無論哪種配置方式,一般變化的只是**機制這部分。
hibernate.dialect=org.hibernate.dialect.mysqldialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update
* 方式2:在spring配置檔案中,載入hibernate的配置檔案hibernate.cfg.xml
配置資料來源(datasource)的方式有多種,這裡用的是dbcp連線池的方式,需要引入兩個包commons-dbcp.jar和commons-pool.jar;
注:如果使用第二種方式,可以在hibernate中配置資料來源,然後引入hibernate配置檔案,但是查資料說hibernate3已經不支援dbcp連線池配置資料來源,原因是dbcp有bug(不知道啥bug)。
2.spring事務管理
前面一部分主要配置資料來源(datasource),然後是transactionmanager的配置,因為spring不管使用哪種事務管理的配置方式,都需要配置transactionmanager,因此,這部分算是事務管理配置的公共配置部分。
* 首先配置事務管理器,不管用那種方式都需要先配置事務管理器
最後配置的是**方式。
宣告式事務配置方式有3種(也有說4種):
方式1:使用tx標籤方式
這是典型的aop實現,是事務處理的具體實現(相當於事務管理的管理規則),配置要參與事務的切面(或具體的類)
比如:表示,以「add」開頭的方法,事務傳播特性是「required」,propagation表示事務的傳播特性,還可以配置其他屬性。
方式2:使用**的方式
首先宣告乙個transactionproxy,相當於定義事務的規則
然後,對每乙個要實現此事務規則的bean繼承這個事務**bean,生成乙個**dao。
propagation_required
propagation_required
propagation_required
propagation_required,readonly
需要說明的是,這樣配置相當於這個事務**bean是乙個公共的事務管理配置,但是現在如果有兩個dao使用的管理方式不同,那麼就需要在每個**dao中具體配置事務管理,因此,這種**方式又可以分為兩種配置方式:1.所有bean公用乙個事務**bean;2.每個bean單獨配置事務**
方式3:***方式
首先定義乙個事務***,然後配置***都作用於哪些類
propagation_required
propagation_required
propagation_required
propagation_required,readonly
*dao
transactioninterceptor
以上是宣告式事務的配置方式,
程式設計式事務配置方法
方法1:全註解
程式設計式事務在配置檔案中只需要開啟註解即可,其他在具體的dao中使用註解方式配置即可。
//具體的程式**
@transactional
public class userdaoimpl implements userdao
@override
@transactional(propagation=propagation.required,rollbackforclassname="exception")
public void adduser(user user)
@override
@transactional(readonly=true)
public listshowusers()
}
注:有些部落格寫到在配置檔案中開啟註解需要新增上「」這句,但是我沒有配這句也可以成功,不知道什麼原因,可能跟spring的版本有關吧。(猜的,沒有測過)
3.注意事項
* 如果配置了宣告式事務,在出現執行時異常時,事務會回滾,但是出現非執行時異常時,事務不回滾。
* 如果配置了程式設計式事務,則不管出現什麼異常,事務都會回滾。
Spring宣告式事務管理
使用事務的目的是將整個業務的邏輯處理置於同乙個事務中,方便對整個業務進行管理,如業務的事務回滾 在編寫 時,為了將乙個業務的核心邏輯處理放入事務中,有時會這樣寫 session session sf.opensession 開啟乙個session session.gettransaction beg...
Spring宣告式事務管理
spring的宣告式事務管理,可以說是開發人員的福音,也是架構師們的法寶 通過這個神器我們可以有效的解決事務不一致 連線洩露等問題 下面我們就介紹一下spring宣告式事務的配置 1 建立事務管理器 2 制定事務管理 3 建立切面 備註 事務管理機制說明propagation 屬性值 require...
Spring宣告式事務管理
classpath hibernate.cfg.xml public class usermanagerimpl extends hibernatedaosupport implements usermanager public void adduser user user throws excep...