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

深入理解spring事務(wù)

 更新時(shí)間:2021年03月01日 17:07:43   作者:徘徊在深夜中的貓  
這篇文章主要介紹了spring事務(wù)深入理解,介紹了事物特性,事物隔離級(jí)別,事物的具體使用實(shí)例,有感興趣的同學(xué)可以研究下

事務(wù)介紹

一個(gè)事務(wù)要么同時(shí)成功,要么同時(shí)失敗

特性

  • Atomic原子性 事務(wù)是由一個(gè)或多個(gè)活動(dòng)組成的一個(gè)工作單元。原子性確保事務(wù)中的所有操作全部發(fā)生或全部不發(fā)生
  • Consistent一致性 一旦事務(wù)完成,系統(tǒng)必須確保它所建模的業(yè)務(wù)處于一致的狀態(tài)
  • Isolated隔離性 事務(wù)允許多個(gè)用戶對(duì)數(shù)據(jù)進(jìn)行操作,每個(gè)用戶的操作不會(huì)與其他用戶糾纏在一起
  • Durable持久性 一旦事務(wù)完成,事務(wù)的結(jié)果應(yīng)該持久化

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

  • DEFAULT 使用底層數(shù)據(jù)庫(kù)預(yù)設(shè)的隔離層級(jí)
  • READ_UNCOMMITTED (讀未提交的數(shù)據(jù)) 允許事務(wù)讀取其他并行的事務(wù)還沒(méi)提交的數(shù)據(jù),臟讀、不可重復(fù)讀、幻讀問(wèn)題都存在
  • READ_COMMITTED(讀已提交的數(shù)據(jù)) 只允許事務(wù)讀取其他并行事務(wù)提交的數(shù)據(jù),可以避免臟讀,但是不可重復(fù)讀和幻讀仍存在
  • REPEATABLE_READ(可重復(fù)讀) 確保事務(wù)可以多次從一個(gè)字段中讀取相同的值,在這個(gè)事務(wù)持續(xù)期間,禁止其他事務(wù)對(duì)這個(gè)字段進(jìn)行更新,可以避免臟讀和不可重復(fù)讀,但幻讀仍存在(Mysql默認(rèn)的事務(wù)隔離級(jí)別)
  • SERIALIZABLE(串行化) 確保事務(wù)可以從一個(gè)表中讀取相同的行,在這個(gè)事務(wù)持續(xù)期間,禁止其他事務(wù)對(duì)該表執(zhí)行插入、更新和刪除操作,所有并發(fā)問(wèn)題都可以避免,但是性能低下

傳播行為

  • PROPAGATION_REQUIRED 支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就新建一個(gè)事務(wù)
  • PROPAGATION_SUPPORTS 支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就以非事務(wù)方式執(zhí)行
  • PROPAGATION_MANDATORY 支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就拋出異常
  • PROPAGATION_REQUIRED_NEW 新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起
  • PROPAGATION_NOT_SUPPORTED 以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起
  • PROPAGATION_NEVER 以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),則拋出異常
  • PROPAGATION_NESTED 如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行,如果當(dāng)前沒(méi)有事務(wù),則新建事務(wù)

只讀

事務(wù)只進(jìn)行讀取操作

readOnly=true 告訴spring當(dāng)前事務(wù)只會(huì)進(jìn)行讀取操作,不會(huì)進(jìn)行修改操作,可以幫助數(shù)據(jù)庫(kù)引擎優(yōu)化

注:如果設(shè)置為只讀的話,千萬(wàn)不要在事務(wù)里修改數(shù)據(jù),使用只讀操作時(shí),spring不會(huì)進(jìn)行加鎖處理,如果修改數(shù)據(jù)的話,會(huì)出現(xiàn)問(wèn)題

事務(wù)超時(shí)

事務(wù)時(shí)間過(guò)長(zhǎng),則回滾

回滾規(guī)則

rollback-for 指事務(wù)對(duì)于那些檢查型異常應(yīng)當(dāng)回滾而不提交(默認(rèn)spring會(huì)對(duì)所有的運(yùn)行時(shí)異常回滾)

no-rollback-for 指事務(wù)對(duì)于那些異常繼續(xù)執(zhí)行不回滾

事務(wù)的使用

create table user(
 id int primary key AUTO_INCREMENT,
 name varchar(20) not null,
 account double 
 )ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 insert into user (name,account) values('張三',1000);
 insert into user (name,account) values('李四',1000);
<!-- 事務(wù) -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-tx</artifactId>
 <version>4.3.29.RELEASE</version>
</dependency>

<!-- 事務(wù)管理器以及數(shù)據(jù)源 -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>4.3.29.RELEASE</version>
</dependency>

<!-- mysql驅(qū)動(dòng) -->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.48</version>
</dependency>

使用注解

在這里采用的是spring中的數(shù)據(jù)源

<!-- 數(shù)據(jù)源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="com.mysql.jdbc.Driver" />
 <property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=utf-8" />
 <property name="username" value="root" />
 <property name="password" value="123456" />
</bean>

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

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

