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。

相关推荐
玩毛线的包子10 分钟前
Android Gradle学习(十三)- 配置读取和文件写入
java
青岛少儿编程-王老师22 分钟前
CCF编程能力等级认证GESP—C++6级—20250927
java·c++·算法
一條狗1 小时前
学习日报 20251007|深度解析:基于 Guava LoadingCache 的优惠券模板缓存设计与实现
java·oracle·loadingcache
Miraitowa_cheems1 小时前
LeetCode算法日记 - Day 64: 岛屿的最大面积、被围绕的区域
java·算法·leetcode·决策树·职场和发展·深度优先·推荐算法
Lisonseekpan2 小时前
Spring Boot 中使用 Caffeine 缓存详解与案例
java·spring boot·后端·spring·缓存
为java加瓦2 小时前
Rust 的类型自动解引用:隐藏在人体工学设计中的魔法
java·服务器·rust
SimonKing2 小时前
分布式日志排查太头疼?TLog 让你一眼看穿请求链路!
java·后端·程序员
消失的旧时光-19432 小时前
Kotlin 判空写法对比与最佳实践
android·java·kotlin
小许学java2 小时前
Spring AI快速入门以及项目的创建
java·开发语言·人工智能·后端·spring·ai编程·spring ai
一叶飘零_sweeeet2 小时前
从 “死锁“ 到 “解耦“:重构中间服务破解 Java 循环依赖难题
java·循环依赖