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

Spring基于注解配置事務(wù)的屬性

 更新時(shí)間:2022年08月26日 11:43:00   作者:halftwo  
這篇文章主要為大家詳細(xì)介紹了Spring基于注解配置事務(wù)的屬性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Spring基于注解配置事務(wù)的屬性,供大家參考,具體內(nèi)容如下

一、事務(wù)屬性概述

在Spring中,事務(wù)屬性描述了事務(wù)策略如何應(yīng)用到方法上,事務(wù)屬性包含5個(gè)方面:

① 傳播行為
② 隔離級(jí)別
③ 回滾策略
④ 超時(shí)時(shí)間
⑤ 是否只讀

二、事務(wù)的傳播行為屬性##

1、當(dāng)事務(wù)方法被另一個(gè)事務(wù)方法調(diào)用時(shí),必須指定事務(wù)應(yīng)該如何傳播。例如,方法可能繼續(xù)在現(xiàn)有的事務(wù)中允許,也可能開(kāi)啟一個(gè)新事務(wù),并在自己的事務(wù)中運(yùn)行。
2、事務(wù)的傳播行為可以由傳播屬性指定,Spring定義了7種類(lèi)型的傳播行為。其中最常用的是REQUIREDREQUIRES_NEW

3、事務(wù)的傳播屬性可以在@Transactional注解的propagation屬性中定義。

4、舉個(gè)例子:

/**
?* 使用 @Transactional 指定事務(wù)方法
?*/
@Service("bookShopService")
public class BookShopServiceImpl implements BookShopService
{
?? ?/**
?? ? * 1. 添加事務(wù)注解@Transactional。
?? ? * 2. 使用 propagation 指定事務(wù)的傳播行為,
?? ? * 即當(dāng)前事務(wù)方法被另外一個(gè)事務(wù)方法調(diào)用時(shí),如何使用事務(wù):?
?? ? * 是使用調(diào)用方法的事務(wù),還是開(kāi)啟一個(gè)新事務(wù)(使用自己的事務(wù))。
?? ? * 3. propagation:
?? ? * ?① 默認(rèn)值是 Propagation.REQUIRED, 即使用調(diào)用方法的事務(wù)。
?? ? * ?② 可以指定為 Propagation.REQUIRES_NEW, 即在調(diào)用方法的事務(wù)中開(kāi)啟一個(gè)新事務(wù)(自己的事務(wù))。
?? ? */
? ? @Transactional(propagation = Propagation.REQUIRES_NEW)
? ? public void purchaseSigleBook(String acctName, String bookId)
? ? {
? ? ? ? ...
? ? }
}

三、事務(wù)的隔離級(jí)別##

1、從理論上來(lái)說(shuō),事務(wù)應(yīng)該彼此完全隔離,以避免并發(fā)事務(wù)所導(dǎo)致的問(wèn)題。然而,那樣會(huì)對(duì)性能產(chǎn)生極大的影響,因?yàn)槭聞?wù)必須按順序運(yùn)行。
2、在實(shí)際開(kāi)發(fā)中,為了提升性能,事務(wù)會(huì)以較低的隔離級(jí)別運(yùn)行。
3、事務(wù)的隔離級(jí)別可以通過(guò)隔離級(jí)別事務(wù)屬性(isolation)指定。
4、Spring支持的事務(wù)隔離級(jí)別:

事務(wù)的隔離級(jí)別要得到底層數(shù)據(jù)庫(kù)引擎的支持,而不是應(yīng)用程序或者框架的支持。
Oracle 支持的2種事務(wù)隔離級(jí)別:READ_COMMIT。
MySQL 支持4種事務(wù)隔離級(jí)別:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ 和 SERIALIZABLE。

5、用@Transactional注解聲明式的管理事務(wù)時(shí)可以在 @Transactional 的isolation屬性中設(shè)置隔離級(jí)別。

6、舉個(gè)例子:

