傳統的:
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時需要注入 類...