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命令,啟動成功。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM