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

Spring中@Transactional注解關(guān)鍵屬性和用法小結(jié)

 更新時(shí)間:2023年12月07日 10:22:06   作者:依稀i123  
在Spring框架中,@Transactional 是一個(gè)注解,用于聲明事務(wù)性的方法,它提供了一種聲明式的事務(wù)管理方式,避免了在代碼中直接編寫事務(wù)管理相關(guān)的代碼,本文給大家介紹@Transactional 注解的一些關(guān)鍵屬性和用法,感興趣的朋友一起看看吧

在Spring框架中,@Transactional 是一個(gè)注解,用于聲明事務(wù)性的方法。這個(gè)注解可以被應(yīng)用在方法級(jí)別或類級(jí)別上。它提供了一種聲明式的事務(wù)管理方式,避免了在代碼中直接編寫事務(wù)管理相關(guān)的代碼。@Transactional 注解能夠?qū)⒁粋€(gè)方法納入到一個(gè)事務(wù)中,使其成為一個(gè)事務(wù)性方法。

以下是 @Transactional 注解的一些關(guān)鍵屬性和用法:

關(guān)鍵屬性和用法

1. Propagation(傳播行為):

  • 定義了事務(wù)方法的執(zhí)行期間,當(dāng)前事務(wù)傳播到被調(diào)用的方法。
  • 常用的傳播行為包括 REQUIRED(如果有事務(wù),則加入;沒有事務(wù),則新建一個(gè))和 REQUIRES_NEW(每次都新建一個(gè)事務(wù),掛起當(dāng)前事務(wù))。
@Transactional(propagation = Propagation.REQUIRED)
public void transactionalMethod() {
    // 方法體
}

2. Isolation(隔離級(jí)別):

  • 定義了事務(wù)的隔離級(jí)別,即多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),事務(wù)之間的隔離程度。
  • 常用的隔離級(jí)別包括 READ_COMMITTED(允許讀取已提交的數(shù)據(jù),避免臟讀)和 SERIALIZABLE(最高的隔離級(jí)別,保證事務(wù)的完全隔離)。
@Transactional(isolation = Isolation.READ_COMMITTED)
public void transactionalMethod() {
    // 方法體
}

3. ReadOnly(只讀):

指定事務(wù)是否為只讀事務(wù)。如果設(shè)置為 true,則表示這個(gè)事務(wù)只讀取數(shù)據(jù)但不更新數(shù)據(jù),可以提高事務(wù)的性能。

@Transactional(readOnly = true)
public void readOnlyTransactionalMethod() {
    // 方法體
}

4. Timeout(超時(shí)):

定義了事務(wù)的超時(shí)時(shí)間,即事務(wù)方法的執(zhí)行時(shí)間超過了這個(gè)值,事務(wù)將被回滾。

@Transactional(timeout = 60) // 60 秒超時(shí)
public void transactionalMethod() {
    // 方法體
}

5. RollbackFor(回滾異常):

指定哪些異常觸發(fā)事務(wù)回滾。可以指定多個(gè)異常類型。

@Transactional(rollbackFor = {SQLException.class, IOException.class})
public void transactionalMethod() throws SQLException, IOException {
    // 方法體
}

6. NoRollbackFor(不回滾異常):

指定哪些異常不觸發(fā)事務(wù)回滾。同樣可以指定多個(gè)異常類型。

@Transactional(noRollbackFor = BusinessException.class)
public void transactionalMethod() throws BusinessException {
    // 方法體
}

使用方法:

在類級(jí)別使用 @Transactional

@Service
@Transactional
public class MyService {
    // 方法
}

在方法級(jí)別使用 @Transactional

@Service
public class MyService {
    @Transactional
    public void myTransactionalMethod() {
        // 方法體
    }
}

事務(wù)回滾

事務(wù)回滾是指在事務(wù)執(zhí)行過程中發(fā)生了某些錯(cuò)誤或異常,系統(tǒng)會(huì)撤銷當(dāng)前事務(wù)的所有操作,使數(shù)據(jù)回滾到事務(wù)開始之前的狀態(tài)。
事務(wù)回滾的作用是確保事務(wù)的一致性和完整性。如果在事務(wù)中發(fā)生了錯(cuò)誤,事務(wù)回滾可以防止數(shù)據(jù)的部分更新,確保數(shù)據(jù)庫的一致性。

