在Tomcat7.0.2中使用DBCP的BasicDataSource有時會報內存泄漏,信息如下:

2010-10-22 21:37:41 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
嚴重: The web application [/Spring_2500_UserRegister_SSH] 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.

解決辦法:
public class XBasicDataSource extends BasicDataSource {
    @Override
    
public synchronized void close() throws SQLException {
        DriverManager.deregisterDriver(DriverManager.getDriver(url));
        
super.close();
    }

}
強制注銷JDBC驅動才不提示這個。

在開發模式下,熱部署就會存在這種情況。奇怪的是,我按以前情況修改了,熱部署還是一樣,難道在開發模式下,熱部署就一定會存在內存泄漏?

詳細文檔請見https://issues.apache.org/jira/browse/DBCP-332