内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Spring中事務(wù)傳播行為的示例分析

這篇文章主要為大家展示了“Spring中事務(wù)傳播行為的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Spring中事務(wù)傳播行為的示例分析”這篇文章吧。

創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,先為平原等服務(wù)建站,平原等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為平原企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

事務(wù)傳播行為介紹

Spring中的7個事務(wù)傳播行為:

|事務(wù)行為|說明 |
|:--|:--|
|PROPAGATION_REQUIRED | 支持當(dāng)前事務(wù),假設(shè)當(dāng)前沒有事務(wù)。就新建一個事務(wù) |
| PROPAGATION_SUPPORTS |支持當(dāng)前事務(wù),假設(shè)當(dāng)前沒有事務(wù),就以非事務(wù)方式運行 |
| PROPAGATION_MANDATORY| 支持當(dāng)前事務(wù),假設(shè)當(dāng)前沒有事務(wù),就拋出異常|
| PROPAGATION_REQUIRES_NEW | 新建事務(wù),假設(shè)當(dāng)前存在事務(wù)。把當(dāng)前事務(wù)掛起|
|PROPAGATION_NOT_SUPPORTED | 以非事務(wù)方式運行操作。假設(shè)當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起 |
| PROPAGATION_NEVER | 以非事務(wù)方式運行,假設(shè)當(dāng)前存在事務(wù),則拋出異常 |
| PROPAGATION_NESTED |如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則執(zhí)行與PROPAGATION_REQUIRED類似的操作。 |

舉例說明

案例代碼

ServiceA

ServiceA { 
  void methodA() {
   ServiceB.methodB();
  }
}

ServiceB

ServiceB { 
  void methodB() {
  }  
}

1.PROPAGATION_REQUIRED

??假如當(dāng)前正要運行的事務(wù)不在另外一個事務(wù)里,那么就起一個新的事務(wù) 比方說,ServiceB.methodB的事務(wù)級別定義PROPAGATION_REQUIRED, 那么因為執(zhí)行ServiceA.methodA的時候,ServiceA.methodA已經(jīng)起了事務(wù)。這時調(diào)用ServiceB.methodB,ServiceB.methodB看到自己已經(jīng)執(zhí)行在ServiceA.methodA的事務(wù)內(nèi)部。就不再起新的事務(wù)。而假如ServiceA.methodA執(zhí)行的時候發(fā)現(xiàn)自己沒有在事務(wù)中,他就會為自己分配一個事務(wù)。這樣,在ServiceA.methodA或者在ServiceB.methodB內(nèi)的不論什么地方出現(xiàn)異常。事務(wù)都會被回滾。即使ServiceB.methodB的事務(wù)已經(jīng)被提交,可是ServiceA.methodA在接下來fail要回滾,ServiceB.methodB也要回滾

Spring中事務(wù)傳播行為的示例分析

2.PROPAGATION_SUPPORTS

??假設(shè)當(dāng)前在事務(wù)中。即以事務(wù)的形式執(zhí)行。假設(shè)當(dāng)前不在一個事務(wù)中,那么就以非事務(wù)的形式執(zhí)行

3PROPAGATION_MANDATORY

??必須在一個事務(wù)中執(zhí)行。也就是說,他僅僅能被一個父事務(wù)調(diào)用。否則,他就要拋出異常

4.PROPAGATION_REQUIRES_NEW

??這個就比較繞口了。 比方我們設(shè)計ServiceA.methodA的事務(wù)級別為PROPAGATION_REQUIRED,ServiceB.methodB的事務(wù)級別為PROPAGATION_REQUIRES_NEW。那么當(dāng)運行到ServiceB.methodB的時候,ServiceA.methodA所在的事務(wù)就會掛起。ServiceB.methodB會起一個新的事務(wù)。等待ServiceB.methodB的事務(wù)完畢以后,他才繼續(xù)運行。
他與PROPAGATION_REQUIRED 的事務(wù)差別在于事務(wù)的回滾程度了。由于ServiceB.methodB是新起一個事務(wù),那么就是存在兩個不同的事務(wù)。假設(shè)ServiceB.methodB已經(jīng)提交,那么ServiceA.methodA失敗回滾。ServiceB.methodB是不會回滾的。假設(shè)ServiceB.methodB失敗回滾,假設(shè)他拋出的異常被ServiceA.methodA捕獲,ServiceA.methodA事務(wù)仍然可能提交。

