###概要
出于对Tomcat的信任,在Spring Boot可以直接用jar启动的情况下,还是决定改成war包启动。虽然都能配置jvm参数,都要日志输出,可以需要替换一些静态页面的时候war包可以直接替换,无需重新启动服务。
步骤
首先配置pom,去掉内置的Tomcat,改成直接引用starter-tomcat包,并设置scope为provided。从而保证打包的时候不会打入多余的tomcat相关的包,又能在本地直接通过main运行项目。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<!-- 去掉内置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>
<!-- 改成直接引用并设置socpe范围为provided,表明该包只在编译和测试的时候用。 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>增加一个初始化类继承SpringBootServletInitializer方法,重写configure方法,并通过sources方法把Spring Boot项目启动类传进去。
1
2
3
4
5
6public class ServletInitializer extends SpringBootServletInitializer {
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}到此配置完成,我们通过maven打成的war包就可以直接在tomcat中运行了。而我们实现SpringBootServletInitializer就相当于配置了web.xml。
总结
jar包改成war包是非常的容易,两种方式都有优劣,而到底使用哪种部署方式这就需要根据实际情况来判断了。