Spring Boot传统部署

创建可部署的war文件

产生一个可部署war包的第一步是提供一个 SpringBootServletInitializer 子类,并覆盖它的 configure 方法,这充分利用了Spring框架对Servlet 3.0的支持,并允许在应用通过servlet容器启动时配置它。通常,只需把应用的主类改为继承 SpringBootServletInitializer 即可:

1
2
3
4
5
6
7
8
9
10
11
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}

public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}

下一步是更新构建配置,这样项目将产生一个war包而不是jar包。如果使用Maven,并使用 spring-boot-starter-parent(为了配置Maven的war插件),所有需要做的就是更改 pom.xml 的打包方式为 war

1
<packaging>war</packaging>

如果使用Gradle,需要修改 build.gradle 来将war插件应用到项目上:

1
apply plugin: 'war'

该过程最后的一步是确保内嵌的servlet容器不能干扰war包将部署的servlet容器。为了达到这个目的,需要将内嵌容器的依赖标记为 provided

如果使用Maven:

1
2
3
4
5
6
7
8
9
<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>

如果使用Gradle:

1
2
3
4
5
6
dependencies {
// …
providedRuntime 'org.springframework.boot:spring-boot-starte
r-tomcat'
// …
}

如果使用Spring Boot构建工具,将内嵌容器依赖标记为 provided 将产生一个可执行war包,在 lib-provided 目录有该war包的 provided 依赖。这意味着,除了部署到servlet容器,还可以通过使用命令行 java -jar 命令来运行应用。

为老的servlet容器创建可部署的war文件

老的Servlet容器不支持在Servlet 3.0中使用的 ServletContextInitializer 启动处理。你仍旧可以在这些容器使用Spring和Spring Boot,但你需要为应用添加一个 web.xml ,并将它配置为通过一个 DispatcherServlet 加载一个 ApplicationContext