Spring中事務(wù)傳播行為的示例分析

5.PROPAGATION_NOT_SUPPORTED

??當(dāng)前不支持事務(wù)。比方ServiceA.methodA的事務(wù)級別是PROPAGATION_REQUIRED 。而ServiceB.methodB的事務(wù)級別是PROPAGATION_NOT_SUPPORTED ,那么當(dāng)執(zhí)行到ServiceB.methodB時。ServiceA.methodA的事務(wù)掛起。而他以非事務(wù)的狀態(tài)執(zhí)行完,再繼續(xù)ServiceA.methodA的事務(wù)。

6.PROPAGATION_NEVER

??不能在事務(wù)中執(zhí)行。

如果ServiceA.methodA的事務(wù)級別是PROPAGATION_REQUIRED。 而ServiceB.methodB的事務(wù)級別是PROPAGATION_NEVER ,那么ServiceB.methodB就要拋出異常了。

7.PROPAGATION_NESTED

??如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則執(zhí)行與PROPAGATION_REQUIRED類似的操作。

Spring中事務(wù)的配置

配置文件的方式

<tx:advice id="txAdvice" transaction-manager="txManager"> 
  <tx:attributes> 
  <!--設(shè)置所有匹配的方法,然后設(shè)置傳播級別和事務(wù)隔離-->
   <tx:method name="save*" propagation="REQUIRED" /> 
   <tx:method name="add*" propagation="REQUIRED" /> 
   <tx:method name="create*" propagation="REQUIRED" /> 
   <tx:method name="insert*" propagation="REQUIRED" /> 
   <tx:method name="update*" propagation="REQUIRED" /> 
   <tx:method name="merge*" propagation="REQUIRED" /> 
   <tx:method name="del*" propagation="REQUIRED" /> 
   <tx:method name="remove*" propagation="REQUIRED" /> 
   <tx:method name="put*" propagation="REQUIRED" /> 
   <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> 
   <tx:method name="count*" propagation="SUPPORTS" read-only="true" /> 
   <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> 
   <tx:method name="list*" propagation="SUPPORTS" read-only="true" /> 
   <tx:method name="*" propagation="SUPPORTS" read-only="true" /> 
  </tx:attributes> 
</tx:advice>

注解的方式

<!--開啟注解的方式--> 
<tx:annotation-driven transaction-manager="transactioManager" />

@Transactional(propagation=Propagation.REQUIRED)

如果有事務(wù), 那么加入事務(wù), 沒有的話新建一個(默認(rèn)情況下)

@Transactional(propagation=Propagation.NOT_SUPPORTED)

容器不為這個方法開啟事務(wù)

@Transactional(propagation=Propagation.REQUIRES_NEW)

不管是否存在事務(wù),都創(chuàng)建一個新的事務(wù),原來的掛起,新的執(zhí)行完畢,繼續(xù)執(zhí)行老的事務(wù)

@Transactional(propagation=Propagation.MANDATORY)

必須在一個已有的事務(wù)中執(zhí)行,否則拋出異常

@Transactional(propagation=Propagation.NEVER)

必須在一個沒有的事務(wù)中執(zhí)行,否則拋出異常(與Propagation.MANDATORY相反)

@Transactional(propagation=Propagation.SUPPORTS)

如果其他bean調(diào)用這個方法,在其他bean中聲明事務(wù),那就用事務(wù).如果其他bean沒有聲明事務(wù),那就不用事務(wù).

以上是“Spring中事務(wù)傳播行為的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文題目:Spring中事務(wù)傳播行為的示例分析
分享地址:http://m.rwnh.cn/article2/gdisic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、微信公眾號、網(wǎng)站營銷、域名注冊、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
虎林市| 贵溪市| 临城县| 汝阳县| 枣阳市| 崇信县| 贺兰县| 酉阳| 张掖市| 西华县| 永寿县| 平顺县| 赣榆县| 天峨县| 永登县| 于田县| 宜兰县| 井冈山市| 贵州省| 珠海市| 柳江县| 潜江市| 沾化县| 沾化县| 青川县| 永顺县| 彰化市| 防城港市| 根河市| 赣州市| 邯郸市| 海宁市| 富阳市| 微山县| 哈巴河县| 汪清县| 札达县| 库伦旗| 宜兰县| 青阳县| 建宁县|