这是tomcat启动日志的相关部分:
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.
Run Code Online (Sandbox Code Playgroud)
它导致的问题是它基本上导致Web应用程序无法正常启动.
任何想法如何解决这一问题?
显然,这是JDBC提供程序堆栈中的错误.但无论如何,我在Jetty中使用了一些类似的代码:
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) {}
Run Code Online (Sandbox Code Playgroud)
}
有时,尤其是在Tomcat上使用Spring应用程序时,错误消息具有误导性-当与任何JDBC驱动程序错误完全无关,而只是某些应用程序BEAN初始化方法(或@PostConstruct)失败时。错误堆栈跟踪已隐藏,仅显示在tomcat / logs / localhost.xxx文件中。请注意这种行为。这花了我很多时间。
此致,Yosi Lev
| 归档时间: |
|
| 查看次数: |
51289 次 |
| 最近记录: |