spring事務管理(宣告式事務和程式設計式事務)

2021-07-17 02:14:07 字數 2432 閱讀 8629

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...