EasyExcel处理表头的缓存设置

在学习EasyExcel 时会发现针对使用类模型配置表头相关属性时,EasyExcel 会使用到缓存技术以提升表头的解析速度如下代码:
在这里插入图片描述
这些参数再何时设置的哪?
在这里插入图片描述

easyExcel 基础参数设置中会有这个参数filedCacheLocation 。默认采用的使用线程级别的缓存。
在这里插入图片描述
默认支持3种方式:

  • THREAD_LOCAL:数据缓存在线程级别,当前线程使用完成时清除数据
  • MEMORY :数据缓存在内存级别,只有当程序停止时才会清除数据
  • NONE :不适应缓存

场景分析:

  1. 前向同一个excel和同一个sheet中重复写入数据时,并且写入属性非常多时:
    如下有个用户信息:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {

  @ExcelProperty("用户名")
  private String username;
  @ExcelProperty("年龄")
  private String age;
  @ExcelProperty("attribute01")
  private String attribute01;
  @ExcelProperty("attribute02")
  private String attribute02;
  @ExcelProperty("attribute03")
  private String attribute03;
  @ExcelProperty("attribute04")
  private String attribute04;
  @ExcelProperty("attribute05")
  private String attribute05;
  @ExcelProperty("attribute06")
  private String attribute06;
  @ExcelProperty("attribute07")
  private String attribute07;
  @ExcelProperty("attribute08")
  private String attribute08;
  @ExcelProperty("attribute09")
  private String attribute09;
  @ExcelProperty("attribute10")
  private String attribute10;
  @ExcelProperty("attribute11")
  private String attribute11;
  @ExcelProperty("attribute12")
  private String attribute12;
  @ExcelProperty("attribute13")
  private String attribute13;
  @ExcelProperty("attribute14")
  private String attribute14;
  @ExcelProperty("attribute15")
  private String attribute15;
  @ExcelProperty("attribute16")
  private String attribute16;
  @ExcelProperty("attribute17")
  private String attribute17;
  @ExcelProperty("attribute18")
  private String attribute18;
  @ExcelProperty("attribute19")
  private String attribute19;
}

主程序:

  public void test01() {

    List<User> userList = new ArrayList<>();

    // 写入1000条数据
    for (int i = 0; i < 1000; i++) {
      userList.add(new User("lisi" + i, String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i),
          String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i),
          String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i),
          String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i),
          String.valueOf(i)));
    }
    ExcelWriterBuilder excelWriterBuilder = new ExcelWriterBuilder();
    excelWriterBuilder.file("F:\\excel\\a.xls");
    excelWriterBuilder.filedCacheLocation(CacheLocationEnum.NONE);


    long startTime01 = System.currentTimeMillis();
    ExcelWriterSheetBuilder excelWriterSheetBuilder01 = new ExcelWriterSheetBuilder(excelWriterBuilder.build());
    excelWriterSheetBuilder01.sheetName("test01");
    excelWriterSheetBuilder01.doWrite(userList);
    long endTime01 = System.currentTimeMillis();
    System.out.println("总耗时 = " + (endTime01 - startTime01) + "ms");

    long startTime02 = System.currentTimeMillis();
    ExcelWriterSheetBuilder excelWriterSheetBuilder002 = new ExcelWriterSheetBuilder(excelWriterBuilder.build());
    excelWriterSheetBuilder002.sheetName("test02");
    excelWriterSheetBuilder002.doWrite(userList);
    long endTime02 = System.currentTimeMillis();
    System.out.println("总耗时 = " + (endTime02 - startTime02) + "ms");

    long startTime03 = System.currentTimeMillis();
    ExcelWriterSheetBuilder excelWriterSheetBuilder03 = new ExcelWriterSheetBuilder(excelWriterBuilder.build());
    excelWriterSheetBuilder03.sheetName("test03");
    excelWriterSheetBuilder03.doWrite(userList);
    long endTime03 = System.currentTimeMillis();
    System.out.println("总耗时 = " + (endTime03 - startTime03) + "ms");
  }

采用NONE时调用3次耗时:

第一次:
总耗时 = 596ms
总耗时 = 83ms
总耗时 = 60ms
第二次:
总耗时 = 580ms
总耗时 = 100ms
总耗时 = 54ms
第三次:
总耗时 = 578ms
总耗时 = 91ms
总耗时 = 53ms

采用MEMORY时调用3次耗时:

第一次:
总耗时 = 490ms
总耗时 = 32ms
总耗时 = 24ms
第二次:
总耗时 = 467ms
总耗时 = 35ms
总耗时 = 22ms
第三次:
总耗时 = 470ms
总耗时 = 34ms
总耗时 = 22ms

采用THREAD_LOCAL时调用3次耗时:

第一次:
总耗时 = 468ms
总耗时 = 38ms
总耗时 = 23ms
第二次:
总耗时 = 460ms
总耗时 = 32ms
总耗时 = 22ms
第三次:
总耗时 = 460ms
总耗时 = 33ms
总耗时 = 24ms
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyExcel提供了多种设置表头的方式。以下是几种常用的设置表头的方法: 1. 使用注解:EasyExcel提供了注解方式来设置表头。您可以在实体类的字段上添加`@ExcelProperty`注解来定义表头名称和顺序。示例代码如下: ```java public class MyData { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; // 其他字段... } ``` 2. 使用动态表头:如果需要根据运行时的条件来动态设置表头,可以使用EasyExcel的动态表头功能。通过`com.alibaba.excel.write.builder.ExcelWriterBuilder`类的`head`方法可以设置动态表头。示例代码如下: ```java ExcelWriter excelWriter = EasyExcel.write(filePath).head(createDynamicHead()).build(); ``` 其中,`createDynamicHead()`方法根据实际需求生成动态表头的数据。 3. 使用自定义表头:如果需要更加灵活地设置表头,可以使用EasyExcel的自定义表头功能。通过`com.alibaba.excel.write.builder.ExcelWriterBuilder`类的`relativeHead`方法可以设置自定义表头。示例代码如下: ```java ExcelWriter excelWriter = EasyExcel.write(filePath).relativeHead().build(); ``` 在使用自定义表头时,您需要通过调用`com.alibaba.excel.write.metadata.holder.WriteSheetHolder`类的`setRelativeHead`方法来设置实际的表头数据。 请根据您的实际需求选择适合的方法来设置表头。<span class="em">1</span> #### 引用[.reference_title] - *1* [EasyExcel 动态表头 导出](https://download.csdn.net/download/tianyitianshangyuan/13129273)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值