/**
?1. 使用 @Transactional 指定事務(wù)方法
?*/
@Service("bookShopService")
public class BookShopServiceImpl implements BookShopService
{
?? ?/**
?? ? * 1. 添加事務(wù)注解@Transactional。
?? ? * 2. 使用isolation屬性指定事務(wù)的隔離級(jí)別,最常用的的取值是: Isolation.READ_COMMITTED。
?? ? */
? ? @Transactional(isolation = Isolation.READ_COMMITTED)
? ? public void purchaseSigleBook(String acctName, String bookId)
? ? {
? ? ? ? ...
? ? }
}

四、事務(wù)的回滾屬性##

1、默認(rèn)情況下只有未檢查異常( RuntimeException 和 Error 類(lèi)型的異常)會(huì)導(dǎo)致事務(wù)回滾,而檢查異常不會(huì)。
2、事務(wù)回滾的規(guī)則可以通過(guò) @Transactional注解的 rollbackFornoRollbackFor屬性來(lái)定義,這兩個(gè)屬性被聲明為Class[] 類(lèi)型的,因此可以為這兩個(gè)屬性指定多個(gè)異常類(lèi)。
① rollbackFor:指定遇到哪些異常時(shí)必須進(jìn)行回滾。
② noRollbackFor:指定遇到哪些異常時(shí),必須不回滾。

3、舉個(gè)例子:

/**
?* 使用 @Transactional 指定事務(wù)方法
?*/
@Service("bookShopService")
public class BookShopServiceImpl implements BookShopService
{
?? ?/**
?? ? * 1. 添加事務(wù)注解@Transactional。
?? ? * 2. 使用rollbackFor 和 noRollbackFor指定事務(wù)遇到哪些異常時(shí)進(jìn)行強(qiáng)制回滾或者強(qiáng)制不回滾。
?? ? * 默認(rèn)情況下,Spring聲明事務(wù)對(duì)所有運(yùn)行時(shí)異常進(jìn)行回滾.通常取默認(rèn)值。
?? ? */
? ? @Transactional(noRollbackFor = {UserAccounException.class})
? ? public void purchaseSigleBook(String acctName, String bookId)
? ? {
? ? ? ? ...
? ? }
}

五、事務(wù)的只讀屬性##

1、如果一個(gè)事務(wù)只讀取數(shù)據(jù)但不修改數(shù)據(jù),數(shù)據(jù)庫(kù)引擎可以對(duì)這個(gè)事務(wù)進(jìn)行優(yōu)化。
2、只讀事務(wù)屬性:表示這個(gè)事務(wù)只讀取數(shù)據(jù)但不更新數(shù),這樣可以幫助數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化事務(wù)。
3、只讀屬性可以在@Transactional注解中readOnly屬性中定義,其取值只有true和false。
4、舉個(gè)例子:

/**
?* 使用 @Transactional 指定事務(wù)方法
?*/
@Service("bookShopService")
public class BookShopServiceImpl implements BookShopService
{
?? ?/**
?? ? * 1. 添加事務(wù)注解@Transactional。
?? ? * 2. 使用 readOnly 只讀事務(wù)的只讀屬性,表示這個(gè)事務(wù)是否只讀取數(shù)據(jù)而不修改數(shù)據(jù)。
?? ? */
? ? @Transactional(readOnly = true)
? ? public void purchaseSigleBook(String acctName, String bookId)
? ? {
? ? ? ? ...
? ? }
}

##六、事務(wù)的超時(shí)屬性##

1、由于事務(wù)可以在行和表上獲得鎖,因此長(zhǎng)期運(yùn)行的事務(wù)會(huì)占用資源,并對(duì)整體性能產(chǎn)生影響。
2、超時(shí)事務(wù)屬性:事務(wù)在強(qiáng)制回滾之前可以保持多久,這樣可以防止長(zhǎng)期運(yùn)行的事務(wù)占用資源。
3、超時(shí)屬性可以在 @Transactional注解中timeout屬性中定義,其單位為秒。
4、舉個(gè)例子:

