国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot 開啟事務(wù)的常用方式

這篇具有很好參考價值的文章主要介紹了SpringBoot 開啟事務(wù)的常用方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言,有時候統(tǒng)一異常處理不太好,因為范圍太廣了,很多沒必要回滾的地方,因為拋了個異常都沒辦法繼續(xù)執(zhí)行別的代碼,所以,可以在需要開事務(wù)的地方添加 @Transation 注解開啟事務(wù)就行了。

springboot 項目中,一般兩種方式可以開啟事務(wù):
1. 只需要在類或者方法上添加注解 @Transaction 即可開啟事務(wù);
一般在service類標(biāo)簽上添加@Transactional,這樣可以將整個service類納入spring事務(wù)管理(所有的 public 方法納入),在每個業(yè)務(wù)方法執(zhí)行時都會開啟一個事務(wù),不過這些事務(wù)采用相同的管理方式。
在方法上添加這個注解也可以將方法納入事務(wù)(注意事項:@Transactional必須添加在public修飾的方法上)。
2. 在配置類中使用注解 @EnableTransactionManagement 然后指定開啟事務(wù)的地方,這樣即使不添加注解 @Transactional 也可以在指定地方開啟事務(wù)。
如果采用 @EnableTransactionManagement 開啟統(tǒng)一的事務(wù)控制器,可用代碼如下:
?

@Configuration
@EnableTransactionManagement
public class TransactionConfig {
    /**
     * 配置全局事務(wù)的切點為service層的所有方法  AOP切面表達式 可參考(https://blog.csdn.net/ycf921244819/article/details/106599489)
     * TODO 設(shè)置service層所在位置
     */
    private static final String AOP_POINTCUT_EXPRESSION = "execution (* com.xxx.service..*.*(..))";
    private static final String[] REQUIRED_RULE_TRANSACTION = {"insert*", "create*", "add*", "save*","modify*", "update*", "del*", "delete*"};
    private static final String[] READ_RULE_TRANSACTION = {"select*", "get*", "query*", "search*", "count*","detail*", "find*"};
    /**
     * 注入事務(wù)管理器
     */
    @Autowired
    private TransactionManager transactionManager;
    /**
     * 配置事務(wù)攔截器
     */
    @Bean
    public TransactionInterceptor txAdvice() {

        RuleBasedTransactionAttribute txAttrRequired = new RuleBasedTransactionAttribute();
        txAttrRequired.setName("REQUIRED事務(wù)");
        //設(shè)置事務(wù)傳播機制,默認是PROPAGATION_REQUIRED:如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則創(chuàng)建一個新的事務(wù)
        txAttrRequired.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        //設(shè)置異?;貪L為Exception  默認是RuntimeException
        List rollbackRuleAttributes = new ArrayList<>();
        rollbackRuleAttributes.add(new RollbackRuleAttribute(Exception.class));
        txAttrRequired.setRollbackRules(rollbackRuleAttributes);

        RuleBasedTransactionAttribute txAttrRequiredReadOnly = new RuleBasedTransactionAttribute();
        txAttrRequiredReadOnly.setName("SUPPORTS事務(wù)");
        //設(shè)置事務(wù)傳播機制,PROPAGATION_SUPPORTS:如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則以非事務(wù)的方式繼續(xù)運行
        txAttrRequiredReadOnly.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
        //設(shè)置異?;貪L為Exception  默認是RuntimeException
        txAttrRequiredReadOnly.setRollbackRules(rollbackRuleAttributes);
        txAttrRequiredReadOnly.setReadOnly(true);
        /*事務(wù)管理規(guī)則,聲明具備事務(wù)管理的方法名*/
        NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();
        //方法名規(guī)則限制,必須以下列開頭才會加入事務(wù)管理當(dāng)中
        for (String s : REQUIRED_RULE_TRANSACTION) {
            source.addTransactionalMethod(s, txAttrRequired);
        }
        //對于查詢方法,根據(jù)實際情況添加事務(wù)管理 可能存在查詢多個數(shù)據(jù)時,已查詢出來的數(shù)據(jù)剛好被改變的情況
        for (String s : READ_RULE_TRANSACTION) {
            source.addTransactionalMethod(s, txAttrRequired);
        }
        return new TransactionInterceptor((PlatformTransactionManager) transactionManager, source);
    }
    /**
     *  設(shè)置切面
     */
    @Bean
    public Advisor txAdviceAdvisor() {
        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
        pointcut.setExpression(AOP_POINTCUT_EXPRESSION);
        return new DefaultPointcutAdvisor(pointcut, txAdvice());
    }
}

寫在最后:
其實兩種方式都不需要寫 @EnableTransactionManagement 就能使用事務(wù);
為什么SpringBoot中不需要使用@EnableTransactionManagement就能使用事務(wù)?
答:因為在SpringBoot中自動裝配了此注解配置,所以已被默認啟用,自然不需要手動加上此注解。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-568582.html

