Spring Boot一般以jar包的形式发布,但是有的时候需要动态配置参数部署项目,尤其是配置的参数数量特别多时,使用war包部署实际上是一个不错的选择。以下是将Spring Boot项目打包成war包发布的详细过程。
1、修改启动类,并重写configure方法
@SpringBootApplication
@MapperScan("")
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
说明:该修改是为了达到类似于web.xml的配置方式来启动spring上下文
2、修改pom.xml文件
2.1 修改项目发布形式
<packaging>war</packaging>
2.2 移除tomcat插件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<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>
2.3 添加servlet依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
2.3 编译时配置第三方jar包加载路径
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<skip>true</skip>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/src/main/resources/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
2.4 配置第三方jar包发布路径以及取消web.xml校验
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<webResources>
<!--配置第三方jar包打包的路径-->
<resource>
<directory>src/main/resources/lib/</directory>
<targetPath>WEB-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
<!-- maven打包的时候告诉maven不需要web.xml,否刚会报找不到web.xml错误 -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
另外,<build>标签下可以增加<finalName>标签标示最终war包发布的名称,如下所示:
<finalName>XXXXXXXXX</finalName>
2.5 maven命令打包
执行mvn clean package命令即可生成war包
3、war包部署与访问
将生成war包直接部署到tomcat webapps文件夹下,直接启动tomcat即可,war会自动解压,进行发布。
注意:此时,项目中接口路径和jar包版本中的路径是不一样的,它比jar版本中的所有接口路径要多一个前缀,即"/war包解压后文件夹名/”。如果war包发布接口路径要和jar包版本路径一致,可以将解压后的war包文件夹名直接改为"ROOT",然后重启tomcat即可。