java数据库自动断开连接

问题描述

我在项目中创建了一个SahredPoolDataSource对象,把这个对象放到hashMap中,每次用连接的时候都从map中取出这个对象,并且强制转换为DataSource类型,然后从里面取连接,为什么有时候取得时候会出项Connectionisclosed的异常。这个SharedPoolDataSource是一个连接池吧。我关闭连接的时候使用conn.closed()就可以吧。publicclassDataSourceTest{publicstaticvoidcreateDataSource()throwsException{DriverAdapterCPDScpds=newDriverAdapterCPDS();cpds.setDriver(driver);cpds.setUrl(url);cpds.setUser(user);cpds.setPassword(password);cpds.setLoginTimeout(0);SharedPoolDataSourcespds=newSharedPoolDataSource();spds.setConnectionPoolDataSource(cpds);spds.setMaxActive(50);spds.setMaxWait(6000);spds.setMaxIdle(50);ds.put("dataSource",spds);}//取连接publicstaticConnectiongetConnection()throwsSQLException{Connectionconn=((DataSource)ds.get("dataSource")).getConnection();returnconn;}}

还有,在项目初始化的时候,我取了一个连接放到一个静态变量中,有时候使用用这个连接的时候也会出现Connectionisclosed的异常。publicclassMainServer{publicstaticvoidinit()throwsException{UtilTools.STAT_CONNECTION=DataSourceTest.getConnection();}publicstaticvoidmain(String[]args){try{MainServer.init();}catch(Exceptione){e.printStackTrace();}}}

解决方案

解决方案二:
静态变量维护连接池肯定会出现closed的问题的呀仔细想想分析下连接池的原理,连接池的一些属性例如:活跃时间啊搞明白连接池原理就可以很容易想明白这个问题了
解决方案三:
不懂连接池啊,什么原理呢,还有我从map中直接取连接怎么有时候也抛出connectionisclosed的异常?
解决方案四:
引用2楼he1hehe的回复:

不懂连接池啊,什么原理呢,还有我从map中直接取连接怎么有时候也抛出connectionisclosed的异常?

因为你长时间不用,数据库那边已经把连接关了,而你本地的连接池没有去检测连接状态。
解决方案五:
我去连接的时候都是前两个报错,再取连接就没事了。怎么检测啊,我刚搜了一下,是这段代码吗,我明天试试。spds.setTestOnBorrow(true);spds.setTestWhileIdle(true);spds.setValidationQuery("selete1fromdual");

时间: 2024-11-10 01:04:32

java数据库自动断开连接的相关文章

连接池-MySQL8小时自动断开连接

问题描述 MySQL8小时自动断开连接 最近项目中使用连接池连接MySQL数据库, 过了8小时没人使用之后再使用就报错了 网上看了很多种解决方法, 但是没有满意答案 1. 修改mysql wait_timeout 配置 经理不让修改mysql配置. 据说最大也就修改为27天, 也是不大完美的方案. 2. jdbc url 添加authoReconnect=true. 无效 . 据说是mysql 5.0之前才支持 3. 设置maxIdleTime小于wait_timeout 使用Fabric, 其

mysql自动断开连接的问题处理

mysql自动断开连接的问题处理 mysql与程序连接,在一定时间内没有出现连接超过mysql的连接等待时间(wait_timeout)会出现断开连接情况,跟数据库配置有关.   mysql默认连接等待时间是为(28800s)即8h,   可以通过 如图  www.2cto.com       命令:show global variables like 'wait_timeout'  查看等待时间   在msql5中wait_timeout的最大值分别是24d/365(win/linux);  

websocket-Websocket过一小段时间就会自动断开连接

问题描述 Websocket过一小段时间就会自动断开连接 如题... 连接上了之后,过几分钟就会自动断开.. 在多个浏览器测试过...结果都是这样... 解决方案 websocket需要进行心跳包维持连接,浏览器不会帮你维持,所以隔断时间就断开了,你自己实现的客户端就需要维持这个连接 解决方案二: 有心跳检测机制么?保持心跳,不要一直空闲. 解决方案三: websocket怎么用

避免win8系统wifi自动断开连接的方法

  对于一些使用win8笔记本的用户来说,经常会遇到wifi自动关闭的问题,具体表现为电脑进入休眠待机状态时,用户重新唤醒系统后,却出现wifi无法连接的问题,对于这一问题小编分析是由win8系统的节能功能造成的,下面我们来看下详细的解决方法吧! 原因分析: 休眠后内存中的程序都暂时存放到硬盘中,以最小消耗切换到待机,等从休眠模式恢复后才从硬盘中读取到内存中,休眠状态下是无法保持网络连接的. 解决方法: 如果你外出后一定想保持网络连接,而屏幕又是黑掉的,可以在右下角点击电池图标---选择"更多电

蓝牙鼠标自动断开连接的解决办法

话说前一阵子败了一个蓝牙鼠标回来,IBM的小黑鼠,结果这个鼠标隔那么一小会儿就要掉掉线,隔一阵子就不能用了. 解决办法: 问题的原因是电脑默认设置外设时间长不使用,自动断开,以节能[此处节能是指:节省电脑自身电源电能]. 找到计算机(xp我的电脑)->右键管理->设备管理器->在右侧,蓝牙那里,找到你的蓝牙鼠标,点属性,去掉图示位置的勾. 这样就可以避免在系统中切断你的蓝牙连接. 通常蓝牙鼠标自身也有一个节能设置[此处节能指:节省蓝牙鼠标内电池的电量],部分蓝牙鼠标有配套软件可以调整,通

使用jdbc创建的connection时间久了会自动断开连接吗?

问题描述 打算用java写一个建议的数据库连接池,其实就是将各数据库的connection存到数据组,要查询或更新时直接从数组中取出,这样就不用每次都创建连接了.但是我有一个疑问,就是connection创建好了之后可能很久之后才会用到,这个时候用这个连接去查询或更新会抛出异常吗?会的话抛出什么异常呢?顺便说一句,客户端到各数据库服务器端口都是短连接. 问题补充:可以提供一些网上的资料吗? 解决方案 自己用的话为什么不用现成的,没有bug解决方案二:http://wenku.baidu.com/

如何设置路由器自动拨号连接上网

如何路由器设置自动拨号上网是普通用户利用一个宽带网络帐号实现多台计算机一起访问网络最常采用的方法,那么如何搭建共享上网的环境呢?下面我们来详细看看具体的内容. 建立了自己的共享上网之后问题也接踵而来,用户想实现每次启动计算机都能自动连接网络的功能,而不是每次连网必须先进入路由器界面点联机才能上网,不想上网时必须点断线.实际上这种自动断网和自动连接网络的功能是非常好实现的,如果没有宽带路由器可以通过把拨号程序放到windows系统的启动项中来实现;如果是在购买了自己的D-LINK路由器后寻求解决方

解决ssh登录后闲置时间过长而断开连接

 当鼠标和键盘长时间不操作服务器就会自动断开连接,感觉很麻烦 解决此问题的方法:   方法一: 1.#vi /etc/ssh/sshd_config配置文件,修改ClientAliveCountMax(单位为分钟)为想要的值! 2.修改完成并保存后,执行命令:#service sshd reload使配置立即生效! 方法二: 修改/etc/profile配置文件:#vi /etc/profile 增加:TMOUT=1800 这样30分钟没操作才自动LOGOUT

winform连接内置数据库时一调试数据库就自动断开

问题描述 winform连接内置数据库时一调试数据库就自动断开 解决方案 你整个连接字符串就没有写对.后面加上Persist Security Info=False; 如果还不行,检查sql ce驱动有没有装对. 解决方案二: 第三张图是调试前确认数据库为打开的状态,第一张是在点击调试的一瞬间数据库关闭了 然后运行失败. 解决方案三: 在Oracle数据库实现自动断开后再连接在Oracle数据库实现自动断开后再连接 解决方案四: 你这是连接数据库的时候异常了,你捕获一下异常,查看一下具体的错误信