一次tomcat启动异常的问题定位,分析思路

  前情提要: 上周放假之前测试的时候启动tomcat明明是好的呀, 这周来了刚改几行代码测试一下. 就完犊子了, 咋回事呢? 我不禁陷入了沉思...

  启动后日志打印如下:


启动日志
  1. 在日志中没有打印任何异常, 首先考虑的是把
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:

这一行内容百度一下, 看看通常的处理办法是什么.

  1. 我自己是怀疑jar包冲突, 因为我最近的改动就是引入了一个公司内部的一个jar包, 为了验证我的想法, 我切换到没有改动的其他分支. 启动正常. 用IDEA自带的jar包冲突插件排除当前分支有冲突的依赖. 这个jar包中依赖的内容比较少. 问题依然存在...

  2. 百度有提到说是slf4j, log4j, logback 这几个日志的冲突. 按照他们的想法整了半天, 也白扯. 还有让我配置日志级别的, 也不行啊.

  3. 怀疑是环境问题, 跑到springboot 启动后的临时文件删了当天的一堆文件, 在下面这个路径
    C:\Users\user\AppData\Local\Temp

  4. 我已经崩溃,电脑重启. 没有解决.

  5. 搜索stopping service 关键字. 有人提到要到tomcat内部查看日志. 周所周知, springboot使用的是内置的tomcat, 它的入口类是org.apache.catalina.core.StandardService. 双击shift(我的快捷键是这样的)查看class文件


    image.png

    然后莫名其妙的让我到AbstractApplicationContext #refresh()方法中debug问题. 思路是对的, 我想了半天也不知道为啥跳跃性这么大, 自我分析一番这个refresh方法就是刷新spring容器用的. 在springboot启动类中有

SpringApplication.run(Main.class, args);

这样一个方法. 在这个方法的最底层调用的就是AbstractApplicationContext #refresh().

debug结果如下:


image.png

竟然是没有读取到配置, 但是我的配置写了啊?我也没改redis的配置???

  1. 查看了新引用的那个包, 包中配置了不同环境的application.yml. 恰巧我使用的项目中也有个application-dev.yml. 可能是先加载那个jar包的,然后就不加载项目中的了.沟通后,重新发布jar包. 问题得到解决.
  2. 总结: 要了解源码的大致流程, 譬如tomcat.读源码还是有用的,可是我懒啊; 其次发布版本要增加版本号,要不可能引用的还是之前的旧版本;

你可能感兴趣的:(一次tomcat启动异常的问题定位,分析思路)