精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美日本亚洲视频| 51午夜精品国产| 久久青青草原一区二区| 亚洲天堂男人av| 国产精品最新| 制服丝袜激情欧洲亚洲| 日韩精品一区二区在线视频| 成人乱码一区二区三区 | 亚洲精品在线观看免费| 国产手机av在线| 99在线精品视频在线观看| 亚洲天堂男人的天堂| 亚洲精品乱码久久久久久动漫| 天堂8中文在线| 久久综合九色综合久久久精品综合| 国产精品露脸av在线| 天天看片中文字幕| 色愁久久久久久| 555www色欧美视频| 精品久久久久av| 日韩电影免费观看| 国产日韩视频一区二区三区| 97中文在线| 极品国产91在线网站| 欧美黄色免费| 一区二区三区四区视频| 亚洲一级Av无码毛片久久精品| 色老太综合网| 亚洲成人久久影院| 在线精品亚洲一区二区| 欧美女子与性| 福利一区福利二区| 国产日韩亚洲欧美| 97久久久久久久| 国产精品magnet| 一区二区三区回区在观看免费视频| 黑人无套内谢中国美女| 99只有精品| 大荫蒂欧美视频另类xxxx| 黄色录像特级片| 免费网站看v片在线a| 久久久午夜电影| 国产精品久久亚洲7777| 一级做a爱片久久毛片| 香蕉精品999视频一区二区| 欧美国产日韩xxxxx| 黄色录像免费观看| 国产亚洲欧美日韩在线观看一区二区 | 日本高清不卡码| 亚洲激情影院| 久久久久久久久国产精品| 777777国产7777777| 日韩欧美自拍| 国产亚洲精品美女| 亚洲精品国产91| 亚洲制服欧美另类| 日韩电影免费观看中文字幕| av漫画在线观看| 亚洲一区二区免费在线观看| 日韩欧美在线网站| 四虎成人在线播放| 精品一区二区三区中文字幕视频| 欧美浪妇xxxx高跟鞋交| www.com操| 老司机精品视频网| 欧美最猛黑人xxxxx猛交| 老司机午夜av| 69堂免费精品视频在线播放| 欧美自拍丝袜亚洲| 久久这里只精品| 欧美高清影院| 欧美一级二级在线观看| 国产探花在线观看视频| 成人51免费| 欧美zozozo| 少妇激情一区二区三区视频| 欧美一区 二区| 亚洲欧美精品一区| 亚欧精品视频一区二区三区| 97精品视频| 欧美成在线视频| 国产一级一片免费播放放a| 悠悠资源网久久精品| 91成人在线视频| 日韩av免费播放| 精品一区二区三区的国产在线播放| 成人性生交xxxxx网站| 亚洲av无码乱码国产麻豆| 成人精品一区二区三区四区| 久久久久高清| 成年人在线观看| 亚洲色图另类专区| 国产乱淫av片杨贵妃| 自拍偷拍欧美视频| 欧美视频三区在线播放| 久久综合在线观看| 欧美午夜18电影| 色婷婷综合久久久久| 精品欧美一区二区久久久久| 亚洲一区二区三区高清不卡| 国产精品国产三级国产aⅴ9色| 国产黄a三级三级看三级| www.66久久| 午夜欧美性电影| 久久www人成免费看片中文| 色婷婷亚洲综合| 成人免费播放视频| 久久av中文| 久久99国产精品自在自在app| 黄色大片网站在线观看| 久久97超碰国产精品超碰| 国产欧美亚洲日本| av在线免费一区| 精品国产成人av| 日本美女视频一区| 蜜桃精品wwwmitaows| 欧美精品免费播放| 中文字幕资源网| va亚洲va日韩不卡在线观看| 国产一级黄色录像片| 超碰一区二区| 亚洲福利视频网| 日韩精品一区二区三区在线视频| 亚洲综合电影一区二区三区| 91成人在线看| 婷婷在线视频| 日韩欧美在线字幕| 最新版天堂资源在线| 亚洲国产一区二区在线观看 | 成人妖精视频yjsp地址| 亚洲一区二区精品在线观看| 成人av三级| 亚洲成色777777女色窝| 精品人妻伦九区久久aaa片| 日韩激情视频在线观看| 精品国产乱码久久久久久久软件| av网站在线看| 欧美猛男gaygay网站| 熟女少妇内射日韩亚洲| 国产日韩一区| 国语精品中文字幕| 黄视频在线免费看| 日韩一区二区三区免费观看| 国产天堂av在线| 久久91精品国产91久久小草| 性欧美精品一区二区三区在线播放| 日韩在线伦理| 亚洲精品乱码久久久久久按摩观| 久久久久香蕉视频| 国产乱对白刺激视频不卡| 伊人情人网综合| 色综合视频一区二区三区44| 深夜精品寂寞黄网站在线观看| 日本一二三区不卡| a在线播放不卡| 成熟丰满熟妇高潮xxxxx视频| 国产精品一线| 777午夜精品福利在线观看| 你懂的网站在线| 亚洲成国产人片在线观看| 亚洲欧美综合视频| 国产综合激情| 国产综合色一区二区三区| √8天堂资源地址中文在线| 精品国产一区二区亚洲人成毛片 | 性感美女一区二区三区| 欧美午夜久久| 精品伊人久久大线蕉色首页| 新版的欧美在线视频| 亚洲免费高清视频| 99re国产在线| 国产精品成人免费在线| aaaaaaaa毛片| 亚洲黄色天堂| 青青草成人激情在线| 成人影院在线免费观看| 日韩在线视频一区| 99久久精品免费看国产交换| 一区二区三区高清| 久久亚洲AV成人无码国产野外| 欧美中文日韩| 一区二区在线中文字幕电影视频| 国产精品3区| 97免费视频在线| 国产有码在线| 51午夜精品国产| 日韩免费观看一区二区| 国产日韩精品久久久| 在线a免费观看| 宅男噜噜噜66国产日韩在线观看| 日韩精品一区二区三区外面 | 国产精品yjizz| 伊人久久精品一区二区三区| 久久精品中文字幕电影| 免费观看黄一级视频| 欧美丝袜第一区| 国产三级精品三级观看| 成人av资源在线观看| 国产免费视频传媒| 午夜日本精品| 视频一区二区在线观看| 日本少妇精品亚洲第一区| 欧美一级黑人aaaaaaa做受| 在线观看黄av| 亚洲国产欧美一区二区丝袜黑人 | 日韩精品中文字幕一区二区三区 | 欧美日韩国产三级| 国产在线视频你懂的| 日本一区二区三区在线不卡| 亚洲av无码久久精品色欲| 久久亚洲美女| 日本免费a视频| 欧美a级片视频| 精品乱码一区二区三区| 麻豆国产一区二区三区四区| 国产不卡av在线| 超黄网站在线观看| 久久久国产一区二区| 国产精品视频二区三区| 亚洲国产精品福利| 99国产精品一区二区三区| 欧美性色综合网| 探花视频在线观看| 亚洲一区精品在线| 青青操在线视频观看| 久久久精品黄色| 国产又粗又长又爽| 国产精品1区2区3区| 日韩不卡一二三| 久久性色av| 欧美日韩亚洲一| 亚洲日产国产精品| 精品久久久无码人妻字幂| 日本一区二区免费高清| 欧美精品七区| 伊人成综合网yiren22| 国产伦精品一区二区三区视频黑人| 91麻豆精品国产综合久久久 | 成人在线日韩| 国产日韩欧美日韩| 电影亚洲一区| 国产精品久久久久久久电影| 日本高清不卡一区二区三区视频| 国产91精品黑色丝袜高跟鞋| 七七成人影院| 色综合久久88| 牛牛电影国产一区二区| 精品国产一区av| 国产在线1区| 久久久国产成人精品| 国产激情在线观看| 超碰91人人草人人干| 九义人在线观看完整免费版电视剧| 伊人一区二区三区久久精品| 免费在线视频一级不卡| 亚洲跨种族黑人xxx| 丝袜+亚洲+另类+欧美+变态| 日韩国产欧美区| 欧美日韩影视 | 黄色在线播放网站| 色噜噜国产精品视频一区二区| 亚洲乱亚洲乱妇| 久久精品青青大伊人av| av网站在线免费| 久久久久久久久亚洲| yellow在线观看网址| 日韩av日韩在线观看| 国产一区二区精品调教| 成人网在线免费观看| 成人h动漫免费观看网站| 精品无人区一区二区三区| 欧美人与牛zoz0性行为| 宅男一区二区三区| 欧美日韩亚洲一区| 欧美精品一区免费| 日本色综合中文字幕| 中文字幕一区久久| 成人黄色大片在线观看| 国产免费看av| 国产精品区一区二区三| 性欧美videos| 亚洲成av人片在线观看无码| 国产精品久久久免费视频| 欧美性色黄大片| 国产精品欧美亚洲| 精品国产欧美一区二区| 东凛在线观看| 久久韩剧网电视剧| 国产蜜臀一区二区打屁股调教| 欧美有码在线视频| 国产成人精品一区二三区在线观看 | 国产成人一区二区| 亚洲午夜国产成人| 国产精品国产三级国产专区53 | 国产在线视频欧美一区| 日韩美女免费线视频| 91精品国产66| 国产这里只有精品| 欧美顶级毛片在线播放| 性欧美大战久久久久久久免费观看| 999久久久免费精品国产| 国产精品久久久久久久久电影网| 日韩亚洲精品在线| 丰满少妇在线观看| 国产一区欧美日韩| 美国黄色一级毛片| 中文字幕一区二区三中文字幕 | 亚洲一区二区高清| 男人操女人的视频网站| 第一福利永久视频精品| 中文字幕在线观看欧美| 精品国产一区二区三区av性色| 黄色av免费在线看| 久热精品视频在线观看一区| www.综合网.com| 国产第一区电影| 给我免费播放日韩视频| 久久国产精品免费一区| 日本一区二区在线看| 日韩精品在线观看av| 日韩成人一区二区| www男人天堂| 国产精品久久久久影院老司| 精品在线视频观看| 欧美四级电影网| 青青免费在线视频| 欧美xxxx综合视频| 校园春色亚洲色图| 国产精品久久久久久久免费大片 | 欧美性极品少妇| 黄色www视频| 久久久av一区| 精品国产欧美日韩一区二区三区| 精品国产免费久久久久久尖叫 | 久久99九九| 精品免费在线| 国产精品亚洲αv天堂无码| 国产成人在线视频网站| 日本aaa视频| 亚洲成人你懂的| www国产在线| 国产一区二区三区在线看| 国产99在线| 国产亚洲精品自在久久| 悠悠资源网久久精品| 超级砰砰砰97免费观看最新一期 | 欧美福利视频| 第四色婷婷基地| 中文字幕日本不卡| 日本黄色中文字幕| 亚洲电影在线看| 美女日批视频在线观看| 91丝袜脚交足在线播放| 婷婷激情综合| xxxx在线免费观看| 91一区二区在线| 久久久精品视频网站| 日韩av最新在线| 午夜激情在线播放| 国产一区喷水| 在线播放一区| 亚洲久久久久久| 天天av天天翘天天综合网色鬼国产| xxxx18国产| 欧美理论电影在线观看| 亚洲男男av| 国产高清免费在线| 韩日精品视频一区| 国模无码国产精品视频| 欧美高清一级片在线| 国产大学生校花援交在线播放 | 免费人成年激情视频在线观看| 91精品国产色综合久久不卡电影| 日本中文在线观看| 91久久国产综合久久91精品网站| 午夜国产一区二区| 欧美日韩久久婷婷| 亚洲欧洲一区二区在线播放| 懂色av蜜臀av粉嫩av喷吹| 国产一区二区三区视频免费| 国产一区二区三区四区五区3d| 中文字幕一区综合| 国产福利一区二区三区视频| 天天干天天干天天| 国产一区二区三区丝袜| 性欧美xxx69hd高清| 亚洲国产精品一区在线观看不卡 | 污污视频网站在线| 亚洲激情图片小说视频| 好男人在线视频www| 国产精品1234| 外国成人激情视频| 久久久久成人精品无码中文字幕| 五月婷婷激情综合网| 久久久久久青草| 成人黄色免费片| 亚洲免费高清| 国产一区在线观看免费| 日韩精品专区在线影院观看| 国产一线二线在线观看|