87. 传统的部署

    Spring Boot支持传统的部署同时也支持更现代的部署方式。这一章回答关于传统部署的常见方式。

    87.1 创建一个可部署的War文件

    note:因为Spring WebFlux不严格依赖Servlet API和应用默认被部署在一个内置的Reactor Netty服务器,所以WebFlux应用不支持War部署。

    产生一个可部署的war文件的第一步是提供一个SpringBootServletInitializer子类,并覆盖它的configure方法。这么做利用Spring Framework’s Servlet 3.0支持并让你配置你的应用当它被servlet容器启动时。通常地,你应该更新你的应用的主类以扩展SpringBootServletInitializer,如下例子:

    1. @SpringBootApplication
    2. public class Application extends SpringBootServletInitializer {
    3.  
    4. @Override
    5. protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    6. return application.sources(Application.class);
    7. }
    8.  
    9. public static void main(String[] args) throws Exception {
    10. SpringApplication.run(Application.class, args);
    11. }
    12.  
    13. }

    下一步就是更细你的构建配置以便你的工程产生一个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容器不干预(interfere)war文件被部署的servlet容器。为了这么做,你需要标记内置的servlet容器依赖为被提供的。

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

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

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

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

    note:providedRuntime is preferred to Gradle’s compileOnly configuration. Among other limitations, compileOnly dependencies are not on the test classpath, so any web-based integration tests fail.

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

    note:Take a look at Spring Boot’s sample applications for a Maven-based example of the previously described configuration

    87.2 转换一个已经存在的应用到Spring Boot

    对于一个非web应用,它很容易转换一个已经存在的Spring应用到Spring Boot应用。为了这么做,丢掉创建你的ApplicationContext的代码并用SpringApplication或者SpringApplicationBuilder来代替。Spring MVC web应用……

    87.3 部署一个WAR到WebLogic

    87.4 使用Jedis代替Lettuce