到了這里,關(guān)于SpringBoot 開啟事務(wù)的常用方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 04 SpringBoot整合Druid/MyBatis/事務(wù)/AOP+打包項目

    04 SpringBoot整合Druid/MyBatis/事務(wù)/AOP+打包項目

    項目結(jié)構(gòu): 引入依賴: 啟動類: 實體類: Controller類: Druid配置文件application.yaml : 啟動項目后進入8080/user/getUser即可獲得返回的json. 先看看總體的步驟: 導(dǎo)入依賴:在pom.xml中添加MyBatis和數(shù)據(jù)庫驅(qū)動的相關(guān)依賴。 配置數(shù)據(jù)源: application.yml 中配置 數(shù)據(jù)庫連接信息,包括數(shù)據(jù)

    2024年01月21日
    瀏覽(40)
  • 解決多數(shù)據(jù)源的事務(wù)問題 - 基于springboot--mybatis

    解決多數(shù)據(jù)源的事務(wù)問題 - 基于springboot--mybatis

    在Spring Boot和MyBatis中,我們有時需要在方法中同時使用兩個不同的數(shù)據(jù)庫,但使用 @Transactional 注解會變得復(fù)雜。這時我們可以用一種更靈活的方法來處理。 想象一下這樣的場景:我們有兩個數(shù)據(jù)庫,我們希望在一個方法中同時操作它們,但是普通的 @Transactional 注解變得不太

    2024年02月01日
    瀏覽(17)
  • Springboot 大事務(wù)問題的常用優(yōu)化方案

    Springboot 大事務(wù)問題的常用優(yōu)化方案

    ??? 個人主頁 :牽著貓散步的鼠鼠? ??? 系列專欄 :Java全棧-專欄 ??? 個人學(xué)習(xí)筆記,若有缺誤,歡迎評論區(qū)指正 目錄 1.前言 2.什么是大事務(wù) 3.解決辦法 3.1.少用@Transactional注解 3.2..將查詢(select)方法放到事務(wù)外 3.3事務(wù)中避免遠程調(diào)用 3.4事務(wù)中避免一次性處理太多數(shù)據(jù)

    2024年04月13日
    瀏覽(17)
  • SpringBoot第24講:SpringBoot集成MySQL - MyBatis XML方式

    上文介紹了用JPA方式的集成MySQL數(shù)據(jù)庫,JPA方式在中國以外地區(qū)開發(fā)而言基本是標(biāo)配, 在國內(nèi)MyBatis及其延伸框架較為主流 。本文是SpringBoot第24講,主要介紹 MyBatis技棧的演化 以及 SpringBoot集成基礎(chǔ)的MyBatis XML實現(xiàn)方式 的實例。

    2024年02月15日
    瀏覽(19)
  • 【業(yè)務(wù)功能篇52】Springboot+mybatis mysql開啟批量執(zhí)行sql參數(shù) allowMultiQueries=true

    可以在sql語句后攜帶分號,實現(xiàn)多語句執(zhí)行。 可以執(zhí)行批處理,同時發(fā)出多個SQL語句。 在application-xxx.xml配置文件中,配置數(shù)據(jù)庫的信息 ?實例 dao層xml: 逐條更新,但一次提交給MySQL服務(wù)器而已。 利用foreach 遍歷循環(huán),傳入的list集合數(shù)據(jù),批量的進行update ? MySQL的JDBC連接的

    2024年02月15日
    瀏覽(20)
  • for循環(huán)中循環(huán)一次提交一次 insert update 關(guān)閉事務(wù) spring springboot mybatis

    ?在方法上直接加如下注解: 在測試的時候,有時候會希望在for循環(huán)中,代碼循環(huán)一次就提交一次事務(wù)。 最簡單的方式,就是關(guān)閉事務(wù),不需要事務(wù)。添加注解如下: 如果說是真的在生產(chǎn)上有這樣的需要,每循環(huán)一次就提交事務(wù),那就需要手動控制事務(wù)了。 需要這幾行代碼

    2024年02月07日
    瀏覽(24)
  • SpringBoot項目中控制線程池、多線程事務(wù)提交、回滾的方式

    場景: 1、由于多線程每個線程都是一個異步任務(wù),所以每個線程都是一個單獨的事務(wù),通常使用的聲明式事務(wù)?@Transactional()?是無法控制多線程中事務(wù)的 2、所以只能另尋解決方式 解決: 一、基于TransactionStatus集合來控制多線程事務(wù)提交(推薦此方式) 1、代碼案例

    2024年02月15日
    瀏覽(24)
  • Springboot+mybatis-plus+dynamic-datasource+Druid 多數(shù)據(jù)源 分布式事務(wù)

    Springboot+mybatis-plus+dynamic-datasource+Druid 多數(shù)據(jù)源 分布式事務(wù)

    背景 處理多數(shù)據(jù)源事務(wù)一直是一個復(fù)雜而棘手的問題,通常我們有兩種主流的解決方法。 第一種是通過Atomikos手動創(chuàng)建多數(shù)據(jù)源事務(wù),這種方法更適合數(shù)據(jù)源數(shù)量較少,參數(shù)配置不復(fù)雜,對性能要求不高的項目。然而,這種方法的最大困難在于需要手動配置大量設(shè)置,這可能

    2024年02月11日
    瀏覽(26)
  • SpringBoot集成MyBatis-yml方式詳解

    SpringBoot集成MyBatis-yml方式詳解

    ????????簡介:spring boot整合mybatis開發(fā)web系統(tǒng)目前來說是市面上主流的框架,每個Java程序和springboot mybatis相處的時間可謂是比和自己女朋友相處的時間都多,但是springboot mybatis并沒有得到你的真愛,因為你只是為了養(yǎng)活你女朋友而委曲求全的和spring boot mybatis假意相處。和

    2023年04月21日
    瀏覽(16)
  • SpringBoot+MyBatis批量插入數(shù)據(jù)的三種方式

    最近導(dǎo)入表格數(shù)據(jù)時需要同時插入修改大量數(shù)據(jù),研究了一下有三種實現(xiàn)方式 1、用for循環(huán)調(diào)用sql插入數(shù)據(jù) 這種方式插入大量數(shù)據(jù)時,效率非常底下,不推薦 2、利用mybatis的foreach來實現(xiàn)循環(huán)插入 這種方式插入大量數(shù)據(jù)時,好處是不用頻繁訪問數(shù)據(jù)庫,一條sql搞定,效率比較

    2024年02月16日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包