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

Springboot @Transactional大事務(wù)處理的幾點(diǎn)建議

 更新時(shí)間:2025年01月16日 09:21:08   作者:哈嘍,樹先生  
本文主要介紹了大事務(wù)的概念及其危害,并提出了幾種解決大事務(wù)問題的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.大事務(wù):

總體任務(wù)對應(yīng)的事務(wù)運(yùn)行時(shí)間比較長,長時(shí)間未提交的事務(wù)。

2.大事務(wù)的危害:

a.并發(fā)情況下,數(shù)據(jù)庫連接池資源占滿。大事務(wù)提交不及時(shí),導(dǎo)致連接資源釋放緩慢。
b.數(shù)據(jù)庫死鎖和鎖等待。mysql innodb存儲引擎背景下,事務(wù)如果占用了排他鎖,會容易導(dǎo)致并發(fā)情況下數(shù)據(jù)死鎖或者鎖等待。
c.大事務(wù)Rt時(shí)間長,容易導(dǎo)致接口超時(shí)。
d.大事務(wù)回滾時(shí)間長。
e.數(shù)據(jù)庫主從架構(gòu)下,數(shù)據(jù)同步延遲

3.解決辦法

3.1 將聲明式事務(wù)的@Transactional方式 合理的替換為 編程式事務(wù)TransactionTemplate 的方式

聲明式事務(wù)的粒度最小是整個(gè)方法,可能會導(dǎo)致業(yè)務(wù)里不必要的邏輯都加了事務(wù)。編程式事務(wù)細(xì)化需要加事務(wù)的邏輯上,形成實(shí)際有用的事務(wù)塊。

@Autowired
private TransactionTemplate transactionTemplate;

public void testTransaction() {
    transactionTemplate.execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
            try {
                // ....  業(yè)務(wù)代碼
            } catch (Exception e){
                //回滾
                transactionStatus.setRollbackOnly();
            }
        }
    });
}

3.2 將查詢放在事務(wù)方法外

使用@Transactional 又想避免產(chǎn)生大事務(wù),需對方法進(jìn)行拆分,將不需要事務(wù)管理的邏輯與事務(wù)操作分開

@Service
public class TransactionTestService{

// 避免同一個(gè)類內(nèi)部方法相互調(diào)用,實(shí)例方法調(diào)用代理方法而導(dǎo)致事務(wù)失效
    @Resource
    private TransactionTestService service;

    public void create(ParamDto dto){
        queryData1();
        queryData2();
        service.save(dto);
    }
  
	//事務(wù)操作
    @Transactional(rollbackFor = Exception.class)
    public void save(ParamDto dto){
        paramDao.insert(dto);
    }
}

3.3 避免跨服務(wù)間的遠(yuǎn)程調(diào)用

服務(wù)間的通訊及服務(wù)之間的調(diào)用時(shí)間 受網(wǎng)絡(luò)環(huán)境和遠(yuǎn)端接口Rt時(shí)間的影響,可能會比較耗時(shí)。

反例:
	//事務(wù)操作
    @Transactional(rollbackFor = Exception.class)
    public void save(ParamDto dto){
    // 調(diào)用了其他服務(wù)
        otherRemoteApi();
        paramDao.insert(dto);
    }
    
修改為:
	@Autowired
    private TransactionTemplate transactionTemplate;
    
    public void save(ParamDto dto){
    // 調(diào)用了其他服務(wù)
        otherRemoteApi();
        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
            try {
                  paramDao.insert(dto);
            } catch (Exception e){
                //回滾
                transactionStatus.setRollbackOnly();
            }
        }
    });
      
    }

3.4 事務(wù)中不應(yīng)該一次性處理太多的數(shù)據(jù),可以使用分批執(zhí)行

3.5事務(wù)中的方法可以根據(jù)業(yè)務(wù)使用異步執(zhí)行

到此這篇關(guān)于Springboot @Transactional大事務(wù)處理的幾點(diǎn)建議的文章就介紹到這了,更多相關(guān)Springboot @Transactional大事務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java持久層框架MyBatis簡單實(shí)例

    Java持久層框架MyBatis簡單實(shí)例

    MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 。本文重點(diǎn)給大家介紹Java持久層框架MyBatis簡單實(shí)例,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧
    2016-07-07
  • SpringMVC中的攔截器詳解及代碼示例

    SpringMVC中的攔截器詳解及代碼示例

    這篇文章主要介紹了SpringMVC中的攔截器詳解及代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 如何在Spring?Boot框架中使用攔截器實(shí)現(xiàn)URL限制

    如何在Spring?Boot框架中使用攔截器實(shí)現(xiàn)URL限制

    在Spring?Boot框架中,您可以使用攔截器(Interceptor)來控制限制URL列表,本文通過一個(gè)簡單的示例給大家介紹Spring?Boot?攔截器實(shí)現(xiàn)URL限制的操作方法,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • 序列化版本號serialVersionUID的作用_動力節(jié)點(diǎn)Java學(xué)院整理

    序列化版本號serialVersionUID的作用_動力節(jié)點(diǎn)Java學(xué)院整理

    Java序列化是將一個(gè)對象編碼成一個(gè)字節(jié)流,反序列化將字節(jié)流編碼轉(zhuǎn)換成一個(gè)對象,這篇文章主要介紹了序列化版本號serialVersionUID的作用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Maven打包后找不到class文件的問題

    Maven打包后找不到class文件的問題

    本文主要介紹了Maven打包后找不到class文件的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • idea 設(shè)置支持ES6語法的操作

    idea 設(shè)置支持ES6語法的操作

    這篇文章主要介紹了idea設(shè)置支持ES6語法的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java nio中的ByteBuffer擴(kuò)展問題

    java nio中的ByteBuffer擴(kuò)展問題

    這篇文章主要介紹了java nio中的ByteBuffer擴(kuò)展問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于Java實(shí)現(xiàn)收發(fā)電子郵件功能

    基于Java實(shí)現(xiàn)收發(fā)電子郵件功能

    Email就是電子郵件,我們平常使用的QQ郵箱,網(wǎng)易郵箱,F(xiàn)oxmail都是用來收發(fā)郵件的,利用Java程序也可以完成收發(fā)電子郵件的功能,本文就來為大家詳細(xì)講講實(shí)現(xiàn)步驟
    2022-07-07
  • Java中的LinkedBlockingQueue源碼解析

    Java中的LinkedBlockingQueue源碼解析

    這篇文章主要介紹了Java中的LinkedBlockingQueue源碼解析,LinkedBlockingQueue底層是一個(gè)鏈表(可以指定容量,默認(rèn)是Integer.MAX_VALUE),維持了兩把鎖,一把鎖用于入隊(duì),一把鎖用于出隊(duì),并且使用一個(gè)AtomicInterger類型的變量保證線程安全,需要的朋友可以參考下
    2023-12-12
  • 詳解如何在SpringBoot里使用SwaggerUI

    詳解如何在SpringBoot里使用SwaggerUI

    本篇文章主要介紹了詳解如何在SpringBoot里使用SwaggerUI,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論