日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java多線程導入excel的方法

瀏覽:188日期:2022-05-22 10:35:05
一、首先是依賴

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.17</version> </dependency>二、導入實現類

package com.supcon.mare.tankinfo.util;import com.alibaba.excel.util.StringUtils;import com.supcon.mare.common.util.exception.InterfaceException;import com.supcon.mare.tankinfo.constant.Constants;import com.supcon.mare.tankinfo.entity.TankAreaEntity;import com.supcon.mare.tankinfo.entity.TankMovementEntity;import com.supcon.mare.tankinfo.repository.TankAreaRepository;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellType;import org.apache.poi.ss.usermodel.Sheet;import java.util.*;import java.util.stream.Collectors;/** * @author: zhaoxu * @description: */public class ExcelThreadUtil implements Runnable { Sheet sheet; Integer rowIndex; List<String> rowNames; Integer size = 0; TankAreaRepository tankAreaRepository; ReflectUtil reflectUtil; public volatile static List<TankMovementEntity> tankMovementEntities = new ArrayList<>(); public void setExcelThreadAttr(Sheet sheet, Integer rowIndex, List<String> rowNames, Integer size, TankAreaRepository tankAreaRepository, ReflectUtil reflectUtil) {this.sheet = sheet;this.rowIndex = rowIndex;this.rowNames = rowNames;this.size = size;this.tankAreaRepository = tankAreaRepository;this.reflectUtil = reflectUtil; } @Override public void run() {int index = 0;while (sheet.getRow(rowIndex) != null && index < size) { TankMovementEntity tankMovementEntity = new TankMovementEntity(); Integer cellIndex = 0; List<String> units = new ArrayList(); Iterator<Cell> cellIterator = sheet.getRow(rowIndex).cellIterator(); while (cellIterator.hasNext()) {Cell cell = cellIterator.next();cell.setCellType(CellType.STRING);String rowName = rowNames.get(cellIndex++);try { //解析標題 judgeToParse(tankMovementEntity, rowName, cell, units, sheet);} catch (Exception e) { throw new InterfaceException(3414, '第' + (cell.getRowIndex() + 1) + '行,' + (cell.getColumnIndex() + 1) + '列發生錯誤:' + cell.toString());} } Boolean hasValue = false; try {Map<String, Object> fieldsValue = reflectUtil.getFieldsValue(TankMovementEntity.class, tankMovementEntity);Iterator<String> fieldKey = fieldsValue.keySet().iterator();//如果所有屬性為空則不導入while (fieldKey.hasNext()) { String key = fieldKey.next(); Object value = fieldsValue.get(key); if (!'serialVersionUID'.equals(key) && !StringUtils.isEmpty(fieldsValue.get(key))) {hasValue = true;break; }}tankMovementEntity.setValid(1); } catch (IllegalAccessException e) {e.printStackTrace(); } rowIndex++; index++; if (!hasValue) {continue; } tankMovementEntity.setGmtCreate(Utils.getNowDate()); tankMovementEntity.setSupportAddPump(0); tankMovementEntity.setSupportDelPump(0); tankMovementEntity.setChangeTank(0); tankMovementEntity.setSupportUpdatePump(0); //解析單元號 if (units.size() > 1) {units.stream().forEach(unit -> { TankAreaEntity tankAreaEntity = tankAreaRepository.findByTankAreaCodeAndValid(unit, Constants.VALID_TRUE); if (tankAreaEntity == null && tankMovementEntity.getTankArea() == null) {tankAreaEntity = new TankAreaEntity();tankAreaEntity.setId(Long.valueOf(1));tankMovementEntity.setTankArea(tankAreaEntity); } List<String> unContainUnit = units.stream().filter(unit1 -> !unit1.equals(unit)).collect(Collectors.toList()); StringBuilder goalTankArea = new StringBuilder(); unContainUnit.stream().forEach(un -> goalTankArea.append(un + ',')); tankMovementEntity.setGoalTankArea(goalTankArea.substring(0, goalTankArea.lastIndexOf(','))); tankMovementEntity.setStrideTankarea(1);}); } else {TankAreaEntity tankAreaEntity = null;if (units.size() > 0) { tankAreaEntity = tankAreaRepository.findByTankAreaCodeAndValid(units.get(0), Constants.VALID_TRUE);}if (tankAreaEntity == null && tankMovementEntity.getTankArea() == null) { tankAreaEntity = new TankAreaEntity(); tankAreaEntity.setId(Long.valueOf(1));}tankMovementEntity.setTankArea(tankAreaEntity); } if (!StringUtils.isEmpty(tankMovementEntity.getGoalTankArea())) {tankMovementEntity.setStrideTankarea(1); } else {tankMovementEntity.setStrideTankarea(0); } synchronized (tankMovementEntities) {tankMovementEntities.add(tankMovementEntity); }} } public void judgeToParse(TankMovementEntity tankMovementEntity, String rowName, Cell cell, List<String> units, Sheet sheet) {String stringCellValue;if (Utils.isMergedRegion(sheet, cell.getRowIndex(), cell.getColumnIndex())) { stringCellValue = Utils.getMergedRegionValue(sheet, cell.getRowIndex(), cell.getColumnIndex()).replaceAll('n', ',');} else { stringCellValue = cell.getStringCellValue().replaceAll('n', ',');}if (StringUtils.isEmpty(stringCellValue)) { return;}//判斷是否需要進行轉換if (Constants.CONTINUITY.equals(stringCellValue)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, 0);} else if (Constants.BATCH.equals(stringCellValue)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, 1);} else if (Constants.YES.equals(stringCellValue)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, 1);} else if (Constants.NO.equals(stringCellValue)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, 0);} else if (Constants.PROVIDE.equals(stringCellValue)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, 1);} else if (Constants.UN_PROVIDE.equals(stringCellValue)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, 0);} else if (Constants.NA.equals(stringCellValue)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, null);} else if (Constants.SOURCE_DEVICE.equals(rowName) || Constants.PUMP_DEVICE.equals(rowName) || Constants.GOAL_DEVICE.equals(rowName) || Constants.VALVE_DEVICE.equals(rowName)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, stringCellValue);} else if ((Constants.TANK_AREA).equals(rowName)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, tankAreaRepository.findByTankAreaCodeAndValid(stringCellValue, Constants.VALID_TRUE));} else if ((Constants.SWITCH_TANK_SOURCE).equals(rowName)) { reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, '目的'.equals(stringCellValue) ? 1 : 0);} else if ((Constants.UNIT).equals(rowName)) { if (stringCellValue.contains(Constants.COMMA)) {String[] split = stringCellValue.split(',');units.addAll(Arrays.asList(split)); } else {units.add(stringCellValue); }} else { Class<?> aClass = null; try {//反射獲取字段類型String typeName = TankMovementEntity.class.getDeclaredField(rowName).getGenericType().getTypeName();aClass = Class.forName(typeName); } catch (Exception e) {System.out.println(('未找到屬性類型:' + rowName)); } if (aClass == Long.class) {reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, Long.valueOf(stringCellValue)); } else if (aClass == Integer.class || aClass == int.class) {if (Integer.valueOf(stringCellValue) > 1 && !rowName.equals(Constants.MAX_PUMP)) { throw new ClassCastException('解析錯誤');}reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, Integer.valueOf(stringCellValue)); } else {reflectUtil.setValue(TankMovementEntity.class, tankMovementEntity, rowName, stringCellValue); }} }}三、調用多線程

@Override@Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)public String importFromExcel(String fileString) throws IOException { Workbook workbook = null; File file = new File('D:Google下載' + fileString + '.xlsx'); InputStream is = new FileInputStream(file); if (file.getName().endsWith(Constants.XLSX)) {workbook = new XSSFWorkbook(is); } else if (file.getName().endsWith(Constants.XLS)) {workbook = new HSSFWorkbook(is); } Iterator<Sheet> sheetIterator = workbook.sheetIterator(); List<String> rowNames = new ArrayList<>(); while (sheetIterator.hasNext()) {Sheet sheet = sheetIterator.next();Iterator<Row> rowIterator = sheet.rowIterator();Integer rowIndex = 0;ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor((sheet.getLastRowNum() / readNumbers) + 1, (sheet.getLastRowNum() / readNumbers) + 2, 1000, TimeUnit.MILLISECONDS, new PriorityBlockingQueue<Runnable>(), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());while (rowIterator.hasNext()) { Row row = rowIterator.next(); //從第二行開始 if (rowIndex > 0) {Iterator<Cell> cellIterator = row.cellIterator();//第二行是標題if (rowIndex == 1) { //列遍歷 while (cellIterator.hasNext()) {Cell next = cellIterator.next();next.setCellType(CellType.STRING);String stringCellValue = next.getStringCellValue();rowNames.add(stringCellValue.replaceAll('n', '')); }} else { Cell cell = row.getCell(0); cell.setCellType(CellType.STRING); if (StringUtils.isEmpty(cell.getStringCellValue())) {break; } if ((rowIndex - 2) % readNumbers == 0) {ExcelThreadUtil excelThreadUtil = new ExcelThreadUtil();if ((sheet.getLastRowNum() - rowIndex + 1 < readNumbers * 2 && sheet.getLastRowNum() - rowIndex + 1 > readNumbers)) { Integer size = sheet.getLastRowNum() - rowIndex + 1; excelThreadUtil.setExcelThreadAttr(sheet, rowIndex, rowNames, size, tankAreaRepository, reflectUtil); Future<?> future = threadPoolExecutor.submit(excelThreadUtil); try {future.get(); } catch (Exception e) {ExcelThreadUtil.tankMovementEntities.clear();throw new InterfaceException(3414, e.getMessage()); } break;}excelThreadUtil.setExcelThreadAttr(sheet, rowIndex, rowNames, readNumbers, tankAreaRepository, reflectUtil);Future<?> future = threadPoolExecutor.submit(excelThreadUtil);try { future.get();} catch (Exception e) { ExcelThreadUtil.tankMovementEntities.clear(); throw new InterfaceException(3414, e.getMessage());} }} } rowIndex++;}threadStop(threadPoolExecutor); } return 'true';}

判斷線程是否都停止:

private void threadStop(ThreadPoolExecutor threadPoolExecutor) {while (true) { if (threadPoolExecutor.getActiveCount() == 0) {ExcelThreadUtil.tankMovementEntities.stream().forEach(tankMovement -> { tankMovement.setTaskDefineCode('move_' + String.valueOf((int) (Math.random() * (1600 - 1 + 1)) + 1) + System.currentTimeMillis()); String businessTypeName = tankMovement.getBusinessTypeCode(); EnumCodeEntity businessEnumEntity = enumCodeRepository.findByName(businessTypeName); tankMovement.setBusinessTypeCode(businessEnumEntity == null ? businessTypeName : businessEnumEntity.getTypeCode()); Integer random = (int) (Math.random() * (2 - 1 + 1)) + 1; tankMovement.setMaterialTypeCode(String.valueOf(random)); TankAreaEntity tankAreaEntity = new TankAreaEntity(); tankAreaEntity.setId(Long.valueOf((int) (Math.random() * (16 - 1 + 1)) + 1)); tankMovement.setTankArea(tankAreaEntity);});tankMovementRepository.saveAll(ExcelThreadUtil.tankMovementEntities);ExcelThreadUtil.tankMovementEntities.clear();break; }} }

到此這篇關于java多線程導入excel的方法的文章就介紹到這了,更多相關java多線程導入excel內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: excel
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
狠狠干综合网| 久久不见久久见中文字幕免费 | 日韩福利在线观看| 亚洲一区日本| 欧美日韩国产欧| 欧美综合二区| 日韩成人一级| 69堂免费精品视频在线播放| 欧美激情五月| 久久精品免费一区二区三区 | 日韩二区三区在线观看| 91国内精品| av中文字幕在线观看第一页| 999久久久免费精品国产| 伊人影院久久| 国产精品亚洲欧美日韩一区在线| 91在线成人| 国产在线观看www| 免费日韩精品中文字幕视频在线| 日韩精品一区二区三区av| 国产美女撒尿一区二区| 成人午夜国产| 蜜桃免费网站一区二区三区| 久久亚洲人体| 亚洲免费中文| 国产精品99一区二区三区| 亚洲一区国产一区| 国产suv精品一区| 视频一区二区三区中文字幕| 麻豆国产一区| 亚洲深深色噜噜狠狠爱网站| 国产乱论精品| 日韩视频不卡| 亚洲欧洲美洲av| 欧美日韩视频免费看| 激情综合网站| 精品视频一二| 综合激情网站| 亚洲精品成人| 在线手机中文字幕| 国产精品多人| 日本不卡一二三区黄网| 99热精品在线| 99视频精品视频高清免费| 久久精品国产亚洲一区二区三区| 亚洲另类av| 欧美亚洲精品在线| 国产66精品| 国产精品成久久久久| 精品国内亚洲2022精品成人| 日韩高清电影免费| 亚洲久久一区| 亚洲va久久| 免费在线观看不卡| 日本大胆欧美人术艺术动态| 天堂资源在线亚洲| 国产伦久视频在线观看| 毛片不卡一区二区| 精品一级视频| 中文字幕人成乱码在线观看 | 精品99久久| 久久亚洲资源中文字| 欧美在线精品一区| 亚洲精品影院在线观看| 亚洲视频国产| 日本不卡在线视频| 天堂va在线高清一区| 亚洲精品看片| 日韩av黄色在线| 欧美日韩黄网站| 国产精品网在线观看| 欧美激情麻豆| 高清av一区| 国产精品久久久久久久免费观看 | 四虎影视精品| 国产精品99免费看| 91久久视频| 日本一不卡视频| 免费日韩成人| 日韩成人高清| 亚洲免费高清| 91精品国产自产精品男人的天堂| 一区二区三区四区在线观看国产日韩 | 亚洲精品888| 亚洲精品乱码| 精品视频网站| 伊人影院久久| 日本成人手机在线| 国际精品欧美精品| 午夜久久久久| 国产欧美久久一区二区三区| 成人午夜亚洲| 99热精品在线观看| 国产高清日韩| 日韩黄色大片| 免费久久精品视频| 久久精品国产99国产| 久久国产亚洲精品| 欧美亚洲福利| 自拍日韩欧美| 欧美日本二区| 激情91久久| 久久精品国产免费| 欧美一级专区| 日韩大片在线| 欧美视频久久| 日韩视频免费| 欧美国产小视频| 国产丝袜一区| 亚洲无线一线二线三线区别av| 国产欧美日韩精品一区二区免费| 国产精品99一区二区| 免费在线亚洲| 日日摸夜夜添夜夜添国产精品| 久久激情婷婷| 精品久久国产一区| 国产精品激情| 91精品日本| 综合激情五月婷婷| 亚洲夜间福利| 国产理论在线| 丁香婷婷久久| 国产九一精品| 日本国产欧美| 欧美日韩国产传媒| 久久精品免费一区二区三区 | 日本成人在线一区| 亚洲人成网站在线在线观看| 狠狠操综合网| 激情综合在线| 久久精品播放| 免费不卡中文字幕在线| 群体交乱之放荡娇妻一区二区| 成人午夜网址| 国产精品精品国产一区二区| 欧美精品成人| 国产精品久久久免费| 国产精品视频首页| 久久男人av| 国产传媒在线观看| se01亚洲视频 | 国产精品美女久久久| 伊人久久成人| 亚洲精品系列| 国产精品亚洲一区二区在线观看| 国产精品三p一区二区| 精品三级国产| 999久久久91| 久久午夜精品| 国产日韩在线观看视频| 红杏一区二区三区| 国产主播一区| 亚洲资源在线| 精品一区二区三区中文字幕在线| 久久男人av资源站| 国产精品毛片在线| 国产精品一卡| 欧美一区二区三区激情视频| 国产亚洲精品自拍| 国产精品久久乐| 欧美日韩在线观看视频小说| 亚洲v天堂v手机在线| 国产精品中文字幕制服诱惑| 人在线成免费视频| 亚洲精品国产精品粉嫩| 福利视频一区| 伊人久久大香伊蕉在人线观看热v| 色狠狠一区二区三区| 日韩在线中文| 欧美日韩亚洲一区三区| 激情久久久久久久| 啪啪亚洲精品| 亚洲国产专区校园欧美| 国产精品网在线观看| 国产视频一区免费看| 国产一区二区三区不卡av| 亚洲开心激情| 日本少妇一区| 麻豆国产欧美一区二区三区| 日韩专区一卡二卡| 久久精品观看| 精品国产aⅴ| 欧美日韩伊人| 亚洲欧美专区| 亚洲在线电影| 999视频精品| 国产精品久久久久久久免费观看| 97成人超碰| 日韩精品第一| 91九色综合| 国产精品白丝一区二区三区| 国产调教一区二区三区| 国产毛片久久久| 日韩精品亚洲aⅴ在线影院| 免费精品视频| 综合国产在线| 国产精品一区亚洲| 国产亚洲精品精品国产亚洲综合| 91成人在线| 精品五月天堂|