SpringBoot项目打成可运行的war包

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

猜你喜欢

转载自www.cnblogs.com/dalianpai/p/12675008.html
今日推荐