亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring boot2內嵌Tomcat拋出異常怎么解決

發布時間:2021-12-24 17:29:46 來源:億速云 閱讀:356 作者:iii 欄目:互聯網科技

這篇文章主要講解了“spring boot2內嵌Tomcat拋出異常怎么解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“spring boot2內嵌Tomcat拋出異常怎么解決”吧!

我在使用springboot時,當代碼有問題時,發現控制臺打印下面信息:

Connected to the target VM, address: '127.0.0.1:42091', transport: 'socket'
log4j:WARN No appenders could be found for logger (org.springframework.boot.devtools.settings.DevToolsSettings).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.6.RELEASE)

2018-10-25 10:10:21.425  INFO 102158 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-10-25 10:10:21.427  INFO 102158 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.34
2018-10-25 10:10:21.444  INFO 102158 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
2018-10-25 10:10:21.590  INFO 102158 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-10-25 10:10:24.522  INFO 102158 --- [  restartedMain] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
Disconnected from the target VM, address: '127.0.0.1:42091', transport: 'socket'

Process finished with exit code 0

WTF?沒有錯誤信息怎么解決問題? 各種搜索,總之就是代碼有問題,自己檢查把...

好吧,直接debug把

內嵌tomcat的入口類是org.apache.catalina.core.StandardService

//TODO 后面補上過程

最終找到org.springframework.context.support.AbstractApplicationContext 定位方法refresh()

if (logger.isWarnEnabled()) {
				logger.warn("Exception encountered during context initialization - " +
						"cancelling refresh attempt: " + ex);
			}

debug可以正常進入,然后就看到我們希望看到的 ex了

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fabricApiController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fabricTemplate': Injection of resource dependencies failed; nested exception is org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'fabricConfiguration': Could not bind properties to 'FabricConfiguration' : prefix=blockchain, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'blockchain.channel-peers' to java.util.List<com.smy.bc.fabric.core.configuration.FabricConfiguration$EndPoint>

問題發現了,解決自己代碼問題,然后重新啟動,正常! 萬事大吉?錯,這才開始

上面我們簡單解決了問題,但是根源沒有解決!
要說解決方案把當前流行的日志體系簡單說一遍
下面整理的來源網絡:

常見的日志框架,注意不是具體解決方案

1 Commons-logging: apache 最早提供的日志的門面接口。避免和具體的日志方案直接耦合。類似于JDBC的api接口,具體的的JDBC driver實現由各數據庫提供商實現。通過統一接口解耦,不過其內部也實現了一些簡單日志方案
2 Slf4j: 全稱為Simple Logging Facade for JAVA:java簡單日志門面。是對不同日志框架提供的一個門面封裝。可以在部署的時候不修改任何配置即可接入一種日志實現方案。和commons-loging應該有一樣的初衷。

常見的日志實現:
log4j
logback
jdk-logging

詳細優缺點不是本文重點,請自行搜索。

接著分析上面的問題,Commons-logging 是tomcat默認的日志系統(apache自家東西得支持),具體的日志實現,根據系統已存在日志系統選擇。 簡單列舉以下log的實現: org.apache.commons.logging.Log | org.apache.commons.logging.impl.SimpleLog org.apache.commons.logging.impl.NoOpLog org.apache.commons.logging.impl.Log4JLogger org.apache.commons.logging.impl.SLF4JLog org.apache.commons.logging.impl.Jdk14Logger

springboot 默認使用的是logback日志實現,問題就出現在這里了!!!common-logs并沒有logback的實現!

根據maven依賴,我們看到log4j和logback的包都被引入了,然后tomcat之能選擇的是log4j,springboot使用的是logback。 log4j和logback只見缺少一個橋梁,正是缺少的這個橋梁,導致springboot只能輸出logback!!!

中間的橋梁就是下面這個依賴

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
    </dependency>

這個依賴可以將log4j輸出到slf4j,從而從sl4j輸出。

總結: 總結一下,已經搞明白是slf4j/common-logs <> log4j和logback的恩怨情仇

第一種解決方式:根據日志定位問題,然后采用加法處理,增加jcl-over-slf4j,打通slf4j和common-logs通道

第二種解決方式:解決沖突,一山不容二虎,排除掉slf4j,common-logs任意一方,spring使用slf4j,那可以排除調common-logs

感謝各位的閱讀,以上就是“spring boot2內嵌Tomcat拋出異常怎么解決”的內容了,經過本文的學習后,相信大家對spring boot2內嵌Tomcat拋出異常怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三江| 黄大仙区| 封开县| 四子王旗| 宁陵县| 东乌珠穆沁旗| 景洪市| 沅江市| 利津县| 五家渠市| 饶平县| 于都县| 札达县| 晋州市| 莎车县| 克山县| 封丘县| 杂多县| 东乡族自治县| 罗定市| 阜阳市| 罗城| 璧山县| 三台县| 根河市| 文化| 翁源县| 沙雅县| 泗水县| 高台县| 新田县| 潢川县| 黑河市| 黎平县| 榆中县| 昭苏县| 耿马| 眉山市| 英超| 准格尔旗| 南宁市|