IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 批量插入导致数据库连接异常java.sql.SQLTransientConnectionException -> 正文阅读

[大数据]批量插入导致数据库连接异常java.sql.SQLTransientConnectionException

1,背景:
这是一个解析Txt 保存更新内容接口

 /**
     * analysis txt,insert every line content but except first line
     */
    @PostMapping("txt")
    @Transactional(rollbackFor = Exception.class)
    @ApiOperation(value = "解析接口")
    @ApiImplicitParams({
            @ApiImplicitParam(name="dispatchBid",dataType="Long",required=true,value="调度任务Bid",defaultValue="0"),
            @ApiImplicitParam(name="executionBid",dataType="Long",required=true,value="执行任务bid",defaultValue="0")
    })
    public InvokeResultUtil<Object> analysisTxt(@RequestBody MultipartFile multipartFile,
                                        @RequestParam("dispatchBid") Long dispatchBid,
                                        @RequestParam("executionBid") Long executionBid,
                                        @RequestParam("sourceType") Integer sourceType

    ) {
        try {
            log.info("analysisTxt 入参 MultipartFile:{},dispatchBid:{},executionBid:{},", multipartFile, dispatchBid, executionBid);
            if (multipartFile.isEmpty() || judgeFormat(arr, multipartFile)) {
                return InvokeResultUtil.failure(BizStatusCodeEnum.MISSING_PARAMS.getCode(), "上传文件为空或文件格式不匹配");
            }

            MsDispatchTask task = taskService.getMsDispatchTaskByBid(dispatchBid);
            if (task == null)
                return InvokeResultUtil.failure(BizStatusCodeEnum.FAILED.getCode(),"未查询到调度任务");

            if (queryAnalysisList(multipartFile , sourceType)){
                return InvokeResultUtil.failure(BizStatusCodeEnum.FAILED.getCode(),"该名称的物料已经存在");
            }

            int i = ZERO;
            int y = ZERO;
            int nThreads = TEN;
            String lineTxt;
            Long mainBid = sequenceNumUtil.getNum("");

            List<MsAnalysisMaterial> list = new LinkedList<>();
            InputStreamReader read = new InputStreamReader(multipartFile.getInputStream(), ENCODING);
            BufferedReader br = new BufferedReader(read);
            while ((lineTxt = br.readLine()) != null) {
                if (i == ZERO) {
                    i++;
                    continue;
                }else if (StringUtils.isEmpty(lineTxt.trim())){
                    continue;
                }
                list.add(MsAnalysisMaterial.generateMsAnalysisMaterial(sequenceNumUtil.getNum(""),mainBid,sourceType,
                        dispatchBid, executionBid, i, task.getProjectId(), multipartFile.getOriginalFilename(), lineTxt));
                i++;
            }

            int size = list.size();
            ExecutorService executorService = Executors.newFixedThreadPool(nThreads + ONE);
            List<Future<Integer>> futureList = new ArrayList<>(nThreads);
            for (int x = 0; x < nThreads; x++) {
                final List<MsAnalysisMaterial> finalList = list.subList(size / nThreads * x, size / nThreads * (x + 1));
                Callable<Integer> task1 = () -> {
                    msAnalysisMaterialService.saveBatch(finalList);
                    return ONE;
                };
                y = y + finalList.size();
                futureList.add(executorService.submit(task1));
            }

            final List<MsAnalysisMaterial> finalList = list.subList(y, size);
            if (!CollectionUtils.isEmpty(finalList)){
                Callable<Integer> task2 = () -> {
                    msAnalysisMaterialService.saveBatch(finalList);
                    return ONE;
                };
                futureList.add(executorService.submit(task2));
            }

            executorService.shutdown();
            read.close();
            Integer integer = insertFailRecords(sourceType);
            msAnalysisMaterialMainService.save(MsAnalysisMaterialMain.generateMsAnalysisMaterialMain(mainBid,sourceType,
                    multipartFile.getOriginalFilename(), integer));
            return InvokeResultUtil.success("文件解析成功");
        } catch (Exception e) {
            log.error("读取文件内容出错", e);
            e.printStackTrace();
            return InvokeResultUtil.failure(BizStatusCodeEnum.ERROR_SAVE.getCode(), "读取文件内容异常");
        }
    }

数据库异常:

Caused by : java.sql.SQLTransientConnectionException: HikariPool-1 
Connection is not available, request timed out after 30000ms

修改后数据库配置:

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://xx.xx.xx.169:3306/yyyy?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useAffectedRows=true&serverTimezone=Asia/Shanghai
    username: adminV1
    password: ENC(AK7UALIt1/5wqk62OIYtw+1JJN2FgaLE)
    # Hikari 连接池配置
    hikari:
      # 连接池中维护的最小空闲连接数
      minimum-idle: 20
      # 空闲连接存活最大时间,默认600000(10分钟)
      idle-timeout: 1800000
      # 连接池最大连接数,默认是10
      maximum-pool-size: 80
      # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
      auto-commit: true
      # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
      max-lifetime: 1800000
      # 数据库连接超时时间,默认30秒,即30000
      connection-timeout: 60000
      #连接将被测试活动的最大时间量
      validation-timeout: 30000
      connection-test-query: SELECT 1
      connection-init-sql: SET NAMES utf8mb4
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:37:48  更:2022-03-24 00:38:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:53:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码