[com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent

今天服务器启动突然发生异常

15-Jun-2018 07:31:31.256 警告 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [flyElephant] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

15-Jun-2018 07:31:31.256 警告 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [flyElephant] 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.

[2018-06-15 07:31:31,272] Artifact flyElephant:war exploded: Error during artifact deployment. See server log for details.

tomcat的log

 java.lang.NoClassDefFoundError: org/apache/log4j/LogManager
at org.springframework.util.Log4jConfigurer.shutdownLogging(Log4jConfigurer.java:116)
at org.springframework.web.util.Log4jWebConfigurer.shutdownLogging(Log4jWebConfigurer.java:170)
at org.springframework.web.util.Log4jConfigListener.contextDestroyed(Log4jConfigListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4900)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5537)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:221)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:149)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1733)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:484)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:433)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1471)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1312)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1404)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:832)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$256(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.LogManager
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
... 49 more


15-Jun-2018 07:31:31.216 信息 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext


一开始以为是log4j的jar包出了问题,其实是mybatis的select标签resultMap中填写的是java类,而不是xml中定义好的Map



### 回答1: 这是一条警告信息,意思是在 Web 应用程序停止时,虽然已经注册了 JDBC 驱动程序 [oracle.jdbc.oracledriver],但未能注销它。为了防止内存泄漏,强制注销了 JDBC 驱动程序。 ### 回答2: 这段话的意思是,在 web 应用程序停止时,虽然已经成功地注册了 Oracle 数据库的 JDBC 驱动程序 [oracle.jdbc.oracledriver],但是在停止时未能成功注销该驱动程序,从而导致可能会导致内存泄漏的情况发生。为了避免这种情况的发生,系统将强制注销该 JDBC 驱动程序。 JDBC 驱动程序是一种连接数据库的工具,它可以让我们建立连接、发送 SQL 命令、获取和处理查询结果。在 web 应用程序中,我们通常会把 JDBC 驱动程序注册到应用程序中,以便我们在需要访问数据库时能够正常使用它。 然而,当 web 应用程序停止时,我们也需要注销已经注册的 JDBC 驱动程序,以便释放相关的资源,避免内存泄漏的情况发生。如果我们没有正确注销 JDBC 驱动程序,就有可能会造成系统资源的浪费,从而影响应用程序的性能和稳定性。 以上述情况为例,系统检测到在停止 web 应用程序时未能成功注销已经注册的 JDBC 驱动程序,因此就会强制注销该驱动程序,以避免内存泄漏的情况发生。这样做可以保证系统的稳定性和安全性,避免不必要的资源浪费,提高应用程序的性能。 ### 回答3: 该消息是在Web应用程序停止时由Tomcat服务器系统自动生成的警告消息。 JDBC是Java Database Connectivity的缩写,是Java程序用于在数据库中执行操作的API集合。当应用程序运行时,必须先将JDBC驱动程序注册到JVM的内存中,以便在需要连接到数据库时在应用程序和数据库之间建立通信。该警告消息指出,在注册了JDBC驱动程序以后,当web应用程序停止时未成功注销它,因而可能导致内存泄漏的风险。 内存泄漏是指有一个运行中的程序使用了系统的内存资源,但是在使用过程中并未正确释放资源,导致系统中的内存资源被无限制地占用,最终可能导致系统崩溃。在本例中,应用程序在注册JDBC驱动程序成功后,未正确地注销JDBC驱动程序,导致被占用的JVM内存越来越多,并可能在长时间运行的情况下导致内存不足,程序执行出现错误。 为了避免这种情况的发生,在web应用程序停止时,Tomcat服务器系统强制注销该JDBC驱动程序,以释放占用的系统内存资源。因此,如果您看到了这个消息,您应该检查您的应用程序代码,确保在应用程序运行期间,所有注册的JDBC驱动程序在应该注销它们的时候都进行了正确的注销。这是一个很小的问题,但是如果不及时处理,可能会导致应用程序的严重错误,影响到应用程序的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值