ソースを参照

不使用Spring Boot内嵌的Tomcat容器

sunyj 9 年 前
コミット
b5af3b7598

+ 11 - 9
pom.xml

@@ -8,7 +8,7 @@
 	</parent>
 	<groupId>com.uas.report</groupId>
 	<artifactId>report</artifactId>
-	<packaging>jar</packaging>
+	<packaging>war</packaging>
 	<version>0.0.1-SNAPSHOT</version>
 	<name>report Maven Webapp</name>
 	<url>http://maven.apache.org</url>
@@ -41,6 +41,12 @@
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-web</artifactId>
+			<exclusions>
+				<exclusion>
+					<artifactId>org.springframework.boot</artifactId>
+					<groupId>spring-boot-starter-tomcat</groupId>
+				</exclusion>
+			</exclusions>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework</groupId>
@@ -182,24 +188,20 @@
 					<target>1.7</target>
 				</configuration>
 			</plugin>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-			</plugin>
 		</plugins>
 	</build>
 
 	<distributionManagement>
 		<!-- 发布release仓库 -->
 		<repository>
-			<id>edi-release</id>
-			<name>edi-release</name>
+			<id>report-release</id>
+			<name>report-release</name>
 			<url>http://113.105.74.141:8081/artifactory/libs-release-local</url>
 		</repository>
 		<!-- 发布快照版本 -->
 		<snapshotRepository>
-			<id>edi-snapshots</id>
-			<name>edi-snapshots</name>
+			<id>report-snapshots</id>
+			<name>report-snapshots</name>
 			<url>http://113.105.74.141:8081/artifactory/libs-snapshot-local</url>
 		</snapshotRepository>
 	</distributionManagement>

+ 27 - 27
src/main/java/com/uas/report/Application.java

@@ -1,43 +1,43 @@
 package com.uas.report;
 
-import org.springframework.boot.SpringApplication;
+import org.apache.log4j.Logger;
+import org.springframework.beans.BeansException;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.support.SpringBootServletInitializer;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 
-import com.uas.report.schedule.service.TaskService;
-import com.uas.report.service.FileService;
 import com.uas.report.util.ContextUtils;
+import com.uas.report.util.ReportUtils;
 
+/**
+ * 不使用spring boot内嵌的容器,部署在自定义Tomcat下时的程序入口
+ * 
+ * @author sunyj
+ * @since 2017年1月11日 下午5:18:41
+ */
 @EnableTransactionManagement
 @SpringBootApplication(scanBasePackages = "com.uas.report")
 @EnableWebMvc
-public class Application {
-	public static void main(String[] args) {
-		SpringApplication application = new SpringApplication(Application.class);
-		application.addListeners(new ContextUtils());
-		application.run(args);
+public class Application extends SpringBootServletInitializer implements ApplicationContextAware {
 
-		startTask();
-	}
-
-	/**
-	 * 开启定时任务
-	 */
-	public static void startTask() {
-		SystemProperties systemProperties = ContextUtils.getBean(SystemProperties.class);
-		if (systemProperties.isTaskAutoStart()) {
-			FileService fileService = ContextUtils.getBean(FileService.class);
-			TaskService taskService = ContextUtils.getBean(TaskService.class);
-			fileService.newDeleteGeneratedFilesDailyTask(systemProperties.getDailyTaskHour(),
-					systemProperties.getDailyTaskMinute(), systemProperties.getDailyTaskSecond());
+	private static Logger logger = Logger.getLogger(Application.class);
 
-			// 开启定时任务
-			if (!taskService.isStopped()) {
-				taskService.stop();
-			}
-			taskService.start();
-		}
+	@Override
+	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+		// 程序入口
+		return builder.sources(Application.class);
 	}
 
+	@Override
+	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+		// 注册spring上下文对象
+		ContextUtils.setApplicationContext(applicationContext);
+		logger.info("ApplicationContext registed");
+		// 开启定时任务
+		ReportUtils.startTask();
+	}
 }

+ 23 - 1
src/main/java/com/uas/report/WebAppConfiguration.java

@@ -1,11 +1,15 @@
 package com.uas.report;
 
+import java.io.File;
 import java.nio.charset.Charset;
 import java.util.Arrays;
 import java.util.List;
 
+import javax.servlet.MultipartConfigElement;
+
 import org.apache.axis.transport.http.AxisServlet;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.MultipartConfigFactory;
 import org.springframework.boot.web.servlet.ServletRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
