在一次SpringBoot源码中看到了启动类中继承了SpringBootServletInitializer,代码如下,不明白为什么要这样写,特此整理本篇文章讲解为什么有些项目中继承了SpringBootServletInitializer类。
继承SpringBootServletInitializer代码如下:
@SpringBootApplication
public class AdminApplication extends SpringBootServletInitializer {
public static void main(String[] args){
SpringApplication.run(AdminApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
return application.sources(AdminApplication.class);
}
}
不继承SpringBootServletInitializer启动类代码如下:
@SpringBootApplication
public class AdminApplication{
public static void main(String[] args){
SpringApplication.run(AdminApplication.class, args);
}
}
原因:
其实这是跟Springboot项目的发布方式有关,我们知道Springboot是内置了Tomcat容器的,所以一般服务器上不需要额外安装Tomcat程序,但是如果要使用外置的Tomcat容器则需要继承SpringBootServletInitializer并重写 configure() 方法
Spring Boot 项目的发布方式有两种:
1)打包应用
使用窗口命令,在 pom.xml 同级目录下:
mvn clean package -Dmaven.test.skip=true
Dmaven.test.skip=true 表示不执行测试用例,也不编译测试用例类。
2)启动应用
后台启动 Java 程序, 命令如下:
nohup java -jar springboot-0.0.1-SNAPSHOT.jar &
3)停止程序
首先查询 Java 程序的 pid
ps -ef|grep java
再停止程序
kill -9 pid
1)排除内置 Tomcat
org.springframework.boot
spring-boot-starter-tomcat
provided
将 scope 属性设置为 provided,表示打包不会包含此依赖。
2)配置启动类
在项目的启动类中继承 Spring BootServletInitializer 并重写 configure() 方法:
@SpringBootApplication
public class AdminApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(AdminApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
3)打包应用
使用窗口命令,在 pom.xml 同级目录下:
mvn clean package -Dmaven.test.skip=true
4)部署应用
打包完成会在 target 目录下生成:项目名 + 版本号.war 文件,复制到 Tomcat 的 webapps 目录下,运行 Tomcat 即可。
在 pom.xml 里设置
war