新项目直接采用SpringBoot提供的插件可以很方便的构建现代的可执行的“uber jar”。历史项目很多是采用外置tomcat容器进行部署的,在用SpringBoot框架重构项目后,需要在不更改部署方式的情况,要求SpringBoot要能支持传统的部署形式,本文基于SpringBoot官方文档,调试了SpringBoot支持的传统war部署方式。
由于Spring WebFlux并不严格依赖于servlet API,并且应用程序默认部署在嵌入式Reactor Netty服务器上,因此WebFlux应用程序不支持War部署。
本文所有关于SpringBoot的源码示例,均是基于SpringBoot-2.7.6版本来的,参照调试时要注意不同版本间的代码差异。
1.WAR包构建
创建maven工程调试本文所描述的内容,完整的POM依赖如下:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
1.1.SpringBootServletInitializer
生成可部署的war文件的第一步是提供SpringBootServletInitializer子类并覆盖其configure方法。这样做可以利用Spring Framework的servlet 3.0支持,并允许您在servlet容器启动应用程序时对其进行配置。通常,您应该更新应用程序的主类以扩展SpringBootServletInitializer,如以下示例所示:
package com.example.war;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* @Description
* @Author misterbig
* @Date 2024/2/22
*/
@SpringBootApplication
public class MyWarApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyWarApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyWarApplication.class, args);
}
}
1.2.更新构建配置
更新您的构建配置,以便您的项目生成一个war文件而不是jar文件。如果您使用Maven和spring-boot-starter-parent(为您配置Maven的war插件),您所需要做的就是修改pom.xml以将打包更改为war,如下所示:
1.3.运行时排除内嵌的Servlet容器
确保嵌入的servlet容器不会干扰war文件部署到的servlet容器。为此,您需要将嵌入式servlet容器依赖项标记为已提供。
如果使用Maven,下面的示例将servlet容器(在本例中为Tomcat)标记为已提供:
如果使用Spring Boot构建工具,则将嵌入的servlet容器依赖项标记为所提供的将生成一个可执行的war文件,其中所提供的依赖项打包在lib提供的目录中。这意味着,除了可以部署到servlet容器之外,还可以通过在命令行上使用java-jar来运行应用程序。
2.Tomcat部署
2.1.手动部署
可以将构建好的war包直接传到“CATALINA_HOME”的“webapps”目录下,tomcat容器会自动解包,启动tomcat容器(批处理脚本:D:\apache-tomcat-9.0.86\bin\startup.bat)后就能自动访问服务内容了。如下图:
关于上图中tomcat控制台输出的日志乱码问题,主要是控制台日志输出编码格式导致的,可以通过修改tomcat日志配置文件得以解决。以本示例中使用的tomcat应用为例,需要修改的配置文件完整路径为“D:\apache-tomcat-9.0.86\conf\logging.properties”,需要修改的配置项为“java.util.logging.ConsoleHandler.encoding”,如下图:
2.2.使用IDEA(本地调试推荐)
添加一个新的本地tomcat组件,作为一个启动候选文件,部署war包内容并应用。IDEA选择该启动候选配置文件,直接启动tomcat服务即可,如下图:
文章来源
发表评论