程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> MySql連接異常解決,MySql連接解決

MySql連接異常解決,MySql連接解決

編輯:JAVA綜合教程

MySql連接異常解決,MySql連接解決


這兩天遇到一個mysql連接的問題,找人弄了好幾天也沒弄好,先看一下報錯信息:

====================================================================

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection        

at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:596)        

at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)        

at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:334)        

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)        

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)        

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)        

at hitec.dms.element.service.biz.impl.DmsMonitorThreadServiceImpl$$EnhancerByCGLIB$$a293fc8f.findList(<generated>)        

at hitec.influence.platform.quartz.ThreadListener.monitorThread(ThreadListener.java:117)        

at hitec.influence.platform.quartz.job.GatherJob.process(GatherJob.java:12)        

at hitec.influence.platform.quartz.QuartzDispatcher$QuartzJob.execute(QuartzDispatcher.java:377)        

at org.quartz.core.JobRunShell.run(JobRunShell.java:202)        

at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525) Caused by: org.hibernate.exception.JDBCConnectionException: Cannot open connection        

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:97)        

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)        

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)        

at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)        

at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)        

at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)        

at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)        

at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354)        

at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:555)        

... 11 more Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.        

at sun.reflect.GeneratedConstructorAccessor248.newInstance(Unknown Source)        

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)       

at java.lang.reflect.Constructor.newInstance(Constructor.java:526)        

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)        

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)        

at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350)        

at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2393)        

at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430)        

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215)        

at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)        

at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)        

at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)        

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)        

at java.lang.reflect.Constructor.newInstance(Constructor.java:526)        

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)        

at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)        

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)        

at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)        

at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)        

at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)        

at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)        

at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)        

at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)        

at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)        

... 16 more Caused by: java.net.SocketException: 打開的文件過多        

at java.net.Socket.createImpl(Socket.java:447)        

at java.net.Socket.<init>(Socket.java:421)        

at java.net.Socket.<init>(Socket.java:241)        

at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)        

at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)        

... 34 more

====================================================================

看到這些報錯信息,一直以為是代碼裡的hibernate建立連接後一直沒有斷開,直到連接空閒8小時後mysql給斷開不讓連接,後來一同事以前遇到過這樣的問題,其實一直沒有注意到下方的一個異常“more Caused by: java.net.SocketException: 打開的文件過多”,因為我的程序是部署在linux上,因為linux有一個ulimit最大打開文件個數,默認是1024(ulimit -a即可查看相關信息),後來查到是別人封裝好的jar包裡有一個InputStream只有新建打開沒有關閉,一直在循環新建打開文件,直到打開超過1024報錯,把inputstream加上關閉就OK啦!

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved