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
,如下例子:
- @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容器不干预(interfere)war文件被部署的servlet容器。为了这么做,你需要标记内置的servlet容器依赖为被提供的。
如果你使用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'
- // …
- }
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