关于C3p0插件DB问题,困扰很久了.

波总,之前使用c3p0插件有点问题,经过优化之后我已经把C3P0插件优化配置好了,但是一天总有一点点异常.想问下是不是底层没有对连接进行关闭.下面是我的报错和配置.希望能帮我看一下下.谢谢.

image.png

image.png

评论区

JFinal

2018-10-12 17:51

检查一下自己的代码有没有
Connection conn = getConnection() 这样的代码,如果有的话要自行关闭:
conn.close();

此外,建议换上 DruidPlugin 或者 HikariCpPlugin, C3p0Plugin 太老了很久没更新了

JM-java

2018-11-04 14:53

@JFinal 波总,DruidPlugin有一个问题,就是不能做到已经死掉的线程自动处理.由于数据库的超时是设置的8小时,所以系统启动超过一段时间,会出现一系列的报错,原因我也知道,但是使用DruidPlugin的默认设置也根本没有解决到问题.个人认为这个不是由于DruidPlugin的问题,而是Druid 这个阿里数据库插件本来就不成熟.所以我才用的c3p0的数据源.就没出现这个报错.但是出现了另外一个报错.就是上图的那个报错.我没有任何getconnction()类似的代码,全是用的底层自带的代码.使用DruidPlugin的具体报错为
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 29,324,843 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3589)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3478)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4019)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2310)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:2714)
at com.alibaba.druid.wall.WallFilter.preparedStatement_executeQuery(WallFilter.java:622)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:2711)
at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeQuery(FilterEventAdapter.java:465)
at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:2711)
at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeQuery(PreparedStatementProxyImpl.java:145)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:227)
at com.jfinal.plugin.activerecord.DbPro.query(DbPro.java:80)
... 31 more
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3039)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3489)
... 46 more.

JFinal

2018-11-04 15:15

druid 有一个配置可以支持 8 小时闲置问题,具体是哪个忘记了,看一下它的官方文档, c3p0 是不建议使用的,太老了

JFinal

2018-11-04 15:16

升一下 druid 版本再试试看

JM-java

2018-11-05 11:46

@JFinal druid的版本是 druid-1.0.29.应该不会有问题.其中druidPlugn的设置里面针对mysql 8小时超时的问题的设置是 .
private long timeBetweenEvictionRunsMillis = DruidDataSource.DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS; 默认的参数 DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS 为60000L.即60秒 个人觉得合理.这些问题我都已经一一在服务器上做过测试.但是druidPlugn始终在系统启动3-4天之内会出现我回复波总的那个问题.我也很奇怪为什么其他人没有出现这个问题.

JFinal

2018-11-05 14:28

@JM-java 使用 druid 的情况下,其他人是从来没碰到过这个问题的

JM-java

2018-11-09 09:29

@JFinal 波总,想问下JDK,TOMCAT这些标准配置是什么? 我实在找不出问题了.想按照标准配置重新搭环境试试.druid使用的默认配置第二天早上还是一大篇的报错.

JFinal

2018-11-09 09:49

@JM-java JDK 就配置了一下环境变量:JAVA_HOME

tomcat 配置在这里:
https://my.oschina.net/jfinal/blog/353062

druid 输出的东西要注意看是 INFO、DEBUG 还是 ERROR, 前两个不算错误输出

JM-java

2018-11-09 10:37

@JFinal 主要是想问下 jdk版本,tomcat版本那些.这些都配置上了的

热门反馈

扫码入社