springboot发布外部tomcat步骤和异常处理:java.lang.NoClassDefFoundError: javax/el/ELManager

这两天想用ELK搭一套日志框架,想用tomcat的日志,但是都是springboot项目,就要改成war包,简单记录一下步骤;以及自己踩到的坑.

pom添加依赖
主要是因为springboot项目利用的是自己内置的tomcat,这边就是不依赖内置的tomcat,将其编译的作用域设置为provided

<!--外置tomcat启动-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
  1. 修改pom打包方式
    packaging 修改为war
	<groupId>com</groupId>
    <artifactId>ding</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
  1. 改造启动项
    就是改成继承SpringBootServletInitializer;因为springboot 自己能认识自己的启动项,而外部tomcat是不认识的,所以要自己继承,并读取配置
@SpringBootApplication
@EnableAsync
//public class DingApplication{
public class DingApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DingApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(DingApplication.class, args);
    }
}

  1. 可以打包了mvn clean package -Dmaven.test.skip=true
  2. 将war包直接放到tomcat 的webapp目录下,启动并查看catania.out日志:
    **重点:**启动tomcat,你可能会遇到一个错:
    Caused by: java.lang.NoClassDefFoundError: javax/el/ELManager
    我被卡了好久,是因为:tomcat提供的el-api 和项目里面的el-api.jar冲突;这时候你需要去找到自己本机上用的el-api的版本,copy到tomcat的lib目录下,覆盖原来的jar包
    这里写图片描述
    一般在idea或者eclipse的lib目录下,可以用全局搜索查找.
    这个时候就可以正常交启动并访问了.

如果大家觉得有帮助的话,麻烦点击下面的链接,注册一下tushare, 一个提供金融大数据的平台, 我需要大家的注册,获取积分, 互帮互助,感谢:
https://tushare.pro/register?reg=279473

总结

  1. 要修改为外部tomcat启动springboot项目,一定要注意jar包冲突.
  2. 定位问题一定要抓住重点,不能到处查找.
  3. 最好不要将springboot 项目用外置tomcat启动,因为坑真的甚多, 除了我上面提到的jar包冲突之外.我还遇到了thyumeleaf引擎的问题,实在头大
  • 6
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 10
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 10

打赏作者

多吃核桃会补脑

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值