Tomcat热部署时出现无法注册JDBC驱动的解决方案

使用Hudson做CI,进行自动部署时,出现如下异常:

 

The web application [/XXX] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered

       项目使用的数据库连接池是common-dbcp,然后在网上搜了一把,原因是从tomcat6.0.24之后加入了防止内存泄漏的机制,但是把server.xml中的<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />注释掉并不管用。

 

     后来在https://issues.apache.org/jira/browse/DBCP-332中找到解决方案,那就是重写BasicDataSource的close方法:

package com.ourcompany.util;

import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.dbcp.BasicDataSource;

/** 
* @ClassName: OurDataSource 
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author  
*/
public class OurDataSource extends BasicDataSource {
	@Override
	public synchronized void close() throws SQLException {
		DriverManager.deregisterDriver(DriverManager.getDriver(url));
		super.close();
	}
}

  然后修改application.xml中的配置为:

<bean id="dataSource" class="com.wafersystems.util.OurDataSource" destroy-method="close">

 重新打包,再次进行热部署,没有出现该异常信息,问题解决。

 在此做下记录。

      

你可能感兴趣的:(java tomcat)