创建一个抽象类,以便继承次接口
package com.mm.fa.data.process.bigt.utils; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.core.JdbcTemplate; import javax.annotation.Resource; import java.util.ArrayList; import java.util.linkedList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @Slf4j @Data public abstract class BigDataInsert{ @Resource JdbcTemplate jdbcTemplate; int groupCount = 2000; int threadPoolCount = 5; // 创建一个固定大小的线程池 private ExecutorService service = null; public void insertBigData(List list, String sql) { // 创建线程池对象 service = Executors.newFixedThreadPool(threadPoolCount); // 将需保存集合分组 List > listList = new ArrayList<>(); if (list.size() > groupCount) { listList = fixedGrouping(list, groupCount); } else { listList.add(list); } //循环10次,每次十万数据,一共100万 for (int i = 0; i < listList.size(); i++) { int finalI = i; List
> finalListList = listList; // 多线程保存 service.execute(() -> { StringBuilder sb = new StringBuilder(); sb.append(sql); List
finalList = new linkedList<>(); StringBuilder spliceS = new StringBuilder(); finalListList.get(finalI).stream().forEach(item -> { spliceS.append("("); List resultList = pstmToSetValue(item); String join = String.join(",", resultList); spliceS.append(join).append(")"); finalList.add(spliceS.toString()); spliceS.setLength(0); }); String valueSql = String.join(",", finalList); sb.append(valueSql); try { this.jdbcTemplate.execute(sb.toString()); log.info("insert into data successfully..."); } catch (Exception e) { log.error("insert into data error...{}", e.getMessage()); } }); } service.shutdown(); } public static List > fixedGrouping(List
source, int n) { if (null == source || source.size() == 0 || n <= 0) { return null; } List > result = new ArrayList
>(); int remainder = source.size() % n; int size = (source.size() / n); for (int i = 0; i < size; i++) { List
subset = null; subset = source.subList(i * n, (i + 1) * n); result.add(subset); } if (remainder > 0) { List subset = null; subset = source.subList(size * n, size * n + remainder); result.add(subset); } return result; } public abstract List pstmToSetValue(T dto); }
Servcice接口 继承 抽象类
package com.mm.fa.data.api.service; import cn.hutool.core.collection.CollectionUtil; import com.mm.fa.common.Result; import com.mm.fa.data.process.bigt.utils.BigDataInsert; import com.mm.fa.ext.supplyChain.dto.ForecastSalesDTO; import com.mm.fa.ext.supplyChain.mapper.Supplier360DataMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.linkedList; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @Service @Slf4j public class SupplierSalesDataService extends BigDataInsert



