邏輯上的一組操作,組成這組操作的各個單元,要麼全都成功,要麼全都失敗。
建立accountdao介面,其中包含乙個轉賬方法
accountdao介面
public
inte***ce
accountdao
accountdaoimpl實現類
public
class
accountdaoimpl
implements
accountdao
}
"datasource"
class
="org.springframework.jdbc.datasource.drivermanagerdatasource"
>
name
="driverclassname"
value
="com.mysql.jdbc.driver"
/>
name
="url"
value
="jdbc:mysql://localhost/spring"
/>
name
="username"
value
="root"
/>
name
="password"
value
="root"
/>
bean
>
"jdbctemplate"
class
="org.springframework.jdbc.core.jdbctemplate"
>
name
="datasource"
ref="datasource"
/>
bean
>
"accountdao"
class
="com.itheima.jdbc.accountdaoimpl"
>
name
="jdbctemplate"
ref="jdbctemplate"
/>
bean
>
name
="datasource"
ref="datasource"
/>
bean
>
<
tx:adviceid=
"txadvice"
transaction-manager
="transactionmanager"
>
<
tx:attributes
>
<
tx:method
name
="*"
propagation
="required"
isolation
="default"
read-only
="false"
/>
tx:attributes
>
tx:advice
>
<
aop:config
>
<
aop:pointcut
expression
="execution(* com.itheima.jdbc.*.*(..))"
id="txpointcut"
/>
<
aop:advisor
advice-ref
="txadvice"
pointcut-ref
="txpointcut"
/>
aop:config
>
測試:當呼叫轉賬方法時,如果發生異常,因為配置了事務管理器,賬戶餘額應該都不變;如果沒有配置事務,會發現其中轉賬一方金額增加,另乙個金額不變,這在轉賬中是不被允許的。
@test
public
void
annotationtest()
在spring容器中註冊事務註解驅動
<
tx:annotation-driven
transaction-manager
="transactionmanager"
/>
在需要使用事務的spring bean類或者bean類的方法上新增註解@transactional。在類上對所有方法都有效,在某個方法上,只對該方法有效。
引數名稱
描述value
指定要使用的事務管理器
transactionmanager
指定事務的限定符值
isolation
指定事務的隔離級別
norollbackfor
特定異常不回滾
norollbackforclassname
特定的多個異常不回滾
propagation傳播行為
read-only
事務是否唯讀
rollbackfor
遇到特定異常強制回滾事務
rollbackforclassname
遇到多個特定異常強制回滾事務
timeout
事務超時時長
spring配置事務註解驅動
"datasource"
class
="org.springframework.jdbc.datasource.drivermanagerdatasource"
>
name
="driverclassname"
value
="com.mysql.jdbc.driver"
/>
name
="url"
value
="jdbc:mysql://localhost/spring"
/>
name
="username"
value
="root"
/>
name
="password"
value
="root"
/>
bean
>
"jdbctemplate"
class
="org.springframework.jdbc.core.jdbctemplate"
>
name
="datasource"
ref="datasource"
/>
bean
>
"accountdao"
class
="com.itheima.jdbc.accountdaoimpl"
>
name
="jdbctemplate"
ref="jdbctemplate"
/>
bean
>
name
="datasource"
ref="datasource"
/>
bean
>
<
tx:annotation-driven
transaction-manager
="transactionmanager"
/>
在方法上新增註解
public
class
accountdaoimpl
implements
accountdao
@transactional
(propagation = propagation.required,
isolation = isolation.default, readonly =
false
)public
void
transfer
(string outuser, string inuser, double money)
}
宣告式事務管理
基於spring的aop的宣告式事務管理 這種管理方式只需要保證事務層方法命名有一定的規律,通過配置即可實現。基於 transational的宣告式事務管理 這種方式的事務管理是基於spring註解實現的,只需要在需要管理的事務層上加上該註解即可。配置註解自動掃瞄 新增註解 transactiona...
Spring宣告式事務管理
使用事務的目的是將整個業務的邏輯處理置於同乙個事務中,方便對整個業務進行管理,如業務的事務回滾 在編寫 時,為了將乙個業務的核心邏輯處理放入事務中,有時會這樣寫 session session sf.opensession 開啟乙個session session.gettransaction beg...
Spring宣告式事務管理
spring的宣告式事務管理,可以說是開發人員的福音,也是架構師們的法寶 通過這個神器我們可以有效的解決事務不一致 連線洩露等問題 下面我們就介紹一下spring宣告式事務的配置 1 建立事務管理器 2 制定事務管理 3 建立切面 備註 事務管理機制說明propagation 屬性值 require...