當(dāng)然由于是使用的注解,不要忘記組件掃描

<context:component-scan base-package="com.zhanghe.study.spring4.beans.tx"/>

之后就可以在要保證事務(wù)的方法上配置@Transactional以及在該注解上配置相應(yīng)的事務(wù)隔離級(jí)別(isolation)、事務(wù)傳播行為(propagation)、對(duì)哪些異常執(zhí)行回滾(rollbackFor)以及不執(zhí)行回滾(noRollbackFor) 默認(rèn)對(duì)運(yùn)行時(shí)異?;貪L

使用XML

<!-- 數(shù)據(jù)源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="com.mysql.jdbc.Driver" />
 <property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=utf-8" />
 <property name="username" value="root" />
 <property name="password" value="123456" />
</bean>

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

<!-- 使用xml配置事務(wù)屬性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
 <tx:attributes>
 <!-- 根據(jù)方法名指定特定的事務(wù)屬性 -->
 <tx:method name="get*" read-only="true"/>
 <tx:method name="find*" read-only="true"/>
 <tx:method name="save*" propagation="REQUIRED"/>
 </tx:attributes>
</tx:advice>

<!-- 使用事務(wù)切入點(diǎn),把事務(wù)切入點(diǎn)和事務(wù)屬性關(guān)聯(lián)起來(lái) -->
<aop:config>
 <aop:pointcut id="pointCut" expression="execution(* com.zhanghe.study.spring4.beans.tx.UserService.*(..))"/>
 <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
</aop:config>

到此這篇關(guān)于spring事務(wù)深入理解的文章就介紹到這了,更多相關(guān)spring事務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java Matcher匹配頭尾截取替換字符串的案例

    java Matcher匹配頭尾截取替換字符串的案例

    這篇文章主要介紹了java Matcher匹配頭尾截取替換字符串的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Java 中的抽象介紹

    Java 中的抽象介紹

    這篇文章主要介紹了Java 中的抽象,數(shù)據(jù)抽象是一種僅向用戶顯示基本細(xì)節(jié)的屬性。不向用戶顯示瑣碎或非必需的單元,下面文章Java抽象詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-12-12
  • Java項(xiàng)目打包發(fā)布到maven私倉(cāng)常見(jiàn)的幾種方式

    Java項(xiàng)目打包發(fā)布到maven私倉(cāng)常見(jiàn)的幾種方式

    這篇文章主要介紹了項(xiàng)目打包發(fā)布到maven私倉(cāng)常見(jiàn)的幾種方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • 一文了解Spring中攔截器的原理與使用

    一文了解Spring中攔截器的原理與使用

    在web開(kāi)發(fā)中,攔截器是經(jīng)常用到的功能。它可以幫我們預(yù)先設(shè)置數(shù)據(jù)以及統(tǒng)計(jì)方法的執(zhí)行效率等等。今天就來(lái)詳細(xì)的談一下spring中的攔截器,需要的可以參考一下
    2022-06-06
  • ArrayList和JSONArray邊遍歷邊刪除到底該如何做

    ArrayList和JSONArray邊遍歷邊刪除到底該如何做

    這篇文章主要介紹了ArrayList和JSONArray邊遍歷邊刪除到底該如何做,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java判斷上傳圖片格式的實(shí)例代碼

    Java判斷上傳圖片格式的實(shí)例代碼

    這篇文章主要介紹了Java判斷上傳圖片格式的實(shí)例代碼,在文中給大家提到了Java使用文件頭的類型判斷上傳的文件是否為圖片類型,需要的朋友可以參考下
    2019-06-06
  • Java基礎(chǔ)之SpringBoot整合knife4j

    Java基礎(chǔ)之SpringBoot整合knife4j

    Swagger現(xiàn)在已經(jīng)成了最流行的接口文檔生成與管理工具,但是你是否在用的時(shí)候也在吐槽,它是真的不好看,接口測(cè)試的json數(shù)據(jù)沒(méi)法格式化,測(cè)試地址如果更改了還要去改配置,接口測(cè)試時(shí)增加token驗(yàn)證是真的麻煩…針對(duì)Swagger的種種缺點(diǎn),Knife4j就呼之欲出了.需要的朋友可以參考下
    2021-05-05
  • Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤)

    Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤)

    這篇文章主要介紹了Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 一篇文章帶你入門java網(wǎng)絡(luò)編程

    一篇文章帶你入門java網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫(xiě)運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))的程序,這些設(shè)備都通過(guò)網(wǎng)絡(luò)連接起來(lái)。本文介紹了一些網(wǎng)絡(luò)編程基礎(chǔ)的概念,并用Java來(lái)實(shí)現(xiàn)TCP和UDP的Socket的編程,來(lái)讓讀者更好的了解其原理
    2021-08-08
  • SpringAop實(shí)現(xiàn)操作日志記錄

    SpringAop實(shí)現(xiàn)操作日志記錄

    這篇文章主要介紹了SpringAop實(shí)現(xiàn)操作日志記錄的方法,幫助大家更好的理解和使用SpringAop,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論