何時(shí)會(huì)觸發(fā)事務(wù)回滾:

Unchecked 異常: 默認(rèn)情況下,Spring @Transactional 注解只會(huì)在遇到未檢查(unchecked)異常時(shí)觸發(fā)事務(wù)回滾。未檢查異常是指繼承自 RuntimeException 的異常,如 NullPointerExceptionArithmeticException 等。

@Transactional
public void transactionalMethod() {
    // 發(fā)生未檢查異常時(shí),事務(wù)將回滾
    throw new RuntimeException("Something went wrong");
}

指定回滾條件: 通過 rollbackFornoRollbackFor 屬性,可以在 @Transactional 注解上指定哪些異常觸發(fā)事務(wù)回滾或不觸發(fā)事務(wù)回滾。

@Transactional(rollbackFor = {SQLException.class, IOException.class})
public void transactionalMethod() throws SQLException, IOException {
    // 發(fā)生指定異常時(shí),事務(wù)將回滾
    throw new SQLException("Database error");
}

Checked 異常: 如果需要回滾事務(wù)的是受檢查的異常(checked exception),可以使用 @Transactional(rollbackFor = Exception.class),但這并不是通常的做法,因?yàn)橥ǔG闆r下事務(wù)回滾更關(guān)注未檢查異常。

  • @Transactional(rollbackFor = Exception.class) 表示在使用 Spring 的聲明式事務(wù)管理時(shí),如果發(fā)生任何 Exception 及其子類的異常,都會(huì)導(dǎo)致事務(wù)回滾。這意味著如果在被注解的方法中拋出了任何 Exception,不管是 checked 還是 unchecked 異常,都會(huì)觸發(fā)事務(wù)回滾。
  • 這種設(shè)置的意義在于,有時(shí)候我們可能希望對(duì)于某些異常情況,即便是 checked 異常,也觸發(fā)事務(wù)回滾。通常情況下,Spring 默認(rèn)只對(duì)未檢查異常(RuntimeException 及其子類)進(jìn)行回滾。通過設(shè)置 rollbackFor = Exception.class,我們擴(kuò)大了回滾的范圍,即使是 checked 異常也會(huì)導(dǎo)致事務(wù)回滾。

例子:

@Transactional(rollbackFor = Exception.class)
public void transactionalMethod() throws CustomCheckedException {
    // 操作數(shù)據(jù)庫
    // 拋出 checked 異常,事務(wù)將回滾
    throw new CustomCheckedException("Custom checked exception");
}

在上述例子中,即使 CustomCheckedException 是一個(gè) checked 異常,由于設(shè)置了 rollbackFor = Exception.class,這個(gè)方法拋出的異常也會(huì)導(dǎo)致事務(wù)回滾。

需要注意的是,過度使用這樣的設(shè)置可能會(huì)導(dǎo)致意外的結(jié)果,因?yàn)槟承?checked 異??赡苁强梢员粯I(yè)務(wù)邏輯處理的。因此,一般來說,建議在 rollbackFor 中指定具體的異常類型,而不是將其設(shè)置為 Exception.class

  • 一致性: 在事務(wù)中的一組操作,要么全部執(zhí)行,要么全部不執(zhí)行?;貪L確保了數(shù)據(jù)的一致性。
  • 完整性: 回滾可以防止數(shù)據(jù)的部分更新,保證了數(shù)據(jù)庫的完整性。
  • 可靠性: 當(dāng)出現(xiàn)異?;蝈e(cuò)誤時(shí),回滾確保了系統(tǒng)的可靠性,避免了數(shù)據(jù)不一致或丟失。

與 try-catch 的關(guān)系:

在事務(wù)性方法中,通常不需要顯式地使用 try-catch 塊來捕獲異常,因?yàn)?Spring 會(huì)在檢測到未檢查異常時(shí)觸發(fā)事務(wù)回滾。如果在事務(wù)性方法中使用了 try-catch 塊,并成功捕獲了異常,Spring 將不會(huì)觸發(fā)事務(wù)回滾。在這種情況下,你可以手動(dòng)調(diào)用 setRollbackOnly 方法來指示事務(wù)回滾。

@Transactional
public void transactionalMethod() {
    try {
        // 操作數(shù)據(jù)庫
    } catch (Exception e) {
        // 捕獲異常,不觸發(fā)事務(wù)回滾
        // 手動(dòng)指示事務(wù)回滾
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }
}

