最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于spring事務(wù)傳播行為非事務(wù)方式的理解

 更新時(shí)間:2021年11月25日 09:39:22   作者:八也子  
這篇文章主要介紹了對(duì)spring事務(wù)傳播行為非事務(wù)方式的全面理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring事務(wù)傳播行為非事務(wù)方式

具體的隔離級(jí)別可以看看搜一下,相關(guān)的博客挺多的,現(xiàn)在說(shuō)一下對(duì)傳播行為 PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER中很多解釋為 非事務(wù)方式運(yùn)行 的理解。 ??

關(guān)于什么是‘非事務(wù)方式運(yùn)行‘問(wèn)了些人,也看了spring相關(guān)解釋,都沒(méi)能解釋的讓人很明白。從字面上解釋就是不在事務(wù)中運(yùn)行,這種理解是不對(duì)的。在innodb這種支持事務(wù)的存儲(chǔ)引擎中,所有的操作都是在事務(wù)中完成的。

下面截圖是默認(rèn)隔離級(jí)別(PROPAGATION_REQUIRED)下數(shù)據(jù)庫(kù)操作的截圖,在進(jìn)行插入之前都會(huì)設(shè)置為非自動(dòng)提交。

這里寫圖片描述 ??

下圖是never隔離級(jí)別下的數(shù)據(jù)庫(kù)操作截圖,可以看到在操作數(shù)據(jù)庫(kù)之前設(shè)置為自動(dòng)提交了。

這里寫圖片描述 ??

demo代碼如下,ps:傳播行為、隔離級(jí)別生效 要在不同的類中調(diào)用(動(dòng)態(tài)代理支持)

這里寫圖片描述 ??

小結(jié)一下:非事務(wù)的方式運(yùn)行,其實(shí)就是設(shè)置為自動(dòng)提交了,如果一個(gè)方法中有多個(gè)操作,則每個(gè)操作都會(huì)在不同事務(wù)中完成,不會(huì)保證他們的原子性。個(gè)人理解,有啥不對(duì) 歡迎指正。

Spring事務(wù)理解和配置

1 Spring事務(wù)

1.1 事務(wù)簡(jiǎn)介

1.1.1 什么是事務(wù)

  • 事務(wù):邏輯上的一組操作,組成這組操作的各個(gè)單元,要么全部成功,要么全部失敗.

1.1.2 事物的特性

  • 原子性:事務(wù)不可分割
  • 一致性:事務(wù)執(zhí)行前后數(shù)據(jù)完整性保持一致
  • 隔離性:一個(gè)事務(wù)的執(zhí)行不應(yīng)該受到其他事物的影響
  • 持久性:一旦事務(wù)結(jié)束,數(shù)據(jù)就持久化到數(shù)據(jù)庫(kù)

1.1.3 不考慮事物會(huì)引發(fā)的安全問(wèn)題

  • 讀問(wèn)題

臟讀:一個(gè)事務(wù)讀到另一個(gè)事務(wù)未提交的數(shù)據(jù)

不可重復(fù)度:一個(gè)事務(wù)讀到另一個(gè)事務(wù)已經(jīng)提交的update的數(shù)據(jù),導(dǎo)致一個(gè)事務(wù)中多次查詢結(jié)果不一致.

幻讀:一個(gè)事務(wù)讀到另一個(gè)事務(wù)已經(jīng)提交的insert的數(shù)據(jù),導(dǎo)致一個(gè)事務(wù)中多次查詢結(jié)果不一致

  • 寫問(wèn)題

丟失更新

1.1.4 事務(wù)隔離級(jí)別

  • Read uncommitted:讀未提交,任何問(wèn)題解決不了
  • Read committed:讀已提交,解決臟讀,但是不可重復(fù)度和幻讀有可能發(fā)生(Oracle默認(rèn))
  • Repeatable read:重復(fù)度,解決臟讀和不可重復(fù)讀,但是幻讀可能發(fā)生(msyql默認(rèn))
  • Serializable:序列化,解決所有讀問(wèn)題

1.2 事務(wù)的傳播行為

Spring中提供了七種事務(wù)的傳播行為:

