精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

性能炸裂!Spring Boot 3.4 + ThreadPoolTaskExecutor 批量插入百萬數據!

開發 前端
在高并發、大數據量插入的場景下,傳統的 單線程批量插入 方式已經無法滿足性能需求。通過 Spring Boot 3.4 + ThreadPoolTaskExecutor,我們可以充分利用 多線程并發處理,顯著提升數據庫寫入性能。

在現代應用場景中,批量數據處理已經成為影響系統性能的關鍵因素之一。尤其是在大規模數據插入的過程中,傳統的單線程方式往往難以滿足高效數據處理的需求。本文將基于 Spring Boot 3.4 版本,結合 ThreadPoolTaskExecutor 線程池技術,實現 多線程批量插入300萬條數據,并進行性能實測。我們將詳細剖析 MyBatis-Plus 結合 Spring 異步任務 的最佳實踐,提供完整的代碼示例,確保數據的高效存儲和一致性。

方案概述

開發目的

提升大規模數據插入的效率,減少數據庫壓力,提高整體性能。

采用方案

利用 Spring Boot 3.4 結合 ThreadPoolTaskExecutor,使數據插入任務并發執行,提高數據庫寫入吞吐量。

技術棧

  • Spring Boot 3.4
  • MyBatis-Plus
  • Swagger
  • Lombok
  • MySQL
  • ThreadPoolTaskExecutor

線程池配置

# 核心線程數
async.executor.thread.core_pool_size=30
# 最大線程數
async.executor.thread.max_pool_size=30
# 隊列大小
async.executor.thread.queue_capacity=99988
# 線程名稱前綴
async.executor.thread.name.prefix=async-importDB-

Spring 線程池 Bean 配

package com.icoderoad.config;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;


import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;


@Configuration
@EnableAsync
@Slf4j
public class ExecutorConfig {
    @Value("${async.executor.thread.core_pool_size}")
    private int corePoolSize;


    @Value("${async.executor.thread.max_pool_size}")
    private int maxPoolSize;


    @Value("${async.executor.thread.queue_capacity}")
    private int queueCapacity;


    @Value("${async.executor.thread.name.prefix}")
    private String namePrefix;


    @Bean(name = "asyncServiceExecutor")
    public Executor asyncServiceExecutor() {
        log.warn("啟動線程池 asyncServiceExecutor");
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix(namePrefix);
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}

異步任務執行

package com.icoderoad.service.impl;


import com.icoderoad.mapper.LogOutputResultMapper;
import com.icoderoad.model.LogOutputResult;
import com.icoderoad.service.AsyncService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;


import java.util.List;
import java.util.concurrent.CountDownLatch;


@Slf4j
@Service
public class AsyncServiceImpl implements AsyncService {
    @Override
    @Async("asyncServiceExecutor")
    public void executeAsync(List<LogOutputResult> logOutputResults, LogOutputResultMapper logOutputResultMapper, CountDownLatch countDownLatch) {
        try {
            log.warn("執行異步插入任務");
            logOutputResultMapper.addLogOutputResultBatch(logOutputResults);
        } finally {
            countDownLatch.countDown();
        }
    }
}

業務調用多線程插入

package com.icoderoad.service.impl;


import com.icoderoad.mapper.LogOutputResultMapper;
import com.icoderoad.model.LogOutputResult;
import com.icoderoad.service.AsyncService;
import com.icoderoad.utils.ConvertHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;


import java.util.List;
import java.util.concurrent.CountDownLatch;


@Slf4j
@Service
public class LogOutputService {
    private final AsyncService asyncService;
    private final LogOutputResultMapper logOutputResultMapper;


    public LogOutputService(AsyncService asyncService, LogOutputResultMapper logOutputResultMapper) {
        this.asyncService = asyncService;
        this.logOutputResultMapper = logOutputResultMapper;
    }


    public int testMultiThread() {
        List<LogOutputResult> logOutputResults = getTestData();
        List<List<LogOutputResult>> lists = ConvertHandler.splitList(logOutputResults, 100);
        CountDownLatch countDownLatch = new CountDownLatch(lists.size());


        for (List<LogOutputResult> listSub : lists) {
            asyncService.executeAsync(listSub, logOutputResultMapper, countDownLatch);
        }


        try {
            countDownLatch.await();
        } catch (Exception e) {
            log.error("多線程插入異常: " + e.getMessage());
        }


        return logOutputResults.size();
    }


