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">

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

 在此做下记录。

      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值