设为首页 收藏本站
查看: 1056|回复: 0

[经验分享] 应用程序用tomcat部署,长时间应用程序没有被调用,访问MySQL报错

[复制链接]

尚未签到

发表于 2016-10-23 08:07:00 | 显示全部楼层 |阅读模式
  应用程序用tomcat部署,每过一段时间,比方说有一个晚上应用程序没有被调用,然后一旦程序访问MySQL数据库,就会抛出异常:
java.sql.SQLException: Connection.close() has already been called. Invalid operation in this state
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been
网上找了很多解决方案均无效,后来改用c3p0链接池,马上解决问题!
一下是c3p0 在spring中的配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass"><value>com.mysql.jdbc.Driver</value></property>
<property name="jdbcUrl"><value>jdbc:mysql://172.16.3.79:3306/test?useUnicode=true&amp;characterEncoding=UTF-8</value></property>
<property name="user"><value>root</value></property>
<property name="password"><value>root</value></property>
<property name="minPoolSize"><value>100</value></property>
<property name="maxPoolSize"><value>400</value></property>
<property name="maxIdleTime"><value>28000</value></property>
<property name="acquireIncrement"><value>5</value></property>
<property name="maxStatements"><value>0</value></property>
<property name="initialPoolSize"><value>2</value></property>
<property name="idleConnectionTestPeriod"><value>28000</value></property>
<property name="acquireRetryAttempts"><value>30</value></property>
<property name="breakAfterAcquireFailure"><value>true</value></property>
<property name="testConnectionOnCheckout"><value>false</value></property>
</bean>
以下是从关于以上配置的描述:

  • <!--连接池中保留的最小连接数。-->
  • <property name="minPoolSize">
  • <value>5</value>
  • </property>

  • <!--连接池中保留的最大连接数。Default:15-->
  • <property name="maxPoolSize">
  • <value>30</value>
  • </property>

  • <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default:3-->
  • <property name="initialPoolSize">
  • <value>10</value>
  • </property>

  • <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default:0-->
  • <property name="maxIdleTime">
  • <value>60</value>
  • </property>

  • <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:3-->
  • <property name="acquireIncrement">
  • <value>5</value>
  • </property>

  • <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
  • 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
  • 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default:0-->
  • <property name="maxStatements">
  • <value>0</value>
  • </property>

  • <!--每60秒检查所有连接池中的空闲连接。Default:0-->
  • <property name="idleConnectionTestPeriod">
  • <value>60</value>
  • </property>

  • <!--定义在从数据库获取新连接失败后重复尝试的次数。Default:30-->
  • <property name="acquireRetryAttempts">
  • <value>30</value>
  • </property>

  • <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
  • 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
  • 获取连接失败后该数据源将申明已断开并永久关闭。Default:false-->
  • <property name="breakAfterAcquireFailure">
  • <value>true</value>
  • </property>

  • <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
  • 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
  • 等方法来提升连接测试的性能。Default:false-->
  • <property name="testConnectionOnCheckout">
  • <value>false</value>
  • </property>

顺便附上网上的一些此类解决方案地址:
http://zhidao.baidu.com/question/94614937.html
http://i5tt.javaeye.com/blog/380324
http://blog.csdn.net/hyqcano/archive/2006/06/15/799598.aspx

自己解决问题了,感觉还是不错的,还是记下来,以备忘记了……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-290012-1-1.html 上篇帖子: 数据库事务转载基础二:MySQL事务隔离级别详解 下篇帖子: 1亿条数据在PHP中实现Mysql数据库分表100张
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表