@@ -34,7 +38,7 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter {
 	public void addResourceHandlers(ResourceHandlerRegistry registry) {
 		// Spring boot默认资源路径在src/main/resources下,而非/src/main/webapp
 		// 使用/src/main/webapp下资源均需在此添加
-		registry.addResourceHandler("/static/**").addResourceLocations("/resources/");
+		registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
 		registry.addResourceHandler("/WEB-INF/**").addResourceLocations("/WEB-INF/");
 		super.addResourceHandlers(registry);
 	}
@@ -107,4 +111,22 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter {
 		return servletRegistrationBean;
 	}
 
+	/**
+	 * 设置文件上传临时路径
+	 * 
+	 * @return
+	 */
+	@Bean
+	public MultipartConfigElement multipartConfigElement() {
+		MultipartConfigFactory multipartConfigFactory = new MultipartConfigFactory();
+		File file = new File(System.getProperty("java.io.tmpdir"));
+		// 获取磁盘根路径
+		while (file != null && file.getParent() != null) {
+			file = file.getParentFile();
+		}
+		// 设置为根路径(避免使用默认的临时路径,造成文件上传失败)
+		multipartConfigFactory.setLocation(file.getPath());
+		return multipartConfigFactory.createMultipartConfig();
+	}
+
 }

+ 3 - 6
src/main/java/com/uas/report/util/ContextUtils.java

@@ -2,10 +2,8 @@ package com.uas.report.util;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.boot.context.event.ApplicationPreparedEvent;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationEvent;
-import org.springframework.context.ApplicationListener;
 
 /**
  * spring容器上下文对象
@@ -13,16 +11,15 @@ import org.springframework.context.ApplicationListener;
  * @author yingp
  *
  */
