spring宣告式事務管理的兩種方式

2021-04-09 09:36:26 字數 4612 閱讀 9749

傳統的:

1<

bean 

id="datasource"

class

="org.apache.commons.dbcp.basicdatasource"

destroy-method

="close"

> 2

<

property 

name

="driverclassname"

value

="oracle.jdbc.driver.oracledriver"

/> 3

<

property 

name

="url"

value

="jdbc:oracle:thin:@127.0.0.1:1521:dev"

/> 4

<

property 

name

="username"

value

="kaktos"

/> 5

<

property 

name

="password"

value

="kaktos"

/> 6

bean

> 7

8

<

bean 

id="txmanager" 9

class

="org.springframework.jdbc.datasource.datasourcetransactionmanager"

>

10

<

property 

name

="datasource"

ref="datasource"

/>

11

bean

>

12

13

<

bean 

id="businessbean"

14

class

="org.springframework.transaction.interceptor.transactionproxyfactorybean"

>

15

<

property 

name

="transactionmanager"

ref="txmanager"

/>

16

<

property 

name

="target"

ref="businessbeantarget"

/>

17

<

property 

name

="transactionattributes"

>

18

<

props

>

19

<

prop 

key="*"

>

propagation_required

prop

>

20

props

>

21

property

>

22

bean

>

23

24

<

bean 

id="businessbeantarget"

class

="sample.spring.trans.businessbean"

>

25

<

property 

name

="datasource"

ref="datasource"

/>

24   

bean

>

這樣做的弊端就是不得不為每個需要事務的bean做一次宣告,如果所有的bean都基本上有一致的配置,這樣就太繁瑣啦。

下面是第二種方式:

1<

beans

>

2<

bean 

id="datasource"

class

="org.apache.commons.dbcp.basicdatasource"

destroy-method

="close"

>

3<

property 

name

="driverclassname"

value

="oracle.jdbc.driver.oracledriver"

/>

4<

property 

name

="url"

value

="jdbc:oracle:thin:@127.0.0.1:1521:dev

"/>

5<

property 

name

="username"

value

="kaktos"

/>

6<

property 

name

="password"

value

="kaktos"

/>

7bean

>89

<

bean 

id="txmanager"

10class

="org.springframework.jdbc.datasource.datasourcetransactionmanager"

>

11<

property 

name

="datasource"

ref="datasource"

/>

12bean

>

1314

<

bean 

id="matchallwithpropreq"

15class

="org.springframework.transaction.interceptor.matchalwaystransactionattributesource"

>

16<

property 

name

="transactionattribute"

value

="propagation_required"

/>

17bean

>

1819

<

bean 

id="matchalltxinterceptor"

class

="org.springframework.transaction.interceptor.transactioninterceptor"

>

20<

property 

name

="transactionmanager"

ref="txmanager"

/>

21<

property 

name

="transactionattributesource"

ref="matchallwithpropreq"

/>

22bean

>

2324

<

bean 

id="autoproxycreator"

25class

="org.springframework.aop.framework.autoproxy.beannameautoproxycreator"

>

26<

property 

name

="interceptornames"

>

27<

list

>

28<

idref 

local

="matchalltxinterceptor"

/>

29list

>

30property

>

31<

property 

name

="beannames"

>

32<

list

>

33<

idref 

local

="businessbean"

/>

34list

>

35property

>

36bean

>

3738

39<

bean 

id="businessbean"

class

="sample.spring.trans.businessbean"

>

40<

property 

name

="datasource"

ref="datasource"

/>

41bean

>

42beans

>

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

spring 宣告式事務管理

在spring中經常用transactionproxyfactorybean完成宣告式事務管理 使用transactionproxyfactorybean 需要注入它所依賴的事務管理器,設定 的目標物件,物件的生成方式和事務屬性.物件時再目標物件上生成的包含事務和aop切面的新物件,它可以賦給目標的...

Spring宣告式事務管理

程式設計式事務使用transactiontemplate 是硬編碼 宣告式事務是基於aop。對指定方法前後進行攔截,在目標方法開始之前建立或加入一個事務,在執行完目標方法之後根據執行結果提交或者回滾事務。xml配置檔案 propagation required 注 在注入service時需要注入 類...