欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

這里寫圖片描述 ??

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

這里寫圖片描述 ??

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

這里寫圖片描述 ??

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

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

1 Spring事務(wù)

1.1 事務(wù)簡介

1.1.1 什么是事務(wù)

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

1.1.2 事物的特性

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

1.1.3 不考慮事物會引發(fā)的安全問題

  • 讀問題

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

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

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

  • 寫問題

丟失更新

1.1.4 事務(wù)隔離級別

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

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

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

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

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

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

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

嵌套式事務(wù)

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

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

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

<!-- 配置平臺事務(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 開啟注解事務(wù)

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

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

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

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

相關(guān)文章

  • 基于MyBatis的簡單使用(推薦)

    基于MyBatis的簡單使用(推薦)

    下面小編就為大家?guī)硪黄贛yBatis的簡單使用(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 詳解springboot和vue前后端分離開發(fā)跨域登陸問題

    詳解springboot和vue前后端分離開發(fā)跨域登陸問題

    這篇文章主要介紹了詳解springboot和vue前后端分離開發(fā)跨域登陸問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java分頁查詢的幾種實現(xiàn)方法舉例

    Java分頁查詢的幾種實現(xiàn)方法舉例

    這篇文章主要給大家介紹了關(guān)于Java分頁查詢的幾種實現(xiàn)方法,分頁是系統(tǒng)中常用到的功能,只要涉及到查詢必定伴隨而來的就是分頁,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • SWT(JFace)體驗之Icon任我變

    SWT(JFace)體驗之Icon任我變

    SWT(JFace)體驗之Icon任我變
    2009-06-06
  • Java使用PrepareStatement實現(xiàn)數(shù)據(jù)的插入與查詢操作

    Java使用PrepareStatement實現(xiàn)數(shù)據(jù)的插入與查詢操作

    這篇文章主要為大家詳細(xì)介紹了Java如何使用PrepareStatement實現(xiàn)數(shù)據(jù)的插入與查詢操作,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-09-09
  • spring security中的csrf防御原理(跨域請求偽造)

    spring security中的csrf防御原理(跨域請求偽造)

    這篇文章主要介紹了spring security中的csrf防御機(jī)制原理解析(跨域請求偽造),本文通過實例代碼詳解的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • mybatis參數(shù)String與Integer類型的判斷方式

    mybatis參數(shù)String與Integer類型的判斷方式

    這篇文章主要介紹了mybatis參數(shù)String與Integer類型的判斷方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java?mybatis如何操作postgresql?array數(shù)組類型

    java?mybatis如何操作postgresql?array數(shù)組類型

    這篇文章主要介紹了java?mybatis如何操作postgresql?array數(shù)組類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring?cloud?實現(xiàn)房源查詢功能的實例代碼

    Spring?cloud?實現(xiàn)房源查詢功能的實例代碼

    這篇文章主要介紹了Spring?cloud?實現(xiàn)房源查詢功能,本項目是一個多模塊項目,創(chuàng)建一個 Spring Initializr 項目 不自動添加依賴項,完成創(chuàng)建后刪除自帶的src目錄,并在根目錄下創(chuàng)建新的maven模塊,需要的朋友可以參考下
    2022-09-09
  • SpringBoot整合MyBatis的代碼詳解

    SpringBoot整合MyBatis的代碼詳解

    這篇文章主要介紹了SpringBoot整合MyBatis筆記記錄,大家需要注意在整合mybatis之前我們需要相對應(yīng)的導(dǎo)入相關(guān)依賴,首先需要在java的目錄和resources下創(chuàng)建mapper文件夾,對SpringBoot整合MyBatis的詳細(xì)過程感興趣的朋友一起看看吧
    2022-05-05

最新評論