创建可部署的 War 文件
由于 Spring WebFlux 并不严格依赖于 Servlet API,并且默认情况下会在嵌入式 Reactor Netty 服务器上部署 applications,因此 WebFlux applications 不支持 War 部署。
生成可部署的 war 文件的第一个 step 是提供SpringBootServletInitializer
子类并覆盖其configure
方法。这样做可以使用 Spring Framework 的 Servlet 3.0 支持,并允许您在 servlet 容器启动时配置 application。通常,您应该更新 application 的 main class 以扩展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); } }
下一个步骤是更新 build configuration,以便您的项目生成 war 文件而不是 jar 文件。如果您使用 Maven 和spring-boot-starter-parent
(为您配置 Maven 的 war 插件),您需要做的就是修改pom.xml
以将包装更改为 war,如下所示:
<packaging>war</packaging>
如果使用 Gradle,则需要修改build.gradle
以将 war 插件应用于项目,如下所示:
apply plugin: 'war'
process 中的最后一个步骤是确保嵌入的 servlet 容器不会干扰部署 war 文件的 servlet 容器。为此,您需要将嵌入的 servlet 容器依赖项标记为已提供。
如果使用 Maven,则以下 example 将 servlet 容器(在本例中为 Tomcat)标记为提供:
<dependencies> <!-- … --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- … --> </dependencies>
如果使用Spring Boot build 工具,则标记嵌入的 servlet 容器依赖项将提供一个可执行的 war 文件,其中提供的依赖项打包在lib-provided
目录中。这意味着,除了可部署到 servlet 容器之外,您还可以在命令 line 上使用java -jar
运行 application。
将 WAR 部署到 WebLogic
要将 Spring Boot application 部署到 WebLogic,必须确保 servlet 初始化程序直接实现WebApplicationInitializer
(即使您从已经实现它的 base class 扩展)。
WebLogic 的典型初始化程序应类似于以下 example:
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.web.WebApplicationInitializer; @SpringBootApplication public class MyApplication extends SpringBootServletInitializer implements WebApplicationInitializer { }
如果使用 Logback,还需要告诉 WebLogic 更喜欢打包的 version 而不是服务器的 version。您可以通过添加包含以下内容的WEB-INF/weblogic.xml
文件来执行此操作:
<?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> <wls:container-descriptor> <wls:prefer-application-packages> <wls:package-name>org.slf4j</wls:package-name> </wls:prefer-application-packages> </wls:container-descriptor> </wls:weblogic-web-app>