EasyExcel批量导入

452 阅读1分钟
/**
* Excel数据导入,分段导入,最大3千个保存一次
* 3千一次默认推荐使用saveBatch用做保存,是否开启事务处理
*
* @param inputStream 文件流
* @param cls         文字的Class
* @param service     保存的service
* @param <T>         入参的值
*/
public static <T> void importExcel(InputStream inputStream, Class<T> cls, Consumer<List<T>> service) {
   EasyExcel.read(inputStream, cls, new AnalysisEventListener() {
       private static final int BATCH_COUNT = 3000;
       List list = new ArrayList();
       
       @Override
       public void invoke(Object data, AnalysisContext context) {
           list.add(data);
           if (list.size() >= BATCH_COUNT) {
               service.accept(list);
               list.clear();
           }
       }
       
       @Async
       @Override
       public void doAfterAllAnalysed(AnalysisContext context) {
           service.accept(list);
       }
   }).sheet().doRead();
}