Browse Source

only extract specified jars

sunyj 8 years ago
parent
commit
eab4c631d8

+ 16 - 2
src/main/java/com/uas/report/Application.java

@@ -1,5 +1,6 @@
 package com.uas.report;
 
+import com.uas.report.util.ArrayUtils;
 import com.uas.report.util.ContextUtils;
 import com.uas.report.util.FileUtils;
 import com.uas.report.util.ReportUtils;
@@ -106,12 +107,25 @@ public class Application extends SpringBootServletInitializer implements Applica
 		if (!libDir.exists()) {
 			libDir.mkdirs();
 		}
+		String[] extractJars = ContextUtils.getBean(SystemProperties.class).getExtractJars();
+		if(ArrayUtils.isEmpty(extractJars)){
+			return;
+		}
+		// 根据配置的 jar,创建相应的匹配规则
+		String pattern = "WEB-INF/lib/(";
+		for(int i = 0; i < extractJars.length; i++){
+			if(i != 0){
+				pattern += "|";
+			}
+			pattern += extractJars[i];
+		}
+		pattern += ")-[\\d.]+?[\\S]+?.jar";
 		ZipFile zipFile = new ZipFile(warFile);
 		Enumeration<? extends ZipEntry> entries = zipFile.entries();
 		while (entries.hasMoreElements()) {
 			ZipEntry zipEntry = entries.nextElement();
-			// 只提取 jasperreports-$version.jar
-			if (zipEntry.getName().matches("[\\s\\S]*?jasperreports-[\\d.]+?.jar")) {
+			// 只提取指定的 jar
+			if (zipEntry.getName().matches(pattern)) {
 				logger.info("extract... " + zipEntry.getName());
 				try (InputStream inputStream = zipFile.getInputStream(zipEntry)) {
 					String name = zipEntry.getName();

+ 14 - 0
src/main/java/com/uas/report/SystemProperties.java

@@ -51,6 +51,12 @@ public class SystemProperties {
 	@Value("${page.preview.show-export-buttons}")
 	private List<ExportType> pagePreviewShowExportButtons;
 
+	/**
+	 * 以 spring boot jar 方式启动时,需解压的 jar
+	 */
+	@Value("${extract-jars}")
+	private String[] extractJars;
+
 	public int getTaskPeriod() {
 		return taskPeriod;
 	}
@@ -98,4 +104,12 @@ public class SystemProperties {
 	public void setPagePreviewShowExportButtons(List<ExportType> pagePreviewShowExportButtons) {
 		this.pagePreviewShowExportButtons = pagePreviewShowExportButtons;
 	}
+
+	public String[] getExtractJars() {
+		return extractJars;
+	}
+
+	public void setExtractJars(String[] extractJars) {
+		this.extractJars = extractJars;
+	}
 }

+ 2 - 0
src/main/resources/application.yml

@@ -40,6 +40,8 @@ page:
   # support PDF, XLS, XLS_DATA, XLSX, XLSX_DATA, DOC, TXT in com.uas.report.model.ExportType
   show-export-buttons: PDF, XLS, XLS_DATA
 
+extract-jars: jasperreports, fastjson
+
 jasperserver:
  rest:
   api: