當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring AOP事务管理(使用切面把事务管理起来)
生活随笔
收集整理的這篇文章主要介紹了
Spring AOP事务管理(使用切面把事务管理起来)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在《Spring Transaction 分析事務屬性(事務的基本概念、配置)》基礎上?
1、使用基于注解的AOP事務管理?
<tx:annotation-driven transaction-manager="transactionManager"/>?
<aop:aspectj-autoproxy />?
探索tx:annotation-driven標簽:?
<tx:annotation-driven/>標簽是注解驅動的事務管理支持的核心。?
<tx:annotation-driven/>標簽的屬性:?
transaction-manager:指定到現有的PlatformTransactionManager bean的引用,通知會使用該引用。default="transactionManager"?
mode:指定Spring事務管理框架創建通知bean的方式。可用的值有proxy和aspectj。前者是默認值,表示通知對象是個JDK代理;后者表示Spring AOP會使用AspectJ創建代理。?
order:指定創建的切面的順序。只要目標對象有多個通知就可以使用該屬性。?
proxy-target-class:該屬性如果為true就表示你想要代理目標類而不是bean所實現的所有接口。default="false"?
探索@Transactional注解:?
你可以指定傳播、隔離級別、超時以及允許和不允許的異常。?
@Transactional注解的屬性:?
propagation:指定事務定義中使用的傳播?
isolation:設定事務的隔離級別?
timeout:指定事務的超市(秒)?
readOnly:指定事務的超時?
noRollbackFor:目標方法可拋出的異常所構成的數組,但通知仍會提交事務?
rollbackFor:異常所構成的數組,如果目標方法拋出了這些異常,通知就會回滾事務?
基于注解的事務管理小結:?
如果定義在類上,那么所有的方法都使用相同的方式,有些read就會抱怨給太多的東西了。?
如果在每個方法上都定義注解,那么就會很麻煩。?
(可以使用XML AOP事務管理能更好的處理這種情況)?
2、使用XML AOP事務管理?
<tx:advice/>標簽,該標簽會創建一個事務處理通知。 view plaincopy to clipboardprint? <tx:advice id="txAdvice"?transaction-manager="transactionManager">?? ????<tx:attributes>?? ????????<tx:method name="bulk*"?propagation="REQUIRED"?isolation="DEFAULT"?/>?? ????????<tx:method name="load*"?propagation="REQUIRED"?isolation="DEFAULT"?read-only="true"/>?? ????</tx:attributes>?? </tx:advice>?? <aop:config>?? ????????<aop:advisor pointcut="execution(* *..*Service*.*(..))"?advice-ref="txAdvice"?/>?? </aop:config>?? ?? 或?? ?? <aop:config>?? ????<aop:pointcut id="allServiceMethods"?? ??????????????????expression="execution(* com.apress.prospring2.ch16.services.*.*(..))"/>?? ????<aop:advisor advice-ref="defaultTransactionAdvice"?? ???????????????? pointcut-ref="allServiceMethods"/>?? </aop:config>?? ?? <tx:advice id="defaultTransactionAdvice"?transaction-manager="transactionManager">?? ????<tx:attributes>?? ????????<tx:method?? ????????????????name="*"?? ????????????????isolation="DEFAULT"?? ????????????????propagation="REQUIRED"?? ????????????????no-rollback-for="java.lang.RuntimeException"?? ????????????????timeout="100"/>?? ????????<tx:method?? ????????????????name="get*"?? ????????????????read-only="true"/>?? ????</tx:attributes>?? </tx:advice> ?
3、tx:advice標簽簡介
?
id是該advice bean的標識,而transaction-manager則必須引用一個PlatformTransactionManager bean。?
還可以通過<tx:attributes>標簽定制<tx:advice>標簽所創建的通知的行為。?
<tx:method/>標簽的屬性: ?
name:方法名的匹配模式,通知根據該模式尋找匹配的方法。?
propagation:設定事務定義所用的傳播級別。?
isolation:設置事務的隔離級別。?
timeout:指定事務的超時(秒)。?
read-only:該屬性為true指示事務是只讀的?
no-rollback-for:以逗號分隔的異常類的列表,目標方法可以跑出這些異常而不會導致通知執行回滾?
rollback-for:以逗號分隔的異常類的列表,當目標方法跑出這些異常時會導致通知執行回滾。默認情況下,該列表為空,因此不在no-rollback-for列表中的任何運行時異常都會導致回滾。?
<tx:method>中isolation(隔離)和propagation(傳播)參數的含義:?
getIsolationLevel:他對其他事務所看到的數據變化進行控制。?
事務隔離級別:?
隔離級別 說明?
ISOLATION_DEFAULT 默認級別(對大多數數據庫來說就是ISOLATION_READ_COMMITTED)?
ISOLATION_READ_UNCOMMITTED 最低的隔離級別。事實上我們不應該隔離級別,因為在事務完成前,其他事務可以看到該事務所修改的數據。而在其他事務提交前,該事務也可以看到其他事務所做的修改。?
ISOLATION_READ_COMMITTED 大多數數據庫的默認級別。在事務完成前,其他事務無法看到該事務所修改的數據。遺憾的是,在該事務提交后,你就可以查看其他事務插入活更新的數據。這意味著在事務的不同點上,如果其他事務修改數據,你會看到不同的數據。?
ISOLATION_REPEATABLE_READ 該隔離級別確保如果在事務中查詢了某個數據集,你至少還能再次查詢到相同的數據集,即使其他事務修改了所查詢的數據。然而如果其他事務插入了新數據,你就可以查詢到該新插入的數據。?
ISOLATION_SERIALIZABLE 代價最大、可靠性最高的隔離級別,所有的事務都是俺順序一個接一個的執行。?
getPropagationBehavior:指定了當代碼請求一個新的事務時Spring所做的事情。?
傳播行為指:?
傳播行為 說明?
PROPAGATION_REQUIRED 當前如果有事務,Spring就會使用該事務;否則會開始一個新事務。?
PROPAGATION_SUPPORTS 當前如果有事務,Spring就會使用該事務;否則不會開啟一個新事務。?
PROPAGATION_MANDATORY 當前如果有事務,Spring就會使用該事務;否則會拋出異常。?
PROPAGATION_REQUIRES_NEW Spring總會開始一個新事務。如果當前有事務,則該事務掛起。?
PROPAGATION_NOT_SUPPORTED Spring不會執行事務中的代碼。代碼總是在非事務環境下執行,如果當期有事務,則該事務掛起。?
PROPAGATION_NEVER 即使當前有事務,Spring也會在飛事務環境下執行。如果當前有事務,則拋出異常。?
PROPAGATION_NESTED 如果當前有事務,則在嵌套事務中執行。如果沒有,那么執行情況與PROPAGATION_REQUIRED一樣。?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
1、使用基于注解的AOP事務管理?
<tx:annotation-driven transaction-manager="transactionManager"/>?
<aop:aspectj-autoproxy />?
探索tx:annotation-driven標簽:?
<tx:annotation-driven/>標簽是注解驅動的事務管理支持的核心。?
<tx:annotation-driven/>標簽的屬性:?
transaction-manager:指定到現有的PlatformTransactionManager bean的引用,通知會使用該引用。default="transactionManager"?
mode:指定Spring事務管理框架創建通知bean的方式。可用的值有proxy和aspectj。前者是默認值,表示通知對象是個JDK代理;后者表示Spring AOP會使用AspectJ創建代理。?
order:指定創建的切面的順序。只要目標對象有多個通知就可以使用該屬性。?
proxy-target-class:該屬性如果為true就表示你想要代理目標類而不是bean所實現的所有接口。default="false"?
探索@Transactional注解:?
你可以指定傳播、隔離級別、超時以及允許和不允許的異常。?
@Transactional注解的屬性:?
propagation:指定事務定義中使用的傳播?
isolation:設定事務的隔離級別?
timeout:指定事務的超市(秒)?
readOnly:指定事務的超時?
noRollbackFor:目標方法可拋出的異常所構成的數組,但通知仍會提交事務?
rollbackFor:異常所構成的數組,如果目標方法拋出了這些異常,通知就會回滾事務?
基于注解的事務管理小結:?
如果定義在類上,那么所有的方法都使用相同的方式,有些read就會抱怨給太多的東西了。?
如果在每個方法上都定義注解,那么就會很麻煩。?
(可以使用XML AOP事務管理能更好的處理這種情況)?
2、使用XML AOP事務管理?
<tx:advice/>標簽,該標簽會創建一個事務處理通知。 view plaincopy to clipboardprint?
id是該advice bean的標識,而transaction-manager則必須引用一個PlatformTransactionManager bean。?
還可以通過<tx:attributes>標簽定制<tx:advice>標簽所創建的通知的行為。?
<tx:method/>標簽的屬性: ?
name:方法名的匹配模式,通知根據該模式尋找匹配的方法。?
propagation:設定事務定義所用的傳播級別。?
isolation:設置事務的隔離級別。?
timeout:指定事務的超時(秒)。?
read-only:該屬性為true指示事務是只讀的?
no-rollback-for:以逗號分隔的異常類的列表,目標方法可以跑出這些異常而不會導致通知執行回滾?
rollback-for:以逗號分隔的異常類的列表,當目標方法跑出這些異常時會導致通知執行回滾。默認情況下,該列表為空,因此不在no-rollback-for列表中的任何運行時異常都會導致回滾。?
<tx:method>中isolation(隔離)和propagation(傳播)參數的含義:?
getIsolationLevel:他對其他事務所看到的數據變化進行控制。?
事務隔離級別:?
隔離級別 說明?
ISOLATION_DEFAULT 默認級別(對大多數數據庫來說就是ISOLATION_READ_COMMITTED)?
ISOLATION_READ_UNCOMMITTED 最低的隔離級別。事實上我們不應該隔離級別,因為在事務完成前,其他事務可以看到該事務所修改的數據。而在其他事務提交前,該事務也可以看到其他事務所做的修改。?
ISOLATION_READ_COMMITTED 大多數數據庫的默認級別。在事務完成前,其他事務無法看到該事務所修改的數據。遺憾的是,在該事務提交后,你就可以查看其他事務插入活更新的數據。這意味著在事務的不同點上,如果其他事務修改數據,你會看到不同的數據。?
ISOLATION_REPEATABLE_READ 該隔離級別確保如果在事務中查詢了某個數據集,你至少還能再次查詢到相同的數據集,即使其他事務修改了所查詢的數據。然而如果其他事務插入了新數據,你就可以查詢到該新插入的數據。?
ISOLATION_SERIALIZABLE 代價最大、可靠性最高的隔離級別,所有的事務都是俺順序一個接一個的執行。?
getPropagationBehavior:指定了當代碼請求一個新的事務時Spring所做的事情。?
傳播行為指:?
傳播行為 說明?
PROPAGATION_REQUIRED 當前如果有事務,Spring就會使用該事務;否則會開始一個新事務。?
PROPAGATION_SUPPORTS 當前如果有事務,Spring就會使用該事務;否則不會開啟一個新事務。?
PROPAGATION_MANDATORY 當前如果有事務,Spring就會使用該事務;否則會拋出異常。?
PROPAGATION_REQUIRES_NEW Spring總會開始一個新事務。如果當前有事務,則該事務掛起。?
PROPAGATION_NOT_SUPPORTED Spring不會執行事務中的代碼。代碼總是在非事務環境下執行,如果當期有事務,則該事務掛起。?
PROPAGATION_NEVER 即使當前有事務,Spring也會在飛事務環境下執行。如果當前有事務,則拋出異常。?
PROPAGATION_NESTED 如果當前有事務,則在嵌套事務中執行。如果沒有,那么執行情況與PROPAGATION_REQUIRED一樣。?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的Spring AOP事务管理(使用切面把事务管理起来)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯视频如何下载视频_腾讯视频如何做明星
- 下一篇: 谷歌浏览器78如何安装拓展程序