@Transactional 沒有拋出異常時(shí)是否管用:

如果 @Transactional 注解所標(biāo)注的方法沒有拋出未檢查異常,并且方法成功完成,那么事務(wù)會(huì)正常提交,而不會(huì)回滾。@Transactional 不僅用于處理異常,還用于確保事務(wù)的一致性,即一組操作要么全部成功,要么全部失敗。在沒有異常拋出的情況下,@Transactional 也能夠確保事務(wù)的完整性。

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

相關(guān)文章

  • @ConfigurationProperties加載外部配置方式

    @ConfigurationProperties加載外部配置方式

    這篇文章主要介紹了@ConfigurationProperties加載外部配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • maven項(xiàng)目test執(zhí)行main找不到資源文件的問題及解決

    maven項(xiàng)目test執(zhí)行main找不到資源文件的問題及解決

    這篇文章主要介紹了maven項(xiàng)目test執(zhí)行main找不到資源文件的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼

    kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼

    這篇文章主要介紹了kafka生產(chǎn)者和消費(fèi)者的javaAPI的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • Spring中常見的7種BeanDefinition詳解

    Spring中常見的7種BeanDefinition詳解

    在?Spring?容器中,我們廣泛使用的是一個(gè)一個(gè)的?Bean,BeanDefinition?從名字上就可以看出是關(guān)于?Bean?的定義,下面就跟隨小編一起深入了解一下常見的7中BeanDefinition吧
    2023-09-09
  • Spring解決循環(huán)依賴問題的三種方法小結(jié)

    Spring解決循環(huán)依賴問題的三種方法小結(jié)

    在 Spring 中,循環(huán)依賴問題指的是兩個(gè)或多個(gè) bean 之間相互依賴形成的閉環(huán),具體而言,當(dāng) bean A 依賴于 bean B,同時(shí) bean B 也依賴于 bean A,就形成了循環(huán)依賴,本文就給大家介紹了Spring解決循環(huán)依賴問題的三種方法,需要的朋友可以參考下
    2023-09-09
  • 詳解IDEA中MAVEN項(xiàng)目打JAR包的簡單方法

    詳解IDEA中MAVEN項(xiàng)目打JAR包的簡單方法

    本篇文章主要介紹了詳解IDEA中MAVEN項(xiàng)目打JAR包的簡單方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • springboot整合mqtt的步驟示例詳解

    springboot整合mqtt的步驟示例詳解

    MQTT(Message Queuing Telemetry Transport)是一種輕量級(jí)的消息傳輸協(xié)議,適用于物聯(lián)網(wǎng)設(shè)備之間的通信,本文介紹Spring Boot整合MQTT的實(shí)現(xiàn),涵蓋依賴引入、YML配置、配置類創(chuàng)建、自定義注解及使用示例,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例

    SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例

    本文主要介紹了SpringBoot中使用Redis?Stream實(shí)現(xiàn)消息監(jiān)聽示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java中的static的使用指南

    Java中的static的使用指南

    本文給大家簡單總結(jié)了下java中的static的使用注意事項(xiàng)及方法,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-04-04
  • Maven使用方法詳及方式詳細(xì)介紹

    Maven使用方法詳及方式詳細(xì)介紹

    使用maven倉庫的話需要從網(wǎng)上下載maven的包,比如“apache-maven-3.5.4-bin.tar”,下載完成之后解壓,在解壓的文件夾中的conf目錄下的settings.xml文件夾下就可以配置maven遠(yuǎn)程倉庫和本地倉庫的地址
    2022-11-11

最新評(píng)論

临海市| 临泉县| 秦安县| 蒲城县| 和顺县| 北海市| 永仁县| 四子王旗| 马鞍山市| 汽车| 东乡族自治县| 都安| 高青县| 托里县| 响水县| 达拉特旗| 武强县| 黄骅市| 海城市| 灵武市| 海南省| 新巴尔虎右旗| 同心县| 包头市| 淮南市| 绥滨县| 哈巴河县| 平江县| 宁安市| 永登县| 诸暨市| 内江市| 梁平县| 太仆寺旗| 铁岭县| 马鞍山市| 教育| 喜德县| 安顺市| 彭水| 遂平县|