-public class ContextUtils implements ApplicationListener<ApplicationPreparedEvent> {
+public class ContextUtils {
 	private static ApplicationContext applicationContext;
 
 	private static Logger logger = LoggerFactory.getLogger(ContextUtils.class);
 
-	@Override
-	public void onApplicationEvent(ApplicationPreparedEvent event) {
+	public static void setApplicationContext(ApplicationContext applicationContext) {
 		synchronized (ContextUtils.class) {
 			logger.debug("setApplicationContext, notifyAll");
-			ContextUtils.applicationContext = event.getApplicationContext();
+			ContextUtils.applicationContext = applicationContext;
 			ContextUtils.class.notifyAll();
 		}
 	}

+ 22 - 0
src/main/java/com/uas/report/util/ReportUtils.java

@@ -2,7 +2,10 @@ package com.uas.report.util;
 
 import org.springframework.util.StringUtils;
 
+import com.uas.report.SystemProperties;
 import com.uas.report.core.exception.ReportException;
+import com.uas.report.schedule.service.TaskService;
+import com.uas.report.service.FileService;
 
 /**
  * 工具类
@@ -27,4 +30,23 @@ public class ReportUtils {
 			throw new ReportException("未传入报表名称!");
 		}
 	}
+	
+	/**
+	 * 开启定时任务
+	 */
+	public static void startTask() {
+		SystemProperties systemProperties = ContextUtils.getBean(SystemProperties.class);
+		if (systemProperties.isTaskAutoStart()) {
+			FileService fileService = ContextUtils.getBean(FileService.class);
+			TaskService taskService = ContextUtils.getBean(TaskService.class);
+			fileService.newDeleteGeneratedFilesDailyTask(systemProperties.getDailyTaskHour(),
+					systemProperties.getDailyTaskMinute(), systemProperties.getDailyTaskSecond());
+
+			// 开启定时任务
+			if (!taskService.isStopped()) {
+				taskService.stop();
+			}
+			taskService.start();
+		}
+	}
 }

+ 3 - 3
src/main/webapp/WEB-INF/views/console.html

@@ -3,7 +3,7 @@
 <head>
 <meta charset="UTF-8">
 <title>Report</title>
-<link rel="stylesheet" href="static/css/console.css">
+<link rel="stylesheet" href="resources/css/console.css">
 </head>
 <body>
 	<div id="mainContainer">
@@ -119,6 +119,6 @@
 	</div>
 </body>
 
-<script src="static/lib/jquery/jquery.min.js"></script>
-<script src="static/js/console/app.js"></script>
+<script src="resources/lib/jquery/jquery.min.js"></script>
+<script src="resources/js/console/app.js"></script>
 </html>

+ 5 - 5
src/main/webapp/WEB-INF/views/fileUpload.html

@@ -3,9 +3,9 @@
 <head>
 <meta charset="UTF-8">
 <title>文件上传</title>
-<link rel="stylesheet" href="static/css/fileUpload.css">
+<link rel="stylesheet" href="resources/css/fileUpload.css">
 <link rel="stylesheet"
-	href="static/lib/fontawesome/css/font-awesome.min.css">
+	href="resources/lib/fontawesome/css/font-awesome.min.css">
 </head>
 <body>
 	<form method="post" enctype="multipart/form-data">
@@ -29,7 +29,7 @@
 	</div>
 	<p id="result"></p>
 </body>
-<script src="static/lib/jquery/jquery.min.js"></script>
-<script src="static/js/util/utils.js"></script>
-<script src="static/js/upload/app.js"></script>
+<script src="resources/lib/jquery/jquery.min.js"></script>
+<script src="resources/js/util/utils.js"></script>
+<script src="resources/js/upload/app.js"></script>
 </html>

+ 5 - 5
src/main/webapp/WEB-INF/views/files.html

@@ -3,9 +3,9 @@
 <head>
 <meta charset="UTF-8">
 <title>Report Files</title>
-<link rel="stylesheet" href="static/css/files.css">
+<link rel="stylesheet" href="resources/css/files.css">
 <link rel="stylesheet"
-	href="static/lib/fontawesome/css/font-awesome.min.css">
+	href="resources/lib/fontawesome/css/font-awesome.min.css">
 </head>
 <body>
 	<div id="listContainer">
@@ -52,7 +52,7 @@
 	</div>
 </body>
 
-<script src="static/lib/jquery/jquery.min.js"></script>
-<script src="static/js/util/utils.js"></script>
-<script src="static/js/files/app.js"></script>
+<script src="resources/lib/jquery/jquery.min.js"></script>
+<script src="resources/js/util/utils.js"></script>
+<script src="resources/js/files/app.js"></script>
 </html>

+ 7 - 7
src/main/webapp/WEB-INF/views/preview.html

@@ -3,9 +3,9 @@
 <head>
 <meta charset="UTF-8">
 <title>Preview</title>
-<link rel="stylesheet" href="static/css/preview.css">
+<link rel="stylesheet" href="resources/css/preview.css">
 <link rel="stylesheet"
-	href="static/lib/fontawesome/css/font-awesome.min.css">
+	href="resources/lib/fontawesome/css/font-awesome.min.css">
 </head>
 <body>
 	<div id="toolbarContainer">
@@ -74,9 +74,9 @@
 	<iframe id="hiddenFrame" hidden="true"></iframe>
 </body>
 
-<script src="static/lib/pdf.js/build/pdf.js"></script>
-<script src="static/lib/jquery/jquery.min.js"></script>
-<script src="static/lib/jquery/ba-tiny-pubsub.min.js"></script>
-<script src="static/js/util/utils.js"></script>
-<script src="static/js/preview/app.js"></script>
+<script src="resources/lib/pdf.js/build/pdf.js"></script>
+<script src="resources/lib/jquery/jquery.min.js"></script>
+<script src="resources/lib/jquery/ba-tiny-pubsub.min.js"></script>
+<script src="resources/js/util/utils.js"></script>
+<script src="resources/js/preview/app.js"></script>
 </html>

+ 1 - 1
src/main/webapp/resources/js/preview/app.js

@@ -1,5 +1,5 @@
 //IE下找不到pdf.worker.js,需要手动赋值
-PDFJS.workerSrc = 'static/lib/pdf.js/build/pdf.worker.js';
+PDFJS.workerSrc = 'resources/lib/pdf.js/build/pdf.worker.js';
 
 var canvas = document.getElementById('theCanvas');
 var ctx = canvas.getContext('2d');

+ 2 - 2
src/main/webapp/resources/js/util/utils.js

@@ -1,5 +1,5 @@
-document.write("<script src='static/lib/spin/spin.min.js'></script>");
-document.write("<link rel='stylesheet' href='static/css/alert.css'>");
+document.write("<script src='resources/lib/spin/spin.min.js'></script>");
+document.write("<link rel='stylesheet' href='resources/css/alert.css'>");
 
 /**
  * 获取链接参数

+ 1 - 1
src/main/webapp/resources/lib/pdf.js/build/pdf.js

@@ -892,7 +892,7 @@ var Util = (function UtilClosure() {
   Util.loadScript = function Util_loadScript(src, callback) {
     var script = document.createElement('script');
     var loaded = false;
-    script.setAttribute('src', 'static/lib/' + src);
+    script.setAttribute('src', 'resources/lib/' + src);
     if (callback) {
       script.onload = function() {
         if (!loaded) {