    private List<LogOutputResult> getTestData() {
        return ConvertHandler.generateTestData(3000000);
    }
}

工具類 ConvertHandler

package com.icoderoad.utils;


import com.icoderoad.model.LogOutputResult;


import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;


public class ConvertHandler {
    public static <T> List<List<T>> splitList(List<T> list, int size) {
        List<List<T>> parts = new ArrayList<>();
        for (int i = 0; i < list.size(); i += size) {
            parts.add(new ArrayList<>(list.subList(i, Math.min(list.size(), i + size))));
        }
        return parts;
    }


    public static List<LogOutputResult> generateTestData(int count) {
        return IntStream.range(0, count)
                .mapToObj(i -> new LogOutputResult((long) i, "TestLog " + i))
                .collect(Collectors.toList());
    }
}

數據訪問層 LogOutputResultMapper

package com.icoderoad.mapper;


import com.icoderoad.model.LogOutputResult;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;


@Mapper
public interface LogOutputResultMapper {
    @Insert("INSERT INTO log_output_result (id, message) VALUES (#{id}, #{message})")
    void addLogOutputResultBatch(List<LogOutputResult> logOutputResults);
}

測試結果

  • 單線程 
    插入 300萬 數據,耗時 5.75分鐘
  • 30個線程 
    并發插入 300萬 數據,耗時 1.67分鐘,效率提升 3.4倍
  • 數據完整性檢查無誤,無重復數據。

結論

在高并發、大數據量插入的場景下,傳統的 單線程批量插入 方式已經無法滿足性能需求。通過 Spring Boot 3.4 + ThreadPoolTaskExecutor,我們可以充分利用 多線程并發處理,顯著提升數據庫寫入性能。在本次實驗中,我們成功地將 300 萬數據的插入時間 從 8.62 分鐘縮短到 2.50 分鐘多線程(30 線程)耗時約:2.50 分鐘,單線程耗時約:8.62 分鐘。

此外,我們通過 SQL 語句檢查 數據完整性,確保所有數據均成功寫入且無重復問題。由此可見,采用 ThreadPoolTaskExecutor 進行多線程優化 是提升大數據量插入效率的有效方案,適用于 日志存儲、批量數據導入、業務數據初始化 等場景。

未來,我們可以進一步優化方案,例如:

