87.1 创建可部署的war文件

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

@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

<packaging>war</packaging>

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

apply plugin: 'war'

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

如果你使用Maven,下面的示例将servlet容器(本例中为Tomcat)标记为提供:

<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>

如果你使用Gradle,下面的示例将servlet容器(本例中为Tomcat)标记为提供:

dependencies {
// …
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
// …
}

providedRuntime更适合Gradle的compileOnly配置,因为compileOnly依赖不在测试类路径上,所以任何基于web的综合测试都会失败。

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

提示 查看Spring Boot基于以上配置的一个Maven示例应用