保證多個(gè)操作在同一個(gè)事務(wù)中

  • PROPAGATION_REQUIRED:默認(rèn)值,如果A中有事務(wù),使用A中的事務(wù),如果A沒(méi)有,創(chuàng)建一個(gè)新的事務(wù),將操作包含進(jìn)來(lái)
  • PROPAGATION_SUPPORTS :支持事務(wù),如果A中有事務(wù),使用A中的事務(wù)。如果A沒(méi)有事務(wù),不使用事務(wù)。
  • PROPAGATION_MANDATORY :如果A中有事務(wù),使用A中的事務(wù)。如果A沒(méi)有事務(wù),拋出異常。

保證多個(gè)操作不在同一個(gè)事務(wù)中

  • PROPAGATION_REQUIRES_NEW :如果A中有事務(wù),將A的事務(wù)掛起(暫停),創(chuàng)建新事務(wù),只包含自身操作。如果A中沒(méi)有事務(wù),創(chuàng)建一個(gè)新事務(wù),包含自身操作。
  • PROPAGATION_NOT_SUPPORTED :如果A中有事務(wù),將A的事務(wù)掛起。不使用事務(wù)管理。
  • PROPAGATION_NEVER :如果A中有事務(wù),報(bào)異常。

嵌套式事務(wù)

  • PROPAGATION_NESTED :嵌套事務(wù),如果A中有事務(wù),按照A的事務(wù)執(zhí)行,執(zhí)行完成后,設(shè)置一個(gè)保存點(diǎn),執(zhí)行B中的操作,如果沒(méi)有異常,執(zhí)行通過(guò),如果有異常,可以選擇回滾到最初始位置,也可以回滾到保存點(diǎn)。

1.3 編程式事務(wù)(需要手動(dòng)寫代碼,了解)

1.3.1 配置平臺(tái)事務(wù)管理器

<!-- 配置平臺(tái)事務(wù)管理器============================= -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
 </bean>

1.3.2 Spring提供了事務(wù)管理的模板類

<!-- 配置事務(wù)管理的模板 -->
 <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
  <property name="transactionManager" ref="transactionManager"/>
 </bean>

1.3.3 在業(yè)務(wù)層注入事務(wù)管理的模板

<!-- 配置Service============= -->
 <bean id="accountService" class="com.itheima.tx.demo1.AccountServiceImpl">
  <property name="accountDao" ref="accountDao"/>
  <!-- 注入 事務(wù)管理的模板 -->
  <property name="trsactionTemplate" ref="transactionTemplate"/>
 </bean>

1.3.4 編寫事務(wù)管理的代碼

public void transfer(final String from, final String to, final Double money) {
  
  trsactionTemplate.execute(new TransactionCallbackWithoutResult() {
   @Override
   protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
    accountDao.outMoney(from, money);
    int d = 1/0;
    accountDao.inMoney(to, money);
   }
  });

1.4 聲明式事務(wù)(xml配置)

1.4.1 配置事務(wù)管理器

<!-- 配置事務(wù)管理器=============================== -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
 </bean>

1.4.2 配置增強(qiáng)

<!-- 配置事務(wù)的增強(qiáng)=============================== -->
 <tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
   <!-- 事務(wù)管理的規(guī)則 -->
   <!-- <tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"/>
   <tx:method name="update*" propagation="REQUIRED"/>
   <tx:method name="delete*" propagation="REQUIRED"/>
   <tx:method name="find*" read-only="true"/> -->
   <tx:method name="*" propagation="REQUIRED" read-only="false"/>
  </tx:attributes>
 </tx:advice>

1.4.3 AOP的配置

<!-- aop的配置 -->
 <aop:config>
  <aop:pointcut expression="execution(* com.itheima.tx.demo2.AccountServiceImpl.*(..))" id="pointcut1"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
 </aop:config>

1.5 聲明式事務(wù)(注解)

1.5.1 配置事務(wù)管理器

<!-- 配置事務(wù)管理器=============================== -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
 </bean>

1.5.2 開(kāi)啟注解事務(wù)

<!-- 開(kāi)啟注解事務(wù)================================ -->
 <tx:annotation-driven transaction-manager="transactionManager"/>

1.5.3 在業(yè)務(wù)層添加注解

@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED)
public class AccountServiceImpl implements AccountService {

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MybatisPlusInterceptor實(shí)現(xiàn)sql攔截器超詳細(xì)教程