  • 動態調整線程池大小,以適應不同負載的插入任務。
  • 異步批量提交事務,減少數據庫鎖競爭,提高吞吐量。
  • 結合 Kafka / RabbitMQ 進行異步解耦,進一步優化數據處理架構。

總的來說,合理使用 Spring 線程池技術,可以大幅度提升應用的性能,優化數據處理的效率,為企業級系統帶來顯著的收益!


責任編輯:武曉燕 來源: 路條編程
相關推薦

2024-07-31 09:56:20

2025-03-31 01:22:00

2020-11-23 10:50:27

MySQLSQL數據庫

2013-09-22 10:25:23

MySQLSQL性能優化

2013-04-01 15:03:58

Android開發Android批量插入

2025-03-03 08:00:00

SpringBootEasyExcel數據導出

2024-12-03 10:46:48

Spring優化開發

2025-05-28 05:10:00

策略Spring性能

2025-06-24 08:15:00

R edis線程數據庫

2018-08-09 08:59:56

數據庫MySQL性能優化

2025-03-13 00:25:00

SpringJava瀏覽器

2025-04-29 07:44:26

配置校驗機制

2025-04-27 01:55:44

SpringConfigData配置

2021-04-08 10:55:53

MySQL數據庫代碼

2024-08-05 09:51:00

2025-05-12 00:00:00

2012-11-23 10:00:55

SQL性能測試

2025-03-27 08:10:19

Spring開發架構

2025-05-20 09:31:19

2011-08-04 18:00:47

SQLite數據庫批量數據
點贊
收藏

51CTO技術棧公眾號

亚洲日本无吗高清不卡| 久久久精品影院| 欧美一级欧美一级| 天堂中文字幕在线| 国产欧美在线| 国产一区二区精品丝袜| 国产精品久久久久久9999| 国产黄色在线网站| 成人午夜在线免费| 国产成人激情小视频| 紧身裙女教师波多野结衣| 久久影视三级福利片| 欧美无砖砖区免费| 青青视频免费在线观看| 男人av在线| 国产黄色精品视频| 国产精品第七影院| 丰满少妇高潮久久三区| 亚洲免费专区| 日韩欧美一区二区不卡| 成人性做爰aaa片免费看不忠| 伊人222成人综合网| 91在线播放网址| 91精品免费视频| 六月丁香婷婷综合| 亚洲精品tv久久久久久久久久| 亚洲国产精品中文| 一级黄色免费毛片| 日韩一区二区三区免费视频| 亚洲电影激情视频网站| 一区二区三区不卡在线| 深夜福利在线看| 国产揄拍国内精品对白| 国产精品久久久久久久久| 国产午夜久久久| 中文字幕一区二区三区欧美日韩| 亚洲天堂av综合网| 亚洲中文字幕一区| 日本一区二区三区视频在线看 | 精品国产一区二区三区久久影院| av无码精品一区二区三区| gogo高清午夜人体在线| 亚洲三级电影全部在线观看高清| 日本一区免费看| 香蕉视频成人在线| 国产99一区视频免费| 国产三级精品网站| 最近中文字幕在线观看| 亚洲尤物精选| 57pao国产成人免费| 久久在线视频精品| 综合亚洲视频| 免费99精品国产自在在线| www.99re6| 色婷婷亚洲mv天堂mv在影片| 国产亚洲美女精品久久久| 五十路六十路七十路熟婆| 日韩精品一级| 日韩精品一区二区三区老鸭窝| 亚洲热在线视频| 四虎国产精品成人免费影视| 欧美人与禽zozo性伦| 在线黄色免费观看| 欧美午夜三级| 91精品国产综合久久福利| 超碰人人草人人| 亚洲高清影院| 日韩欧美美女一区二区三区| 中文字幕制服丝袜| 成功精品影院| 精品爽片免费看久久| 国产精品一区二区入口九绯色| 亚洲色图丝袜| 中文字幕在线国产精品| 亚洲少妇xxx| 午夜日韩视频| 97精品国产97久久久久久春色| 1级黄色大片儿| 性高湖久久久久久久久| 国产精品露脸自拍| 国产日韩一级片| 成人手机电影网| 欧美高清性xxxxhdvideosex| 在线视频婷婷| 一区二区三区精品视频| 1024av视频| 久久精品资源| 欧美一区二区三区影视| 国产不卡一二三| 成人羞羞动漫| 色综合久久88色综合天天看泰| 日韩欧美国产亚洲| 日本成人在线不卡视频| 成人h视频在线观看播放| 亚洲国产精品久久久久久6q| 久久久久亚洲蜜桃| 在线视频亚洲自拍| 日韩av一卡| 欧美狂野另类xxxxoooo| 日批在线观看视频| 欧美wwwww| 2019中文字幕全在线观看| 懂色av蜜臀av粉嫩av喷吹| 国产福利一区二区| 日韩精品一线二线三线| 欧美伦理免费在线| 欧美亚洲禁片免费| 人妻av一区二区| 俺要去色综合狠狠| 亚洲3p在线观看| 91av久久久| 97久久精品人人爽人人爽蜜臀| 亚洲一区二区三区乱码| 爱搞国产精品| 欧美性一级生活| 日韩av手机在线播放| 久久精品99久久无色码中文字幕| 欧美激情国产高清| 国产又粗又黄又爽视频| 久久久久久久久久看片| 久久香蕉视频网站| 国产福利91精品一区二区| 精品视频一区在线视频| 麻豆一区二区三区精品视频| 老司机免费视频一区二区三区| 久久精品国产一区二区三区不卡| 在线欧美三级| 欧美精选在线播放| 成人在线一级片| 一本色道久久综合亚洲精品高清| 91亚洲精品久久久| av大片在线观看| 日韩欧美在线视频| 亚洲精品乱码久久久久久蜜桃图片| 夜间精品视频| 成人做爰www免费看视频网站| www.黄在线观看| 色婷婷精品久久二区二区蜜臀av| 男女一区二区三区| 亚洲成人在线| 成人精品一二区| av网站免费在线观看| 欧美老肥妇做.爰bbww| 久久婷婷五月综合| 日韩精品一级中文字幕精品视频免费观看 | 欧美精品七区| 免费成人在线电影| 日韩av在线最新| 日韩福利片在线观看| 成人午夜碰碰视频| 国产在线播放观看| 成人春色在线观看免费网站| 欧美高跟鞋交xxxxxhd| 国产绳艺sm调教室论坛| 亚洲少妇屁股交4| 成人av毛片在线观看| 小处雏高清一区二区三区| 成人国产精品免费视频| 日本成人网址| 91精品免费观看| 成年人午夜剧场| 国产精品中文字幕一区二区三区| 免费观看国产视频在线| 日韩精品视频在线看| 欧美国产日韩二区| 日批视频免费播放| 欧美色另类天堂2015| 日本少妇xxxx| 视频一区二区三区在线| 日韩不卡av| 四虎国产精品成人免费影视| 欧美成人激情在线| 手机看片一区二区| 欧美性猛xxx| 久久午夜福利电影| 国内成人精品2018免费看| 992tv快乐视频| 久久av国产紧身裤| 国产精品99一区| 欧美成人三区| 精品国产乱码久久久久久久久| 日本中文字幕在线免费观看| 久久久久成人黄色影片| www午夜视频| 午夜亚洲福利| 老牛影视免费一区二区| 日韩欧美一区二区三区在线观看 | 国产黄色录像视频| 国产一区二区影院| 北条麻妃在线视频观看| 日韩中文在线电影| 波多野结衣久草一区| 精品国产乱码久久久久久免费 | 欧美激情久久久久久久| 美女视频一区二区三区| 欧美a级黄色大片| 久久资源综合| 国产精品视频免费在线观看| 欧美寡妇性猛交xxx免费| 日韩激情视频在线播放| 色婷婷久久综合中文久久蜜桃av| 又紧又大又爽精品一区二区| 成年人在线观看av| 国产麻豆午夜三级精品| 欧美污视频网站| 天天射天天综合网| 精品久久精品久久| 精品女同一区二区三区在线观看| 久久99亚洲热视| 国产youjizz在线| 欧美www视频| 在线播放亚洲精品| 精品日韩美女的视频高清| 很污很黄的网站| 94色蜜桃网一区二区三区| 欧洲美女亚洲激情| 日产国产欧美视频一区精品| 国产制服91一区二区三区制服| 欧美人与牛zoz0性行为| 99热在线播放| 亚洲ww精品| 国产精品九九久久久久久久| 麻豆国产在线| 欧美大片大片在线播放| 91精品国产91久久久久游泳池 | 欧美激情1区2区| 日本一区不卡| 九九热播视频在线精品6| 91青草视频久久| 成人黄页网站视频| 欧美在线观看网站| gogo久久| 欧美黄色免费网站| 国产丝袜在线| 日韩一区二区av| а天堂8中文最新版在线官网| 亚洲精品电影久久久| 成人午夜免费福利| 91精品国产高清一区二区三区 | 免费的国产精品| 中文字幕乱码人妻综合二区三区| 亚洲一本视频| av影院在线播放| 夜间精品视频| 国产在线无码精品| 亚洲婷婷免费| 日本天堂免费a| 中文字幕一区二区三区久久网站| 青少年xxxxx性开放hg| 日本不卡二三区| 亚洲电影一二三区| 日韩电影在线视频| 中文字幕欧美人与畜| 日韩高清欧美| 亚洲一区二区免费视频软件合集| 日本在线电影一区二区三区| 午夜精品一区二区在线观看| 欧美日韩中文一区二区| 色噜噜狠狠一区二区三区| 精品国产网站| 亚洲春色在线视频| 99re66热这里只有精品8| 天堂v在线视频| 欧美高清一区| 日韩美女爱爱视频| 国产日产高清欧美一区二区三区| 免费成人午夜视频| 久久久久久网| 亚洲不卡视频在线| 久久99精品国产麻豆婷婷洗澡| 99国产精品久久久久久| 国产一区二区按摩在线观看| 国产精久久久久| 99精品欧美一区二区三区小说| 亚洲久久久久久| 久久久精品国产免大香伊| 国产调教在线观看| 一区二区三区成人在线视频| 日韩欧美不卡视频| 一本到不卡精品视频在线观看| 亚洲综合成人av| 91精品国产欧美一区二区成人| xxxwww在线观看| 亚洲男人天堂古典| 久久日韩视频| 久久久久久中文字幕| 男人皇宫亚洲男人2020| 国产在线视频欧美| 国产色噜噜噜91在线精品| 欧美日韩一区在线观看视频| 97精品视频| 黄色大片中文字幕| 奇米综合一区二区三区精品视频| 污免费在线观看| 久久亚洲捆绑美女| 亚洲精品一区二区三区在线播放| 亚洲一区二区三区四区不卡| 欧美一级淫片免费视频黄| 欧美一区二区视频在线观看2022| 搡老岳熟女国产熟妇| 在线视频日韩精品| 国产三线在线| 国产伦精品免费视频| 国产成人夜色高潮福利影视| 色乱码一区二区三在线看| 黄色成人在线网址| 波多野结衣天堂| 成人av资源站| 欧美a级片免费看| 色综合久久久久网| www.久久久久久| 正在播放国产一区| 免费成人在线电影| 91久久国产综合久久蜜月精品| 欧美日韩播放| 拔插拔插海外华人免费| 久草在线在线精品观看| 中文字字幕码一二三区| 亚洲综合在线观看视频| 亚洲午夜在线播放| 日韩精品免费在线| 欧美另类tv| 亚洲一区二区中文字幕| sdde在线播放一区二区| 日本午夜激情视频| 国产激情精品久久久第一区二区 | 亚洲一级二级三级| 夜夜躁很很躁日日躁麻豆| 亚洲欧美视频在线| 99在线视频影院| 亚洲伊人久久大香线蕉av| 成人av二区| 99视频在线免费| 久久一区二区三区四区| 日韩av在线天堂| 精品国产乱码久久久久久牛牛| av网址在线看| 国产精品丝袜视频| 欧美视频免费| 日韩福利视频在线| 久久无码av三级| 黄瓜视频在线免费观看| 亚洲精品动漫久久久久| av小说在线播放| 国产日韩久久| 日韩香蕉视频| 日韩www视频| 天天综合天天做天天综合| 国产综合视频在线| 久久久噜噜噜久久| 国产精品超碰| 欧美亚洲日本一区二区三区| 成人久久视频在线观看| 国产乡下妇女做爰毛片| 亚洲国产成人久久综合| 爱啪视频在线观看视频免费| 国内精品**久久毛片app| 亚洲经典在线| 国产艳俗歌舞表演hd| 福利一区福利二区微拍刺激| 深夜福利免费在线观看| 国产脚交av在线一区二区| 欧美色图在线播放| 亚洲精品第三页| 一区二区三区四区视频精品免费| 亚洲av无码片一区二区三区 | 625成人欧美午夜电影| 欧美12av| 奇米精品一区二区三区在线观看| 中文字幕有码在线播放| 欧美日韩成人在线| 直接在线观看的三级网址| 国产激情美女久久久久久吹潮| 日韩午夜免费| 伊人影院综合网| 欧美一区二区播放| 99爱在线观看| 日韩精品伦理第一区| 国产一区二区电影| 欧美精品二区三区| 中文国产亚洲喷潮| 日韩中文字幕| 一本大道熟女人妻中文字幕在线| 国产区在线观看成人精品| 国产剧情久久久| 97视频色精品| 日韩免费视频| 精品国产一二区| 欧美性猛交xxxx富婆弯腰| 视频免费一区| 国产精品日韩欧美一区二区三区| 丝袜美腿高跟呻吟高潮一区| 我要看一级黄色录像| 日韩av网址在线| 玖玖精品在线| 国产h视频在线播放| 亚洲三级在线观看| 全部免费毛片在线播放网站| 成人免费视频在线观看超级碰| 99国产成+人+综合+亚洲欧美|