jdbc数据库连接每天瞬间断开问题:使用的是proxool连接池,异常类似You can't perform....,请高手指点,在线等....

交个朋友好不好 2014-01-22 04:28:15
jdbc数据库连接每天瞬间断开问题:使用的是proxool连接池,异常详细信息如下:


告警VoicebeanImpl{call_id=261459, insert_date=2013-12-27 09:43:13.0, alarm_orgfp='2729237416_1123543517_771361430_468760835', alarm_sid='3471369430_3076361554_2675571861_386802867', alarm_last_event_time=2013-12-27 09:43:12.0, voice_msg='发生此告警的网元IP:10.96.170.12,告警正文:主机10.96.170.12decode_1141_gprs_gg.xml进程异常,责任人:郭晓玲、丁书亮、华亮,启动账户:ngjf6,位置:*decode_1141_gprs_gg.xml*ngjf6,告警发生时间:2013-12-27 09:43:13', telno1='13663026621', telno2='13937172227', telno3='null', read_status=0, read_date=null, send_status=0, send_date=null, alarm_ne_name='HA4-CJ12', alarm_ne_ip='10.96.170.12'}操作完成,拔打号码数:1
2013-12-27 09:44:43:INFO pool-1-thread-32 com.boco.bomc.hn.fm.voice.bean.VoiceBusiTask - 处理一个语音任务完成,耗时:90188ms ,voicebean=VoicebeanImpl{call_id=261459, insert_date=2013-12-27 09:43:13.0, alarm_orgfp='2729237416_1123543517_771361430_468760835', alarm_sid='3471369430_3076361554_2675571861_386802867', alarm_last_event_time=2013-12-27 09:43:12.0, voice_msg='发生此告警的网元IP:10.96.170.12,告警正文:主机10.96.170.12decode_1141_gprs_gg.xml进程异常,责任人:郭晓玲、丁书亮、华亮,启动账户:ngjf6,位置:*decode_1141_gprs_gg.xml*ngjf6,告警发生时间:2013-12-27 09:43:13', telno1='13663026621', telno2='13937172227', telno3='null', read_status=0, read_date=null, send_status=0, send_date=null, alarm_ne_name='HA4-CJ12', alarm_ne_ip='10.96.170.12'}
2013-12-27 09:44:43:ERROR Thread-9 com.boco.bomc.hn.fm.voice.util.DialBusiOper - 更新Iptfa_alarm_hnvoice_sms的send_status为1出现异常
java.sql.SQLException: Couldn't perform the operation prepareStatement: You can't perform any operations on this connection. It has been automatically closed by Proxool for some reason (see logs).
at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:207)
at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:87)
at oracle.jdbc.driver.ClientDataSupport$$EnhancerByProxool$$2f2045b.prepareStatement(<generated>)
at com.boco.bomc.hn.fm.voice.util.DialBusiOper.__updateWatingSmsRecordByPhone(DialBusiOper.java:309)
at com.boco.bomc.hn.fm.voice.util.DialBusiOper.access$500(DialBusiOper.java:21)
at com.boco.bomc.hn.fm.voice.util.DialBusiOper$UpdateSendStatus.run(DialBusiOper.java:392)
2013-12-27 09:44:43:ERROR Thread-9 com.boco.bomc.hn.fm.voice.util.DialBusiOper - 任务发送状态更新更新线程出现异常
com.boco.bomc.hn.fm.voice.HNVoiceException: 数据库连接已断开!
at com.boco.bomc.hn.fm.voice.util.DialBusiOper.__updateWatingSmsRecordByPhone(DialBusiOper.java:322)
at com.boco.bomc.hn.fm.voice.util.DialBusiOper.access$500(DialBusiOper.java:21)
at com.boco.bomc.hn.fm.voice.util.DialBusiOper$UpdateSendStatus.run(DialBusiOper.java:392)
2013-12-27 09:44:43:ERROR Thread-9 com.boco.bomc.hn.fm.voice.util.DialBusiOper - 处理异常,重新进行处理
2013-12-27 09:44:43:ERROR Thread-8 com.boco.bomc.hn.fm.voice.dao.VoicebeanDao - 更新语音拔打状态,callid=261459,status=1,SQL:UPDATE IPTFA_ALARM_HNVOICE_QUEUE SET SEND_STATUS = ? , SEND_DATE=sysdate WHERE CALL_ID = ?
java.sql.SQLException: Couldn't perform the operation prepareStatement: You can't perform any operations on this connection. It has been automatically closed by Proxool for some reason (see logs).
at org.logicalcobwebs.proxool.WrappedConnection.invoke(WrappedConnection.java:207)
at org.logicalcobwebs.proxool.WrappedConnection.intercept(WrappedConnection.java:87)
at oracle.jdbc.driver.ClientDataSupport$$EnhancerByProxool$$2f2045b.prepareStatement(<generated>)
at com.boco.bomc.hn.fm.voice.dao.VoicebeanDao.__updateSendStatusQueueVoiceBeans(VoicebeanDao.java:269)
at com.boco.bomc.hn.fm.voice.dao.VoicebeanDao.access$400(VoicebeanDao.java:24)
at com.boco.bomc.hn.fm.voice.dao.VoicebeanDao$UpdateSendStatus.run(VoicebeanDao.java:239)
2013-12-27 09:44:43:ERROR Thread-8 com.boco.bomc.hn.fm.voice.dao.VoicebeanDao - 任务发送状态更新更新线程出现异常
com.boco.bomc.hn.fm.voice.HNVoiceException: 数据库连接已断开!
at com.boco.bomc.hn.fm.voice.dao.VoicebeanDao.__updateSendStatusQueueVoiceBeans(VoicebeanDao.java:278)
at com.boco.bomc.hn.fm.voice.dao.VoicebeanDao.access$400(VoicebeanDao.java:24)
at com.boco.bomc.hn.fm.voice.dao.VoicebeanDao$UpdateSendStatus.run(VoicebeanDao.java:239)
2013-12-27 09:44:43:INFO Thread-8 com.boco.bomc.hn.fm.voice.dao.VoicebeanDao - 任务发送状态更新线程出现异常,开始重新处理



