spring boot项目war包无法运行解决办法

测试环境
Spring Boot 2.7.5
Tomcat 9.0.69

spring boot项目中默认的打包方式是jar包,如果想要打war包,就需要更改配置(以Maven为例)
pom.xml

<packaging>war</packaging>

更改过后,打包后确实是war包,但是这个war包放在外部的Tomcat中无法运行。查看官方文档,打war包的时候有这样的警告。

Because Spring WebFlux does not strictly depend on the servlet API and applications are deployed by default on an embedded Reactor Netty server, War deployment is not supported for WebFlux applications.

如何解决?

其实方法还是很简单的,在Application启动文件同级目录下新建一个ServletInitializer文件,内容如下

package com.demo;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }

}

记得更改包名和启动类名称。
pom.xml中新增tomcat依赖,并设置scope为provided,这样spring boot项目中自带的Tomcat就不会影响外部的Tomcat

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
经过测试,只新建ServletInitializer不配置tomcat依赖同样可以运行,但是官方文档给出了解决办法,还是按照官方文档来,避免因为测试环境不同,出现不同结果。
更详细的内容可以参考官方文档
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值