基於tomcat釋出springboot單應用專案
阿新 • • 發佈:2018-12-21
目前微服務專案用jar包釋出的,鑑於以後有可能會jar包轉為war包,於tomcat、websphere、weblogic等平臺釋出。
轉換步驟如下:
一. 專案普遍配置:
1. 轉化jar型別專案為可部署的war檔案的第一步是提供一個SpringBootServletInitializer
子類和覆蓋它的configure
方法。通常做法是,讓應用程式的入口類繼承SpringBootServletInitializer:
@SpringBootApplication public class SIFServicePlatform extends SpringBootServletInitializer { @Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(SIFServicePlatform.class); } public static void main(String[] args) { SpringApplication.run(SIFServicePlatform.class, args); } }
注意:不同版本繼承的SpringBootServletInitializer
org.springframework.boot.context.web.SpringBootServletInitializer
1.4.1以上版本為org.springframework.boot.web.support.SpringBootServletInitializer
2. 若專案使用maven並且pom.xml繼承了spring-boot-starter-parent
,
需要更改pom.xml中的packaging
為war
型別
<packaging>war</packaging>
若使用Gradle
:
apply plugin: 'war'
3. 確保嵌入servlet容器不干擾外部servlet容器部署war檔案,若引入了內部tomcat需排除掉:
maven下:
<exclusions> <exclusion> <artifactId>spring-boot-starter-tomcat</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions>
需要標記嵌入servlet容器的依賴為provided
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>7.0.42</version> <scope>provided</scope> </dependency>
若war在部署到容器中時遇到Project facet Cloud Foundry Standalone Application version 1.0 is not supported.
錯誤; 解決辦法: 專案右鍵Build Path -> Configure Build Path -> Project facet -> 勾掉Cloud Foundry Standalone Application。
二. 專案內部部分, 目前sif專案為前後端分離,後端釋出後,指定前端路徑不成功,前端頁面無法訪問。目前解決辦法為:
- 後端專案存放於${tomcat_path}\webapps目錄下,解壓縮後包名起為api, 修改${tomcat_path}\conf\server.xml,新增以下資訊: <Context path="/" reloadable="true" debug="0" docBase="靜態資源路徑" /> 例如:
三. tomcat部分, tomcat需要配置執行檔案,windows下為catalina.bat 新增-Dspring.profiles.active=dev-tomcat 如下 set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Dspring.profiles.active=dev-tomcat" linux下為windows下為catalina.sh 啟動tomcat,此時專案訪問路徑為:http://{ip}:{port}/ 注: 後端專案包名不能跟path中名稱相同,前端訪問後端時,字首為 後端專案包名+api 例如:保險專案中前端訪問後端時 URL請求為http:{IP}:{port}/api/v1/{api請求},此時war包解壓至{tomcat}/webapps下 名稱為api,後端訪問配置為/v1/{api請求}