有没有办法关闭jdbc连接池中所有未使用的活动连接

时间:2012-09-06 05:29:19

标签: java glassfish connection pool

我只是认为在一个大型Web应用程序中,每个使用该应用程序的客户端都会为数据库建立数十个连接,因此很可能很少有连接未被关闭。 虽然我们必须明确关闭所有连接,但是,您知道,可能存在错误。如果发生这种情况,那么几天后我们可能会发现我们的连接池已达到其最大大小,并且应用程序未运行无法获得连接。

实际上我正在为我的一个项目面临这个问题,每当连接池达到其最大大小时,我只是重启服务器,这是不好的。

我很想知道如何以更好的方式处理这个问题,我想知道有这样的事情,我可以定期关闭我的连接池中所有未使用的活动连接,例如每72小时用java代码?

我说的是Java / J2ee技术,我的服务器是Glassfish Application Server2.1。

编辑:我正在使用Glassfish应用服务器提供的连接池,而不是任何第三方连接池,并使用此池使用JNDI DataSource。

需要你的建议........

由于

2 个答案:

答案 0 :(得分:0)

您可以使用MiniConnectionPoolManager。它是一个轻量级的独立Java JDBC连接池管理器。

看一下这篇文章http://www.h2database.com/javadoc/org/h2/jdbcx/JdbcConnectionPool.html。和dispose()方法。

支持许多jdbc驱动程序http://www.source-code.biz/miniconnectionpoolmanager/

答案 1 :(得分:0)

如果我在没有提供开箱即用的良好连接池的情况下解决这个问题,我会按如下方式进行:

  1. 我的应用程序获取连接的一个入口点。
  2. 装饰从自维护池获取的连接,将计时器设置为已配置的值(关闭未使用的活动连接)并将此装饰连接返回到池的客户端。
  3. 如果在计时器触发前调用close方法,请取消计时器,将调用委托给包装连接。
  4. 如果在计时器触发时未调用close方法,请关闭包装的连接并使此装饰连接对象的状态无效,以便在有人再次尝试使用它时它将抛出IllegalStateException
  5. 我的两分钱!

    修改C3P0unreturnedConnectionTimeout,可配置为处理从池中取出的这些类型的连接,但不会通过close()调用返回。