easyexcel读文件入批量入es
创始人
2024-11-14 16:33:41
0

1. 封装实体类,并对应excel表中的列

@Data public class User {      private String md5;      private String id;      @ExcelProperty(value = "age")     private String age;     @ExcelProperty(value = "username")     private String name;   }

2. 批量入库

    private void insertBatchToES(List dataList, String indexName) {         try {             BulkProcessor bulkProcessor = BulkProcessor.builder(                     (request, bulkListener) -> elasticsearchClient.bulkAsync(request, RequestOptions.DEFAULT, bulkListener),                     new BulkProcessor.Listener() {                          @Override                         public void beforeBulk(long executionId, org.elasticsearch.action.bulk.BulkRequest request) {                             // 准备执行前的操作                         }                          @Override                         public void afterBulk(long executionId, org.elasticsearch.action.bulk.BulkRequest request, org.elasticsearch.action.bulk.BulkResponse response) {                             if (response != null) {                                 int insertedCount = request.numberOfActions(); // 获取请求中操作的数量,即插入的条数                                 log.info("批量插入 " + insertedCount + " 条数据成功");                             }                         }                          @Override                         public void afterBulk(long executionId, org.elasticsearch.action.bulk.BulkRequest request, Throwable failure) {                             log.info("批量插入 error");                         }                     })                     // 设置每1000个请求执行一次批处理                     .setBulkActions(500)                     .build();                for(User user : dataList) {                 String jsonString = convertToJson(user);                 IndexRequest indexRequest = new IndexRequest(indexName)                         .id(user.getId())                         .source(jsonString, XContentType.JSON);                 bulkProcessor.add(indexRequest);             }             bulkProcessor.awaitClose(10, TimeUnit.MINUTES);             bulkProcessor.close();          } catch (InterruptedException | JsonProcessingException e) {             e.printStackTrace();         }     } 

将对象转json工具类:

 public String convertToJson(user) throws JsonProcessingException {         String objStr = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero,                 SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.NotWriteDefaultValue);          return objStr;     }

3. 读指定文件excel , 封装List

public void importExcelToES(String excelFilePath, String indexName) {         try {             EasyExcel.read(excelFilePath, User.class, new AnalysisEventListener() {                 private List dataList = new ArrayList<>();                                  @Override                 public void invoke(UserFansExcel data, AnalysisContext analysisContext) {                     long id = generator.nextId();                     data.setId(String.valueOf(id));                                                            if (dataList.size() >= 500) {                         insertBatchToES(filteredList, indexName);                         dataList.clear();                     }                 }                  @Override                 public void doAfterAllAnalysed(AnalysisContext analysisContext) {                     if (!dataList.isEmpty()) {                         insertBatchToES(dataList, indexName);                     }                 }             }).sheet().doRead();         } catch (Exception e) {             e.printStackTrace();         }

3.1 读执行目录下的所有excel文件,这些文件的格式是一样的

public void readExcelFilesFromDirectory(String directoryPath) throws IOException {         List dataList = new ArrayList<>();         File dir = new File(directoryPath);         File[] files = dir.listFiles((d, name) -> name.endsWith(".xlsx"));          if (files != null) {             for (File file : files) {                 System.out.println(file.getName());                 try {                     String primaryUserId = file.getName().replace(".xlsx", "");                     try (FileInputStream fis = new FileInputStream(file)) {                         EasyExcel.read(fis, User.class, new AnalysisEventListener() {                               @Override                             public void invoke(User data, AnalysisContext context) {                                 data.setName(primaryUserId);                                                                 dataList.add(data);                             }                              @Override                             public void doAfterAllAnalysed(AnalysisContext analysisContext) {                              }                            }).sheet().doRead();                     }                 } catch (Exception e) {                     e.printStackTrace();                 }             if(dataList.size() >0){               //这里可以插入数据库                dataList.clear();            }              }         }              }

相关内容

热门资讯

重大通报!渝都手机麻将有挂吗(... 重大通报!渝都手机麻将有挂吗(辅助)切实真的有挂(2021已更新)(哔哩哔哩);1、渝都手机麻将有挂...
九分钟黑科技!雀神微信小程序辅... 九分钟黑科技!雀神微信小程序辅助,吉祥填大坑辅助透视(原来是有挂)1、实时吉祥填大坑辅助透视开挂更新...
一分钟快速了解!最新皮皮跑胡子... 一分钟快速了解!最新皮皮跑胡子有没有外 挂(透明挂)透明挂透视辅助脚本(2021已更新)(哔哩哔哩)...
1分钟实锤!微乐家乡麻将怎么让... 1分钟实锤!微乐家乡麻将怎么让系统发好牌,同城游510k果然真的有挂,2025新版教程(有挂工具)1...
一分钟了解!三哥玩摆头注辅助(... 一分钟了解!三哥玩摆头注辅助(透明挂)本来存在有挂(2025已更新)(哔哩哔哩)在进入三哥玩摆头注辅...
教学盘点!微乐斗地主必赢神器(... 教学盘点!微乐斗地主必赢神器(辅助挂)外挂透明挂辅助软件(2025已更新)(哔哩哔哩)1、起透看视 ...
十分钟解说!钱塘十三水黑科技,... 十分钟解说!钱塘十三水黑科技,乐乐安徽麻将到底有没有挂(本来有挂);1、乐乐安徽麻将到底有没有挂ai...
2分钟发现!天天福建十三张辅助... 2分钟发现!天天福建十三张辅助,娱网皮球填大坑真是真的有挂,曝光教程(有挂方法);1、这是跨平台的天...
推荐十款!都莱大菠萝辅助器(透... 推荐十款!都莱大菠萝辅助器(透明挂)确实真的有挂(2023已更新)(哔哩哔哩)1、很好的工具软件,可...
热点推荐!!安徽乐乐麻将有挂吗... 热点推荐!!安徽乐乐麻将有挂吗(透视)透明挂透视辅助插件(2021已更新)(哔哩哔哩)1、全新机制【...