日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring AOP事务管理(使用切面把事务管理起来)

發(fā)布時間:2025/3/12 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring AOP事务管理(使用切面把事务管理起来) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在《Spring Transaction 分析事務屬性(事務的基本概念、配置)》基礎上?



1、使用基于注解的AOP事務管理?
<tx:annotation-driven transaction-manager="transactionManager"/>
?
<aop:aspectj-autoproxy />?


探索tx:annotation-driven標簽:?
<tx:annotation-driven/>標簽是注解驅動的事務管理支持的核心。?

<tx:annotation-driven/>標簽的屬性:?
transaction-manager:指定到現(xiàn)有的PlatformTransactionManager bean的引用,通知會使用該引用。default="transactionManager"?
mode:指定Spring事務管理框架創(chuàng)建通知bean的方式。可用的值有proxy和aspectj。前者是默認值,表示通知對象是個JDK代理;后者表示Spring AOP會使用AspectJ創(chuàng)建代理。?
order:指定創(chuàng)建的切面的順序。只要目標對象有多個通知就可以使用該屬性。?
proxy-target-class:該屬性如果為true就表示你想要代理目標類而不是bean所實現(xiàn)的所有接口。default="false"?

探索@Transactional注解:?
你可以指定傳播、隔離級別、超時以及允許和不允許的異常。?
@Transactional注解的屬性:?
propagation:指定事務定義中使用的傳播?
isolation:設定事務的隔離級別?
timeout:指定事務的超市(秒)?
readOnly:指定事務的超時?
noRollbackFor:目標方法可拋出的異常所構成的數(shù)組,但通知仍會提交事務?
rollbackFor:異常所構成的數(shù)組,如果目標方法拋出了這些異常,通知就會回滾事務?



基于注解的事務管理小結:?
如果定義在類上,那么所有的方法都使用相同的方式,有些read就會抱怨給太多的東西了。?
如果在每個方法上都定義注解,那么就會很麻煩。?
(可以使用XML AOP事務管理能更好的處理這種情況)?



2、使用XML AOP事務管理?
<tx:advice/>標簽,該標簽會創(chuàng)建一個事務處理通知。
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>標簽所創(chuàng)建的通知的行為。?

    <tx:method/>標簽的屬性:
    ?
    name:方法名的匹配模式,通知根據(jù)該模式尋找匹配的方法。?
    propagation:設定事務定義所用的傳播級別。?
    isolation:設置事務的隔離級別。?
    timeout:指定事務的超時(秒)。?
    read-only:該屬性為true指示事務是只讀的?
    no-rollback-for:以逗號分隔的異常類的列表,目標方法可以跑出這些異常而不會導致通知執(zhí)行回滾?
    rollback-for:以逗號分隔的異常類的列表,當目標方法跑出這些異常時會導致通知執(zhí)行回滾。默認情況下,該列表為空,因此不在no-rollback-for列表中的任何運行時異常都會導致回滾。?


    <tx:method>中isolation(隔離)和propagation(傳播)參數(shù)的含義:?
    getIsolationLevel:他對其他事務所看到的數(shù)據(jù)變化進行控制。?
    事務隔離級別:?
    隔離級別 說明?
    ISOLATION_DEFAULT 默認級別(對大多數(shù)數(shù)據(jù)庫來說就是ISOLATION_READ_COMMITTED)?
    ISOLATION_READ_UNCOMMITTED 最低的隔離級別。事實上我們不應該隔離級別,因為在事務完成前,其他事務可以看到該事務所修改的數(shù)據(jù)。而在其他事務提交前,該事務也可以看到其他事務所做的修改。?
    ISOLATION_READ_COMMITTED 大多數(shù)數(shù)據(jù)庫的默認級別。在事務完成前,其他事務無法看到該事務所修改的數(shù)據(jù)。遺憾的是,在該事務提交后,你就可以查看其他事務插入活更新的數(shù)據(jù)。這意味著在事務的不同點上,如果其他事務修改數(shù)據(jù),你會看到不同的數(shù)據(jù)。?
    ISOLATION_REPEATABLE_READ 該隔離級別確保如果在事務中查詢了某個數(shù)據(jù)集,你至少還能再次查詢到相同的數(shù)據(jù)集,即使其他事務修改了所查詢的數(shù)據(jù)。然而如果其他事務插入了新數(shù)據(jù),你就可以查詢到該新插入的數(shù)據(jù)。?
    ISOLATION_SERIALIZABLE 代價最大、可靠性最高的隔離級別,所有的事務都是俺順序一個接一個的執(zhí)行。?

    getPropagationBehavior:指定了當代碼請求一個新的事務時Spring所做的事情。?
    傳播行為指:?
    傳播行為 說明?
    PROPAGATION_REQUIRED 當前如果有事務,Spring就會使用該事務;否則會開始一個新事務。?
    PROPAGATION_SUPPORTS 當前如果有事務,Spring就會使用該事務;否則不會開啟一個新事務。?
    PROPAGATION_MANDATORY 當前如果有事務,Spring就會使用該事務;否則會拋出異常。?
    PROPAGATION_REQUIRES_NEW Spring總會開始一個新事務。如果當前有事務,則該事務掛起。?
    PROPAGATION_NOT_SUPPORTED Spring不會執(zhí)行事務中的代碼。代碼總是在非事務環(huán)境下執(zhí)行,如果當期有事務,則該事務掛起。?
    PROPAGATION_NEVER 即使當前有事務,Spring也會在飛事務環(huán)境下執(zhí)行。如果當前有事務,則拋出異常。?
    PROPAGATION_NESTED 如果當前有事務,則在嵌套事務中執(zhí)行。如果沒有,那么執(zhí)行情況與PROPAGATION_REQUIRED一樣。?
    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結

    以上是生活随笔為你收集整理的Spring AOP事务管理(使用切面把事务管理起来)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。