我在网上查找了该异常的相关答案,做了如下配置:
<!-- maximum-active-time缺省5minutes 172800000毫秒=48小时-->
<maximum-active-time>172800000</maximum-active-time>
<!-- maximum-connection-lifetime缺省4hours 180000000毫秒=50小时-->
<maximum-connection-lifetime>180000000</maximum-connection-lifetim
但是没有解决问题,程序继续报这个异常.大家有没有解决办法呀?
...全文
390 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybyq_xyl 2014-01-26
  • 打赏
  • 举报
回复
这个不是程序的原因吧,可能是网速不好,导致连不上数据库了吧
  • 打赏
  • 举报
回复
程序是多线程的,应该是该数据库连接已被关闭,但有的方法还在使用这个数据库链接.代码如下:

  private class UpdateSendStatus extends Thread {
        @Override
        public void run() {
            logger.info("短信发送及语音状态更新线程开始启动");
            while (true) {
                Connection update_conn = null;
                StatusUpdate u = null;
                try {
                    update_conn = ConnectionPool.getInstance().getNewConnection();
                    while (true) {
                        try {
                            sleep(1);
                        } catch (Exception e) {
                            //
                        }
                        u = null;
                        try {
                            u = updateQueue.take();
                        } catch (Exception e) {
                            //
                        }
                        if (u == null) {
                            continue;
                        }

                        if (Update_type_voice == u.getUpdate_type()) {
                            //更新语音状态表
                            __updateDailSendStatus(u.getPhone(), u.getAlarm_last_date(), u.getSendStatus(), update_conn);
                        } else if (Update_type_sms == u.getUpdate_type()) {
                            //更新短信状态表
                            __updateWatingSmsRecordByPhone(u.getPhone(), u.getAlarm_last_date(), u.getSendStatus(), update_conn);
                        } else {
                            logger.error("更新类型[" + u.getUpdate_type() + "]电话号码:" + u.getPhone() + ",告警更新时间:" + u.getAlarm_last_date() + "更新状态:" + u.getSendStatus() + "异常!!");
                        }
                    }
                } catch (Exception e) {
                    logger.error("任务发送状态更新更新线程出现异常", e);
                    if (u != null) {
                        try {
                            updateQueue.put(u);   //重新放回队列中处理
                        } catch (Exception e1) {
//                            e1.printStackTrace();
                        }
                    }
                } finally {
                    DbUtil.closeDbResource(null, null, update_conn);
                }
                logger.error("处理异常,重新进行处理");
            }

        }
    }
长笛党希望 2014-01-22
  • 打赏
  • 举报
回复
楼主检查下代码,获取数据库连接之后,是否正常关闭
  • 打赏
  • 举报
回复
有人看到吗?请大家踊跃发言呀!谢谢了!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