小跟班是個新手,為了這個錯誤搞了大半天嫂伞,tomcat解壓了無數(shù)遍最后才發(fā)現(xiàn)不是tomcat的問題。
問題:Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
這個問題小跟班發(fā)現(xiàn)有兩種情況會出現(xiàn)餐塘,如下:
1搂赋、項目工程過大,服務器啟動時間過長導致tomcat超時万细,這個問題百度上太多了扑眉,小跟班一開始也以為是這個問題,結果搞了半天不是這個原因赖钞,附上一個連接腰素,來解決這種情況下的tomcat 45s超時:http://blog.csdn.net/u011067360/article/details/37884783
2、這就是小編遇到的Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds問題了
錯誤信息一直打印這三句
45s后
因為這個超時的錯誤提示雪营,讓小跟班一直在找關于45s超時的問題弓千,但是使用無法解決。
過來根據(jù)上邊的三句警告才找到了真正的錯誤信息是什么:
仔細看異常發(fā)生在 (org.springframework.web.context.ContextLoader)献起,即在ContextLoader時洋访,spring framework需要使用log4j但此時log4j未尋找到其配置文件。其實解決方法谴餐,只要將log4j的listener放在spring context的前面就可以了姻政。此外,如果按照默認的log4j配置文件位置也可以避免這個警告(src/log4j.properties岂嗓,即WEB-INF/classes/log4j.properties)汁展,這是因為spring framework獲取log時,log4j可以找到其配置文件了厌殉。
log4j 文件內配置如下(資源來自這個鏈接)
### set log levels ###
log4j.rootLogger = debug ,? stdout ,? D ,? E
### \u8F93\u51FA\u5230\u63A7\u5236\u53F0 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =? %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
### \u8F93\u51FA\u5230\u65E5\u5FD7\u6587\u4EF6 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## \u8F93\u51FADEBUG\u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}? [ %t:%r ] - [ %p ]? %m%n
### \u4FDD\u5B58\u5F02\u5E38\u4FE1\u606F\u5230\u5355\u72EC\u6587\u4EF6 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.log ## \u5F02\u5E38\u65E5\u5FD7\u6587\u4EF6\u540D
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ## \u53EA\u8F93\u51FAERROR\u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7!!!
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}? [ %t:%r ] - [ %p ]? %m%n
web.xml中配置如下(切記善镰!一定要配置在spring監(jiān)聽器之前,這是因為spring framework獲取log時年枕,log4j可以找到其配置文件了)
然后在啟動服務器打印的錯誤信息就很明顯了
是因為spring容器去訪問數(shù)據(jù)庫連接不到數(shù)據(jù)庫炫欺,產(chǎn)生了超時。
因為小跟班工程中使用的ssh熏兄,配置了spring容器品洛,在程序啟動是會根據(jù)web.xml的配置進行加載spring的配置文件applicationContext.xml
小跟班的spring配置如下
spring容器去配置c3p0連接池時树姨,會去訪問數(shù)據(jù)庫(這里小跟班用的MySQL)
重點就是小跟班的數(shù)據(jù)庫服務沒有啟動!G抛础帽揪!才導致了spring連接數(shù)據(jù)庫是一直在等待,而tomcat等待spring配置加載完畢辅斟,才產(chǎn)生了最上邊的兩個錯誤信息(45s超時的錯誤信息W)
哈哈! 啟動數(shù)據(jù)庫服務就解決問題了