diff --git a/backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java b/backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java index a069d73bcde3d7df08741ac2741de549026b8852..aa524b267ff2c9b3994024ef4cc20554cb3f4857 100644 --- a/backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java +++ b/backend/src/main/java/io/metersphere/excel/listener/EasyExcelListener.java @@ -32,8 +32,11 @@ public abstract class EasyExcelListener extends AnalysisEventListener { public EasyExcelListener(){ Type type = getClass().getGenericSuperclass(); this.clazz = (Class) ((ParameterizedType) type).getActualTypeArguments()[0]; - this.easyExcelI18nTranslator = new EasyExcelI18nTranslator(this.clazz); - this.easyExcelI18nTranslator.translateExcelProperty(); + //防止多线程修改运行时类注解后,saveOriginalExcelProperty保存的是修改后的值 + synchronized (EasyExcelI18nTranslator.class) { + this.easyExcelI18nTranslator = new EasyExcelI18nTranslator(this.clazz); + this.easyExcelI18nTranslator.translateExcelProperty(); + } } /** diff --git a/backend/src/main/java/io/metersphere/excel/utils/EasyExcelExporter.java b/backend/src/main/java/io/metersphere/excel/utils/EasyExcelExporter.java index c2896048a99b8c6161b79f4ab153b2e50992a6f0..7f2d4858fca35c8877b6abec8393b41ae1160a11 100644 --- a/backend/src/main/java/io/metersphere/excel/utils/EasyExcelExporter.java +++ b/backend/src/main/java/io/metersphere/excel/utils/EasyExcelExporter.java @@ -24,17 +24,24 @@ public class EasyExcelExporter { EasyExcelI18nTranslator easyExcelI18nTranslator; - public EasyExcelExporter() { - easyExcelI18nTranslator = new EasyExcelI18nTranslator(TestCaseExcelData.class); - easyExcelI18nTranslator.translateExcelProperty(); + private Class clazz; + + public EasyExcelExporter(Class clazz) { + this.clazz = clazz; + //防止多线程修改运行时类注解后,saveOriginalExcelProperty保存的是修改后的值 + synchronized (EasyExcelI18nTranslator.class) { + easyExcelI18nTranslator = new EasyExcelI18nTranslator(clazz); + easyExcelI18nTranslator.translateExcelProperty(); + } + } - public void export(HttpServletResponse response, Class clazz, List data, String fileName, String sheetName) { + public void export(HttpServletResponse response, List data, String fileName, String sheetName) { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); try { response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx"); - EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(data); + EasyExcel.write(response.getOutputStream(), this.clazz).sheet(sheetName).doWrite(data); } catch (UnsupportedEncodingException e) { LogUtil.error(e.getMessage(), e); throw new ExcelException("Utf-8 encoding is not supported"); @@ -42,7 +49,6 @@ public class EasyExcelExporter { LogUtil.error(e.getMessage(), e); throw new ExcelException("IO exception"); } - } public void close() { diff --git a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java index f71b47396c440654811c85eec0399f355bbd40a6..324f3b757f0bee4bd430db551e54e03b290d5a3c 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java @@ -221,8 +221,8 @@ public class TestCaseService { public void testCaseTemplateExport(HttpServletResponse response) { EasyExcelExporter easyExcelExporter = null; try { - easyExcelExporter = new EasyExcelExporter(); - easyExcelExporter.export(response, TestCaseExcelData.class, generateExportTemplate(), + easyExcelExporter = new EasyExcelExporter(TestCaseExcelData.class); + easyExcelExporter.export(response, generateExportTemplate(), Translator.get("test_case_import_template_name"), Translator.get("test_case_import_template_sheet")); } catch (Exception e) { MSException.throwException(e);