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

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

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

1.大事務(wù):

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

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

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

3.解決辦法

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

聲明式事務(wù)的粒度最小是整個方法,可能會導(dǎo)致業(yè)務(wù)里不必要的邏輯都加了事務(wù)。編程式事務(wù)細化需要加事務(wù)的邏輯上,形成實際有用的事務(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ù),需對方法進行拆分,將不需要事務(wù)管理的邏輯與事務(wù)操作分開

@Service
public class TransactionTestService{

// 避免同一個類內(nèi)部方法相互調(diào)用,實例方法調(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ù)間的遠程調(diào)用

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

反例:
	//事務(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ù)處理的幾點建議的文章就介紹到這了,更多相關(guān)Springboot @Transactional大事務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot+vue實現(xiàn)頁面下載文件

    springboot+vue實現(xiàn)頁面下載文件

    這篇文章主要為大家詳細介紹了springboot+vue實現(xiàn)頁面下載文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 高并發(fā)下restTemplate的錯誤分析方式

    高并發(fā)下restTemplate的錯誤分析方式

    這篇文章主要介紹了高并發(fā)下restTemplate的錯誤分析方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • springboot配置文件讀取pom文件信息方式

    springboot配置文件讀取pom文件信息方式

    這篇文章主要介紹了springboot配置文件讀取pom文件信息方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java TCP網(wǎng)絡(luò)通信協(xié)議詳細講解

    Java TCP網(wǎng)絡(luò)通信協(xié)議詳細講解

    TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission?Control?Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層
    2022-09-09
  • Android中Parcelable的作用實例解析

    Android中Parcelable的作用實例解析

    這篇文章主要介紹了Android中Parcelable的作用,對于Android初學(xué)者有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2014-08-08
  • java判斷http地址是否連通(示例代碼)

    java判斷http地址是否連通(示例代碼)

    這篇文章通過實例代碼給大家介紹了java判斷http地址是否連通,文末給大家補充知識點url.openconnection() 設(shè)置超時時間的方法,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • java冷知識:javac AbstractProcessor詳解

    java冷知識:javac AbstractProcessor詳解

    這篇文章主要介紹了java冷知識:javac AbstractProcessor詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java使用RSA與AES加密解密的實例代碼詳解

    java使用RSA與AES加密解密的實例代碼詳解

    這篇文章主要介紹了java使用RSA與AES加密解密的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • Java性能優(yōu)化之?dāng)?shù)據(jù)結(jié)構(gòu)實例代碼

    Java性能優(yōu)化之?dāng)?shù)據(jù)結(jié)構(gòu)實例代碼

    這篇文章主要介紹了Java性能優(yōu)化之?dāng)?shù)據(jù)結(jié)構(gòu)實例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • java遍歷機制性能的比較詳解

    java遍歷機制性能的比較詳解

    這篇文章主要給大家介紹了關(guān)于java遍歷機制性能比較的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評論

临洮县| 汪清县| 集安市| 奎屯市| 贵阳市| 安西县| 天等县| 都兰县| 于田县| 亚东县| 新津县| 麟游县| 白朗县| 犍为县| 县级市| 连城县| 开鲁县| 三台县| 许昌县| 临安市| 彩票| 长宁县| 烟台市| 塔城市| 长岛县| 东丽区| 贵港市| 榆社县| 商水县| 神木县| 乐至县| 北川| 松原市| 凌云县| 台东县| 辰溪县| 丰原市| 桂林市| 贞丰县| 民丰县| 平利县|