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命令,启动成功。

 

posted @ 2020-05-27 17:58  闲人鹤  阅读(3920)  评论(0编辑  收藏  举报