創建可部署的 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>