SpringCloud启动异常Stopping service [Tomcat]
Posted 闲人鹤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud启动异常Stopping service [Tomcat]相关的知识,希望对你有一定的参考价值。
问题场景:
领导让我搭建一套Jenkins实现自动化部署,项目是SpringCloud项目,配置的过程很顺利,给我提供了一台服务器做部署测试(服务器以前是做dev环境,很长时间没人用了)
我把所有项目配置上,但至少一半构建失败,异常信息:[main] INFO o.a.catalina.core.StandardService -Stopping service [Tomcat]
启动日志的最后一行就是这个,没有任何有用的信息,找了很多资料,耽误了2天时间终于解决了。
解决思路:首先要明确一点,既然是Tomcat自动停止了,肯定是有代码报错,只是你的项目没有打印错误日志。
解决办法:
1. 给启动类加上try..catch...并打印catch的信息。
@SpringBootApplication public class Application { static Logger logger = LoggerFactory.getLogger(Application .class); public static void main(String[] args) { try { SpringApplication.run(Application .class, args); logger.info("启动成功!"); } catch (Exception e) { logger.error("启动异常", e); } } }
2. 由于Tomcat的默认日志工具和SpringCloud的默认日志工具是不一样的:Tomcat使用的是log4j;SpringBoot使用的是Logback。
我配置的也是Logback,所以只能输出logback日志,而tomcat的log4j的日志并没有输出。这种情况我们采用Slf4j,Slf4j并不是日志输出工具,他的作用是日志继承接口,用于整合不同的日志工具。
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId>
<version>1.8.0-beta4</version> </dependency>
这个依赖可以将log4j输出到slf4j,从而用sl4j输出。
经过这两个配置就可以看到错误日志了。
我的错误信息是: java.lang.IllegalArgumentException: Could not resolve placeholder \'kafka.ip\' in value "${kafka.ip}"
配置文件都放在Spring Cloud Config里,我用idea本地使用dev服务器的配置是可以正常启动的。再检查服务器里的配置文件,发现config的文件是读取本地的, 并不是实时从git上来取,如下图:
config-common.properties config-log.properties config-mongodb.properties config-mysql.properties ........
在服务器上每个项目目录有一个config文件夹,config文件夹有配置:application.properties bootstrap.properties logback-spring.xml
SpringCloud的jar启动原则,如果本地有config和lib文件夹,是不会读取jar包里面的config和lib的。我的问题在于bootstrap.properties不是最新的,重新传一份再执行java命令,启动成功。
以上是关于SpringCloud启动异常Stopping service [Tomcat]的主要内容,如果未能解决你的问题,请参考以下文章
spring boot 2 内嵌Tomcat 抛出异常 “Stopping service [Tomcat]”
spring boot 2 内嵌Tomcat 抛出异常 “Stopping service [Tomcat]”
springcloud项目使用debug模式启动的时候,报nacos的异常
FlinkFlink Inconsistent execution state after stopping with savepoint