springboot打成war包

spring boot 打成war包


摘要

本文主要以企业级应用服务器(weblogic、普元app server)部署应用的项目背景下,讲述了如何在Spring Boot 2.5.x环境下将项目打包成WAR包,并在Tomcat 9上运行。首先,需要在Maven配置中添加Maven War插件,并排除掉spring-boot-starter-web依赖中的集成tomcat包,然后添加tomcat依赖和servlet API。其次,需要在pom.xml文件中加入war标签以标识项目将被打包成WAR包。此外,如果在使用配置文件并且需要指定profiles.active,那么需要在application配置文件中指定spring.profiles.active=prod。最后,需要增加一个启动类,该类需要放在application.class类同目录下,并引导SpringApplicationBuilder进行配置。


环境

Idea 2023

Windows 10

tomcat 9

maven

springboot 2.5.x

修改maven配置

maven配置

改配置

xml 复制代码
<build><plugins>段里加war包插件
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>

如果war放在tomcat下启动出现Class not found的问题,可能是因为一些dependency(比如springfox)的scope为provided,

provided

这个时候把注释掉就行。

要把spring-boot-starter-web依赖里的集成tomcat包排除掉,并单独添加tomcat依赖。

xml 复制代码
  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>9.0.45</version>
        <scope>provided</scope>
    </dependency>

在标签内加入<packaging>war</packaging>标签,放在、一块就行。

环境配置文件的调整

如果配置使用的是配置文件,并需要指定profiles.active那么需要自行在application(default配置文件里指定spring.profiles.active=prod。

启动类引导

增加启动类,使用war包后APP类的启动需要引导,此类要放到application.class类同目录下。

java 复制代码
class SpringbootProfileServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
}

打包部署

做完以上修改后,就可以用maven->clean,maven->package打包,生成的war包应该在target目录下。

可以先把war包放到tomcat webapps目录下启动测试下,然后再上传到app server。

相关推荐
王桑.2 分钟前
WebSocket---一种用于实时传输的网络协议
java·websocket·spring·java-ee
帝吃藕和2 分钟前
类加载和对象创建的执行顺序+例子
java·java笔试
CoderYanger7 分钟前
递归、搜索与回溯-综合练习:28.不同路径Ⅲ
java·算法·leetcode·深度优先·1024程序员节
鱼丸花生7 分钟前
Java 数组详解
java
用户84913717547168 分钟前
Tomcat 为什么要“造反”?深度解析 Java 类加载机制的“守”与“破”
java·jvm
jiayong2313 分钟前
Elasticsearch Java 开发完全指南
java·大数据·elasticsearch
321茄子15 分钟前
MySQL 事务隔离性及锁
java·数据库·mysql
杀死那个蝈坦18 分钟前
UV 统计(独立访客统计)
java·jvm·spring·kafka·tomcat·maven
带刺的坐椅20 分钟前
Solon AI 开发学习7 - chat - 四种消息类型及提示语增强
java·ai·llm·solon
济宁雪人21 分钟前
Java安全基础——序列化/反序列化
java·开发语言