2018-08-29 小賴 文檔初始化
springBoot 帶有内置Tomcat 伺服器,可以直接将項目打包成jar運作,但是如果在需要把項目達成war包該怎麼辦呢?下面是将springboot項目部署為war項目的一些步驟
1. pom.xml中将打包形式jar修改為war
修改前:
修改後:
2. 移除原有内置Tomcat
将springboot内置的Tomcat依賴移除 ,需要注意的是,使用不同的模闆引擎的時候,需要移除的依賴位置也不同,下面是原生的依賴和thymeleaf 模闆引擎移除依賴的一些方法 (後面打包發現。 可以不需要在依賴中去除tomcat 依賴直接添加)。
# 原生Tomcat依賴移除
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
# thymeleaf 模闆引擎依賴移除
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
添加的依賴:
<!--因配置外部TOMCAT 而配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!--因配置外部TOMCAT 而配置-->
3. 設定打包後的項目通路名稱
設定打包後的項目通路名稱,在build節點裡設定檔案名 <finalName>ROOT</finalName>
(這裡是一個特别需要注意的地方,由于開始的時候是使用的單子產品程式,是以可以對項目命名,但是在多子產品打包中發現,如果添加項目名稱 這個結點。打包好的程式在tomcat中運作的時候會發生錯誤,war 包的目錄格式有問題,建議finalName設定的名稱 == artifactId名稱)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>ROOT</finalName>
</build>
4. 初始化 Spring 應用上下文
由于我們需要使用外部Tomcat伺服器部署war包,是以不能使用建立項目的application.java 這個main方法了,需要重寫一個類似于 web.xml 檔案配置的方式來啟動 Spring 應用上下文,此時我們需要聲明一個類,這個類的作用與在 web.xml 中配置負責初始化 Spring 應用上下文的監聽器作用類似。
我們平常用main方法啟動的方式,都有一個App的啟動類,代碼如下:
@SpringBootApplication
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter
{
public static void main(String[] args) {
SpringApplication.run(BootWithActivitiApplication.class, args);
}
}
Application類的同級添加一個SpringBootStartApplication類,其代碼如下:
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意這裡要指向原先用main方法執行的Application啟動類
return builder.sources(BootWithActivitiApplication.class);
}
}
5. 部署
略。
基本上到這步就算是成功了,沒有遇到下述問題可略過。
6.解決打包後resources下的檔案全部丢失
打包後resources下的檔案全部丢失,如下圖所示: classes檔案夾下隻有com開頭的class檔案,resources中的配置檔案、靜态資源都沒有打包進來。
解決辦法:Application類上面的有注解@ComponentScan導緻檔案丢失,去掉此注解即可。(不一定隻有這一個原因,其他原因還未發現。) 網上還有另一個造成此問題
修改前:
@SpringBootApplication
@ComponentScan({"org.activiti.rest.diagram","com.spcx.activiti"})
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter{
}
修改後:
@SpringBootApplication
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter{
}