registered the JBDC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. (转)

最近项目中遇见一问题,在开发环境没有问题的代码,到了生产环境就会报如下错误:

 

  严重: 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. 

 

一开始以为是数据库账号密码错误,或数据库链接不上,因为这两个原因也确实会报这个错,可是通过确认发现不是以上两个原因引起的,当时真的是百思不得其解,后来通过一步步的排查和测试,发现,以前生产、测试、开发环境的数据库都是集群形式的,我们配的也是集群形式多个节点的数据库链接,如下:

jdbc.url=jdbc:oracle:thin:@(DESCRIPTION=(FAILOVER = yes)(ADDRESS = (PROTOCOL = TCP)(HOST =XXX.XXX.XXX.XXX)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST =XXX.XXX.XXX.XXX)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = cedb)))

 

而我们新建的这一台生产环境连的数据库是直连的,没有做数据库集群,所以加载链接的时候报如上错误,把链接的配置设置如下即可:

jdbc.url=jdbc\:oracle\:thin\:@XXX.XXX.XXX.XXX\:1521\:cedb

 

这次的异常真的是受教了,希望可以帮到有一样困惑的朋友。

 

http://blog.csdn.net/suigaopeng/article/details/26579191

 

http://blog.sina.com.cn/s/blog_4550f3ca0101byg1.html

 

 

今天开始学习了struts2, 于是下了最新的版本struts2.2.3.1,在使用的过程中总是报错:A web application created a ThreadLocal with key of type , 尽管出现了这个错误,但是并不妨碍程序正常运行, 虽然程序虽然能正常运行,但是看的这个错误很是别扭,所以网上搜了一下看看,也就有了下面这篇文章

struts2关于A web application created a ThreadLocal with key of type 异常解决办法 

 

created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@12c74b9]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@1a34544]) but failed to remove it。。。。

这类问题的解决办法:

       http://confluence.atlassian.com/pages/viewpage.action?pageId=218275753

看看老外的这篇,好像就是在讲这个问题,原因大概是说tomcat 6.025之后引入了一种内存泄露的检查机制,会把不能垃圾收集的对像做日志。

第一种解决办法:

使用低于6版本的tomcat

 

第二种解决办法:

在tomcat的server.xml文件(在tomcat的安装路径下的conf文件夹里)中把

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>

这个监听给关了。

就是用<!--。。。-->把下面三句话括起来就可以啦。

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />        <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />        <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

http://blog.csdn.net/zhuhezan/article/details/6882089

 

Description

BasicDataSource's method close() doesn't deregister JDBC driver. This causes permgen memory leaks in web server environments, during context reloads. For example, using Tomcat 6.0.26 with Spring, and BasicDataSource declared in Spring context, there is a message printed at web application reload:

SEVERE: A web application registered the JBDC 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.

I was able to fix it by overriding close method this way:

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

but I think it should be probably the default behavior of BasicDataSource. Or perhaps there should be some flag/setting on BasicDataSource, named "deregisterDriverAtClose" or so.

https://issues.apache.org/jira/browse/DBCP-332

 

 

 

 

 

 

 

时间: 2024-10-03 06:19:11

registered the JBDC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. (转)的相关文章

tomcat启动报错-Cannot load JDBC driver class &amp;amp;#39;oracle.jdbc.OracleDriver&amp;amp;#39;

问题描述 Cannot load JDBC driver class 'oracle.jdbc.OracleDriver' 以前写的代码没有问题,现在在新的机器上部署就报错: 2013-10-8 22:36:17 org.apache.catalina.core.StandardHostDeployer install 信息: Installing web application at context path /NetCTOSS_V3 from URL file:E:Tomcat 5.0web

SQLNestedException: Cannot load JDBC driver class &amp;amp;#x27;oracle.jdbc.OracleDriver&amp;amp;#x27;

问题描述 org.apache.tomcat.dbcp.dbcp.SQLNestedException:CannotloadJDBCdriverclass'oracle.jdbc.OracleDriver'org.springframework.jdbc.CannotGetJdbcConnectionException:CouldnotgetJDBCConnection;nestedexceptionisorg.apache.tomcat.dbcp.dbcp.SQLNestedException

PPAS 替换oracle JDBC驱动配置

阿里云使用PPAS替换oracle会设计到切换JDBC驱动的配置问题 下面是三者的区别 注意可以使用PG原生JDBC连接PPAS,但是会失去一些兼容特性 --oracle 驱动: driver=oracle.jdbc.OracleDriver 连接串: conn=jdbc:oracle:thin:@1.1.1.1:1521:MYDB 驱动文件:ojdbc6.jar --PPAS 驱动:driver=com.edb.Driver 连接串:conn=jdbc:edb://1.1.1.1:5435/m

Oracle JDBC版本区别(转)

oracle\product\11.2.0\dbhome_1\jdbc\lib ojdbc5.jar ojdbc5dms.jar ojdbc5dms_g.jar ojdbc5_g.jar ojdbc6.jar ojdbc6dms.jar ojdbc6dms_g.jar ojdbc6_g.jar simplefan.jar   在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle JDBC驱动来解决的?最常使用的ojdbc14.jar有多个版本,classes12.j

如何在你的Linux机器上安装运行Oracle jdbc:thin with java (OAS) DBA

oracle  如何在你的Linux机器上安装运行Oracle 开始行动 在RedHat上安装Oracle可以是相当轻而易举的,但要是完全跟着Oracle公司的文档走就未必那么容易了 .最快的捷径是Tom Bisset的主页:http://jordan.fortwayne.com/oracle. 如果您看了Tom的主页,那么您会注意到他漏了JDBC的安装.如果您准备使用JDBC(对于跨平台的Oracle应用十分方便),只需在安装屏幕要求您选择组件(components)时,加上该选项即可.当然,

Oracle JDBC 没响应,是不是BUG?

问题描述 在Java 中执行下面SQL语句没有响应,DEBUG 无法跟踪代码,但此语句在SQL DEVELOPER 执行没问题,在Java代码中执行其他 SQL 语句基本也没问题.insert into T1 (ID, VALUE) select ID, VALUE from T2import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import oracle.jdbc.driv

SQL Server 2000 Driver for JDBC Service Pack 3 安装测试方法_java

1.安装:SQL Server 2000 Driver for JDBC Service Pack 3 下载安装JDBC SP3 http://www.jb51.net/softs/234108.html 里面的安装包 按照提示安装可以了.成功后有三个文件要使用: c:/program files/Microsoft SQL Server 2000 Driver for JDBC/lib/msbase.jar c:/program files/Microsoft SQL Server 2000

Ignite 配置更新Oracle JDBC Drive

       如果使用Oracle 12C 作为Ignite 的Repository的话,在Repository Createion Wizard的配置过程中,会出现ORA-28040:No matching authentication protocol错误,出现这个错误是因为Ignite使用的JDBC版本过低原因造成.需要升级JDBC的版本 步骤1:先查看本地Java版本并去官方网站下载Oracle JDBC Drive [root@getlnx05 ignite_8_3_407]# jav

[INS-20802] Oracle Net Configuration Assistant failed

        [INS-20802] Oracle Net Configuration Assistant failed.在安装Oracle 11g R2时出现了该错误提示.以前安装的时候没有碰到过类似 的错误.原来是64bit和32bit系统兼容性的问题.如果基于64bit硬件安装32bit 的Linux 和32bit的Oracle 11g,则需要安装patch 8670579.下 面给出patch的安装过程.   一.错误提示    [INS-20802] Oracle Net Confi