Excel导入导出的缓存清理优化,增加close方法,杜绝可能会造成内存泄露的问题。

This commit is contained in:
thinkgem
2018-08-11 12:43:57 +08:00
parent f91bb55f38
commit 099ce0758b
12 changed files with 140 additions and 95 deletions

View File

@@ -5,6 +5,8 @@ package com.jeesite.common.utils.excel.fieldtype;
import java.util.List;
import org.springframework.core.NamedThreadLocal;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.modules.sys.entity.Area;
import com.jeesite.modules.sys.utils.AreaUtils;
@@ -12,12 +14,12 @@ import com.jeesite.modules.sys.utils.AreaUtils;
/**
* 字段类型转换
* @author ThinkGem
* @version 2013-03-10
* @version 2018-08-11
* @example fieldType = AreaType.class
*/
public class AreaType {
private static ThreadLocal<List<Area>> cache = new ThreadLocal<>();
private static ThreadLocal<List<Area>> cache = new NamedThreadLocal<>("AreaType");
/**
* 获取对象值(导入)
@@ -45,4 +47,12 @@ public class AreaType {
}
return "";
}
/**
* 清理缓存
*/
public static void clearCache(){
cache.remove();
}
}

View File

@@ -5,6 +5,8 @@ package com.jeesite.common.utils.excel.fieldtype;
import java.util.List;
import org.springframework.core.NamedThreadLocal;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.modules.sys.entity.Company;
import com.jeesite.modules.sys.utils.EmpUtils;
@@ -12,12 +14,12 @@ import com.jeesite.modules.sys.utils.EmpUtils;
/**
* 字段类型转换
* @author ThinkGem
* @version 2015-03-24
* @version 2018-08-11
* @example fieldType = CompanyType.class
*/
public class CompanyType {
private static ThreadLocal<List<Company>> cache = new ThreadLocal<>();
private static ThreadLocal<List<Company>> cache = new NamedThreadLocal<>("CompanyType");
/**
* 获取对象值(导入)
@@ -45,4 +47,11 @@ public class CompanyType {
}
return "";
}
/**
* 清理缓存
*/
public static void clearCache(){
cache.remove();
}
}

View File

@@ -5,6 +5,8 @@ package com.jeesite.common.utils.excel.fieldtype;
import java.util.List;
import org.springframework.core.NamedThreadLocal;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.modules.sys.entity.Office;
import com.jeesite.modules.sys.utils.EmpUtils;
@@ -12,12 +14,12 @@ import com.jeesite.modules.sys.utils.EmpUtils;
/**
* 字段类型转换
* @author ThinkGem
* @version 2013-03-10
* @version 2018-08-11
* @example fieldType = OfficeType.class
*/
public class OfficeType {
private static ThreadLocal<List<Office>> cache = new ThreadLocal<>();
private static ThreadLocal<List<Office>> cache = new NamedThreadLocal<>("OfficeType");
/**
* 获取对象值(导入)
@@ -45,4 +47,11 @@ public class OfficeType {
}
return "";
}
/**
* 清理缓存
*/
public static void clearCache(){
cache.remove();
}
}

View File

@@ -5,6 +5,8 @@ package com.jeesite.common.utils.excel.fieldtype;
import java.util.List;
import org.springframework.core.NamedThreadLocal;
import com.jeesite.common.collect.ListUtils;
import com.jeesite.common.lang.StringUtils;
import com.jeesite.common.utils.SpringUtils;
@@ -14,13 +16,13 @@ import com.jeesite.modules.sys.service.PostService;
/**
* 字段类型转换
* @author ThinkGem
* @version 2015-03-24
* @version 2018-08-11
* @example fieldType = PostListType.class
*/
public class PostListType {
private static PostService postService = SpringUtils.getBean(PostService.class);
private static ThreadLocal<List<Post>> cache = new ThreadLocal<>();
private static ThreadLocal<List<Post>> cache = new NamedThreadLocal<>("PostListType");
/**
* 获取对象值(导入)
@@ -53,4 +55,11 @@ public class PostListType {
}
return "";
}
/**
* 清理缓存
*/
public static void clearCache(){
cache.remove();
}
}

View File

@@ -22,12 +22,12 @@ import com.jeesite.modules.sys.utils.UserUtils;
/**
* 日志拦截器
* @author ThinkGem
* @version 2014-8-19
* @version 2018-08-11
*/
public class LogInterceptor extends BaseService implements HandlerInterceptor {
private static final ThreadLocal<Long> startTimeThreadLocal =
new NamedThreadLocal<Long>("ThreadLocal StartTime");
new NamedThreadLocal<Long>("LogInterceptor StartTime");
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,

View File

@@ -116,8 +116,7 @@ public class EmpUserService extends CrudService<EmpUserDao, EmpUser> {
int successNum = 0; int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
try {
ExcelImport ei = new ExcelImport(file, 2, 0);
try(ExcelImport ei = new ExcelImport(file, 2, 0)){
List<EmpUser> list = ei.getDataList(EmpUser.class);
for (EmpUser user : list) {
try{

View File

@@ -177,8 +177,9 @@ public class EmpUserController extends BaseController {
}
List<EmpUser> list = empUserService.findList(empUser);
String fileName = "用户数据" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
new ExcelExport("用户数据", EmpUser.class).setDataList(list)
.write(response, fileName).dispose();
try(ExcelExport ee = new ExcelExport("用户数据", EmpUser.class)){
ee.setDataList(list).write(response, fileName);
}
}
/**
@@ -196,8 +197,9 @@ public class EmpUserController extends BaseController {
}
List<EmpUser> list = ListUtils.newArrayList(empUser);
String fileName = "用户数据模板.xlsx";
new ExcelExport("用户数据", EmpUser.class, Type.IMPORT).setDataList(list)
.write(response, fileName).dispose();
try(ExcelExport ee = new ExcelExport("用户数据", EmpUser.class, Type.IMPORT)){
ee.setDataList(list).write(response, fileName);
}
}
/**

View File

@@ -60,7 +60,7 @@
<!-- /.row -->
<div class="row">
<div class="col-md-12">
<div class="box">
<div class="box box-widget">
<div class="box-header with-border">
<h3 class="box-title">月度报告</h3>
<div class="box-tools pull-right">