    MybatisPlusInterceptor實(shí)現(xiàn)sql攔截器超詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于MybatisPlusInterceptor實(shí)現(xiàn)sql攔截器超詳細(xì)教程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java多線程程序中synchronized修飾方法的使用實(shí)例

    Java多線程程序中synchronized修飾方法的使用實(shí)例

    synchronized關(guān)鍵字主要北用來(lái)進(jìn)行線程同步,這里我們主要來(lái)演示Java多線程程序中synchronized修飾方法的使用實(shí)例,需要的朋友可以參考下:
    2016-06-06
  • Java中實(shí)現(xiàn)漢字生成拼音首拼和五筆碼

    Java中實(shí)現(xiàn)漢字生成拼音首拼和五筆碼

    這篇文章主要介紹了Java中實(shí)現(xiàn)漢字生成拼音首拼和五筆碼方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • idea已經(jīng)提交到遠(yuǎn)程分支,但需要本地和遠(yuǎn)程都回退到某一版本問(wèn)題

    idea已經(jīng)提交到遠(yuǎn)程分支,但需要本地和遠(yuǎn)程都回退到某一版本問(wèn)題

    這篇文章主要介紹了idea已經(jīng)提交到遠(yuǎn)程分支,但需要本地和遠(yuǎn)程都回退到某一版本問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Sharding-jdbc報(bào)錯(cuò):Missing the data source name:‘m0‘解決方案

    Sharding-jdbc報(bào)錯(cuò):Missing the data source 

    在使用MyBatis-plus進(jìn)行數(shù)據(jù)操作時(shí),新增Order實(shí)體屬性后,出現(xiàn)了數(shù)據(jù)源缺失的提示錯(cuò)誤,原因是因?yàn)閡serId屬性值使用了隨機(jī)函數(shù)生成的Long值,這與sharding-jdbc的路由規(guī)則計(jì)算不匹配,導(dǎo)致無(wú)法找到正確的數(shù)據(jù)源,通過(guò)調(diào)整userId生成邏輯
    2024-11-11
  • Java設(shè)計(jì)模式之23種設(shè)計(jì)模式詳解

    Java設(shè)計(jì)模式之23種設(shè)計(jì)模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之23種設(shè)計(jì)模式詳解,設(shè)計(jì)模式使代碼編制真正工程化,設(shè)計(jì)模式是軟件工程的基石,項(xiàng)目中合理的運(yùn)用設(shè)計(jì)模式可以完美的解決很多問(wèn)題,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 解決json字符串序列化后的順序問(wèn)題

    解決json字符串序列化后的順序問(wèn)題

    這篇文章主要介紹了解決json字符串序列化后的順序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù)

    SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù)

    ShedLock 是一個(gè) Java 庫(kù),通常用于分布式系統(tǒng)中,確保定時(shí)任務(wù)(Scheduled Tasks)在集群環(huán)境下只被某一個(gè)實(shí)例執(zhí)行一次,它通過(guò)在共享資源中添加鎖的方式,本文給大家介紹了SpringBoot集成ShedLock實(shí)現(xiàn)分布式定時(shí)任務(wù),需要的朋友可以參考下
    2024-11-11
  • Java數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹詳解

    Java數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹詳解

    二叉搜索樹作為一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),具有鏈表的快速插入與刪除的特點(diǎn),同時(shí)查詢效率也很優(yōu)秀,所以應(yīng)用十分廣泛。本文將詳細(xì)講講二叉搜索樹的原理與實(shí)現(xiàn),需要的可以參考一下
    2022-06-06
  • Request對(duì)象如何獲取請(qǐng)求頭數(shù)據(jù)

    Request對(duì)象如何獲取請(qǐng)求頭數(shù)據(jù)

    這篇文章主要介紹了Request對(duì)象如何獲取請(qǐng)求頭數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論

广元市| 绥宁县| 义乌市| 定边县| 巴中市| 黄龙县| 福建省| 衡水市| 宜川县| 东源县| 封开县| 师宗县| 巧家县| 厦门市| 孝义市| 玉溪市| 岱山县| 大洼县| 南部县| 惠来县| 阳原县| 北辰区| 临猗县| 栾城县| 故城县| 鄂州市| 施秉县| 黔东| 奉贤区| 清流县| 平利县| 准格尔旗| 嘉禾县| 高要市| 梅河口市| 乌鲁木齐市| 柳河县| 宜都市| 林州市| 清远市| 合阳县|