2010-04-09 184 views
13

這裏的tomcat的啓動日誌的相關部分:的Tomcat啓動失敗,因爲JDBC驅動程序加載的

SEVERE: Context [/f360] startup failed due to previous errors 
Apr 8, 2010 6:45:56 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
SEVERE: A web application registered the JBDC driver [org.apache.derby.jdbc.ClientDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 
Apr 8, 2010 6:45:56 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
SEVERE: A web application registered the JBDC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 
Apr 8, 2010 6:45:56 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 
SEVERE: A web application registered the JBDC driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 

,它會導致的問題是,它基本上使web應用程序無法正常啓動。

任何想法如何解決這個問題?

+0

啓動失敗,因爲以前* *的錯誤。請更新您的問題以包含這些錯誤。他們是這個問題的**根源。 – BalusC 2010-04-09 19:01:55

+0

問題是之前沒有列出任何錯誤。只有INFO消息。 – 2010-04-16 17:54:17

回答

4

有關JDBC驅動程序的SEVERE消息是由DBCP問題引起的。請參閱DBCP-332

+0

DBCP部分在哪裏? Tomcat的?我有Tomcat6/JDK6/MacOS X的上述錯誤,但它(相同的應用程序,使用postgres + jdbc)在Tomcat/JDK6/WinXP上運行正常。謝謝! – 2011-03-08 07:27:12

+0

感謝您的參考rgielen。這個解釋是有道理的。 – 2015-09-07 13:54:46

5

如果是DBCP問題,請停止tomcat,終止其他進程(如果您有多個tomcat正在運行),請刪除tomcat temp目錄(也可能是工作目錄)並重試。

+0

這真的幫了我。我試圖殺死tomcat,重新啓動,一切。當我關機,刪除臨時目錄,然後開始備份,一切正常:-)謝謝! – jpswain 2011-06-06 23:11:32

6

顯然,這是JDBC提供程序堆棧中的一個錯誤。但無論如何,我以前在碼頭的一些類似的代碼:

public class CleanupContextListener implements ServletContextListener { 
@Override 
public void contextDestroyed(ServletContextEvent servletContextEvent) { 
    Logger logger = Logger.getLogger("CleanupContextListener"); 
    Enumeration<Driver> drivers = DriverManager.getDrivers(); 
    while (drivers.hasMoreElements()) { 
     Driver driver = drivers.nextElement(); 
     ClassLoader driverclassLoader = driver.getClass().getClassLoader(); 
     ClassLoader thisClassLoader = this.getClass().getClassLoader(); 
     if (driverclassLoader != null && thisClassLoader != null && driverclassLoader.equals(thisClassLoader)) { 
      try { 
       logger.warn("Deregistering: " + driver); 
       DriverManager.deregisterDriver(driver); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
@Override 
public void contextInitialized(ServletContextEvent servletContextEvent) {}  

}

4

有時,特別是使用在Tomcat Spring應用程序時,該錯誤消息是誤導 - 當有在不涉及任何JDBC驅動程序錯誤除了某些應用程序的BEAN初始化方法(或@PostConstruct)之外,所有這些都失敗了。 錯誤堆棧跟蹤是隱藏的,只出現在tomcat/logs/localhost.xxx 文件中。 只需注意這一行爲。 這花了我很多時間。

問候, Yosi利

+0

這是真的。在部署我的Grails應用程序(使用Spring Framework)時,它具有在conf/DataSource.groovy文件中編譯的數據庫密碼。當然,我使用了錯誤的密碼,但唯一報告的錯誤是JDBC驅動程序的奇怪註冊。沒有其他數據庫錯誤被記錄。 Spring必須有一個選項來記錄詳細的所有數據庫啓動操作。 – 2015-10-23 21:34:25

+0

這是真的。真正的原因與jdbc無關。 – flower 2016-07-11 03:28:33

+0

這花費我幾個小時!謝謝Yosi Lev – FuzZ63 2017-08-25 03:06:54