/**
?* 使用 @Transactional 指定事務(wù)方法
?*/
@Service("bookShopService")
public class BookShopServiceImpl implements BookShopService
{
?? ?/**
?? ? * 1. 添加事務(wù)注解@Transactional。
?? ? * 2. 使用 timeout 指定事務(wù)的超時(shí)屬性,表示在強(qiáng)制回滾之前,這個(gè)事務(wù)能運(yùn)行多久,單位是秒。
?? ? */
? ? @Transactional(timeout = 3)
? ? public void purchaseSigleBook(String acctName, String bookId)
? ? {
? ? ? ? ...
? ? }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring為何要用三級(jí)緩存來(lái)解決循環(huán)依賴(lài)問(wèn)題

    Spring為何要用三級(jí)緩存來(lái)解決循環(huán)依賴(lài)問(wèn)題

    這篇文章主要給大家介紹了關(guān)于Spring為何要用三級(jí)緩存來(lái)解決循環(huán)依賴(lài)問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • java代碼如何讀取bootstrap.yml配置信息

    java代碼如何讀取bootstrap.yml配置信息

    這篇文章主要介紹了java代碼如何讀取bootstrap.yml配置信息問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring?AOP?創(chuàng)建代理對(duì)象詳情

    Spring?AOP?創(chuàng)建代理對(duì)象詳情

    這篇文章介紹了Spring?AOP?創(chuàng)建代理對(duì)象詳情,主要介紹AOP?創(chuàng)建代理對(duì)象和上下文相關(guān)的內(nèi)容,下文分享具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 一篇文章帶你認(rèn)識(shí)Java8接口的默認(rèn)方法

    一篇文章帶你認(rèn)識(shí)Java8接口的默認(rèn)方法

    這篇文章主要給大家介紹了如何通過(guò)一篇文章帶你認(rèn)識(shí)Java8接口的默認(rèn)方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Maven-POM文件及組成部分

    Maven-POM文件及組成部分

    POM是用于描述Maven項(xiàng)目的配置文件,它包含了項(xiàng)目構(gòu)建、依賴(lài)管理和其他相關(guān)配置的信息,這篇文章主要介紹了Maven-POM文件,需要的朋友可以參考下
    2023-06-06
  • Java并發(fā)編程中使用Executors類(lèi)創(chuàng)建和管理線(xiàn)程的用法

    Java并發(fā)編程中使用Executors類(lèi)創(chuàng)建和管理線(xiàn)程的用法

    這篇文章主要介紹了Java并發(fā)編程中使用Executors類(lèi)創(chuàng)建和管理線(xiàn)程的用法,文中舉了用其啟動(dòng)線(xiàn)程和設(shè)置線(xiàn)程優(yōu)先級(jí)的例子,需要的朋友可以參考下
    2016-03-03
  • Mybatis配置之<properties>屬性配置元素解析

    Mybatis配置之<properties>屬性配置元素解析

    這篇文章主要介紹了Mybatis配置之<properties>屬性配置元素解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解關(guān)于java文件下載文件名亂碼問(wèn)題解決方案

    詳解關(guān)于java文件下載文件名亂碼問(wèn)題解決方案

    這篇文章主要介紹了詳解關(guān)于java文件下載文件名亂碼問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Java并發(fā)編程示例(七):守護(hù)線(xiàn)程的創(chuàng)建和運(yùn)行

    Java并發(fā)編程示例(七):守護(hù)線(xiàn)程的創(chuàng)建和運(yùn)行

    這篇文章主要介紹了Java并發(fā)編程示例(七):守護(hù)線(xiàn)程的創(chuàng)建和運(yùn)行,在本節(jié)示例中,我們將創(chuàng)建兩個(gè)線(xiàn)程,一個(gè)是普通線(xiàn)程,向隊(duì)列中寫(xiě)入事件,另外一個(gè)是守護(hù)線(xiàn)程,清除隊(duì)列中的事件,需要的朋友可以參考下
    2014-12-12
  • 實(shí)現(xiàn)分布式WebSocket集群的方法

    實(shí)現(xiàn)分布式WebSocket集群的方法

    本文總結(jié)出了幾個(gè)實(shí)現(xiàn)分布式WebSocket集群的辦法,從zuul到spring cloud gateway的不同嘗試,總結(jié)出了這篇文章,希望能幫助到某些人,并且能一起分享這方面的想法與研究
    2022-03-03

最新評(píng)論