4.2.10 数据库自动重连
DBCP使用apache的对象池ObjectPool作为连接池的实现,在构造GenericObjectPool时,会生成一个内嵌类Evictor,实现自Runnable接口。如果_timeBetweenEvictionRunsMillis大于0,每过_timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查对象的闲置时间是否大于 _minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象,否则就激活并校验对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。在调用returnObject方法把对象放回对象池,首先检查该对象是否有效,然后调用PoolableObjectFactory 的passivateObject方法使对象处于非活动状态。再检查对象池中对象个数是否小于_maxIdle,是则可以把此对象放回对象池,否则销毁此对象
还有几个很重要的属性,_testOnBorrow、_testOnReturn、_testWhileIdle,这些属性的意义是取得、返回对象和空闲时是否进行验证,检查对象是否有效,默认都为false即不验证。所以当使用DBCP时,数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际已经时无效的数据库连接了。网上很多说DBCP的bug应该都是如此吧,只有把这些属性设为true,再提供_validationQuery语句就可以保证数据库连接始终有效了,oracle数据库可以使用SELECT COUNT(*) FROM DUAL,不过DBCP要求_validationQuery语句查询的记录集必须不为空,可能这也可以算一个小小的BUG,其实只要_validationQuery语句执行通过就可以了。
举例:
ObjectPool connectionPool = new GenericObjectPool(null, maxActive,
GenericObjectPool.DEFAULT_WHEN_EXHAUSTED_ACTION, maxIdle,maxWait);
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
"jdbc:jtds:sqlserver://" + hostName +":"+portnum+ "/" + sid,userName,passWord);
((GenericObjectPool)connectionPool).setTestOnBorrow(true);//设置取从连接池取的连接前对连接进行测试,保证断网后连接池能继续运行。
PoolableConnectionFactory poolableConnectionFactory =
new PoolableConnectionFactory(connectionFactory, connectionPool,
null, null, false, true);
poolableConnectionFactory.setValidationQuery("SELECT 1");
分享到:
相关推荐
Weblogic 连接池配置数据库断掉重连的问题 在 Weblogic 中,连接池配置数据库断掉重连是一个非常重要的问题。连接池配置是 Weblogic 中的一种机制,用于管理与数据库的连接。然而,在实际应用中,我们经常会遇到...
Spring Boot 配置 MySQL 数据库重连的操作方法 Spring Boot 是一个基于 Java 的框架,用于快速构建生产级别的应用程序。在使用 Spring Boot 时,配置 MySQL 数据库连接是一个非常重要的步骤。然而,在实际应用中,...
web服务 在服务器上运行一段时间后 期间无任何操作 可能会导致与mysql服务的响应超时 其中有两种方案解决 其一就是配置java 服务的重连机制
本文将详细介绍如何在Tomcat6中配置连接池,并实现数据库连接的自动重连功能。 #### 二、Tomcat6连接池配置 **1. 修改`conf/server.xml`文件** 在Tomcat6中配置连接池的第一步是修改`conf/server.xml`文件,增加...
本文档主要介绍了 C3P0 的基本使用方法及其关键参数配置,特别是针对支持数据库重连的功能进行了详细介绍。 #### 单例模式下的 C3P0 实现 在 Java 应用程序中,为了确保数据库连接池的唯一性,通常采用单例模式来...
Spring Boot 数据库连接断线重连问题解决方案 Spring Boot 是一个基于 Java 语言的开源框架,它提供了许多功能来帮助开发者快速构建 Web 应用程序。然而,在使用 Spring Boot 连接数据库时,可能会遇到断线重连的...
### 基于PB数据库自动连接的设计与实现 #### 概述 在现代软件开发过程中,数据库连接技术是一项至关重要的内容。特别是在使用PowerBuilder(PB)进行数据库系统开发时,如何高效地实现数据库的自动连接直接影响到...
ArcGIS Engine进行二次开发时,如果数据库连接断开后,再执行任何操作都没有反应,只能重新启动程序,WorkspaceFactory实现了IWorkspaceFactoryStatus
KBMMW数据库断线重连DEMO是一个基于Delphi开发的示例程序,它展示了如何在KBMMW(Kite Business Middleware)框架下处理数据库连接中断的情况,并实现自动重连功能。KBMMW是一个用于构建企业级应用的中间件,它提供...
配置JBOSS自动重链接数据库 JBOSS是一种基于Java的应用服务器,它提供了强大的功能来支持企业级应用程序。其中一个重要的功能是数据库连接池管理,通过配置JBOSS的数据库连接池,可以实现自动重链接数据库,从而...
Django数据库连接超过wait_timeout导致连接丢失时自动重新连接数据库 https://github.com/zhanghaofe…(本地下载) 安装 pip install django_db_reconnect 注意仅支持pymysql,使django使用pymysql需要先安装包并...
在这个项目中,我们关注的是Oracle数据库在VC9.0(即Visual Studio 2008)环境下与应用程序的交互,特别是重连机制、日志文件输出以及配置文件的管理。 首先,让我们来探讨“Oracle数据重连”这一核心概念。在实际...
"异常直连"这个概念可能是指在尝试建立数据库连接时,不通过任何中间层(如ORM框架),而是直接使用JDBC(Java Database Connectivity)API来处理可能出现的异常情况。下面我们将详细探讨Java连接数据库的过程、异常...
8. **故障恢复与监控**:配置适当的错误处理机制,如断线重连,以及设置日志记录,以便在出现问题时进行故障排查。 通过以上步骤,iFIX可以无缝地与关系数据库集成,实现数据的实时同步和长期存储。这不仅有利于...
在VB(Visual Basic)编程环境中,连接数据库是常见的任务,特别是在开发管理信息系统时。VB提供了多种方式来实现数据库连接,其中最常用的是ADO(ActiveX Data Objects)模型。标题所提及的“vb编写的自动连接...
此外,它还提供了自动重连和断线恢复功能,确保在网络不稳定的情况下仍能保持与数据库的连接。 对于数据库查询和数据操作,SQLyog内置的SQL编辑器功能强大,支持智能代码补全、语法高亮和查询执行计划分析。用户...
在Java编程中,与数据库建立和断开连接是常见的任务,尤其在开发Web应用程序或数据驱动的应用时。这里我们将深入探讨如何使用Java JDBC(Java Database Connectivity)API来完成这一过程,以及相关的最佳实践。 ...
* 数据库连接池特点: * 获取连接时不需要了解连接的名字... * 连接断开了后会自动重连 * 当无可用连接时,获取连接的线程会等待一定时间尝试继续获取,直到取到有效连接或者超时返回一个无效的连接 * 关闭连接很简单
8. **断开和重连**: 应用程序可能需要根据需要断开和重新建立数据库连接,以节省资源或处理网络问题。PB提供了相应的API函数来实现这一功能。 9. **错误处理**: 在处理数据库连接时,必须考虑可能出现的错误,...