当前位置: 首页 > 知识库问答 >
问题:

Spring DBCP连接被终止

通令
2023-03-14

我有一个应用程序,其中DB连接由Spring配置创建(然后传递到hibernate)。以下是spring文件中的默认参数。

<bean id="localDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName">
    <value>${database.driver}</value>
    </property>
    <property name="url">
    <value>${dbUrl}</value>
    </property>
    <property name="username">
    <value>${dbUser}</value>
    </property>
    <property name="password">
    <value>${dbPassword}</value>
    </property>
</bean>

然而,在特定的环境中,Oracle DB连接会在一段时间后被网络设置关闭。我们最初认为关闭连接是因为连接处于空闲状态。我们添加了validationQuery,以便定期在服务器上发布查询,这样连接就不会空闲。

<bean id="localDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName">
    <value>${database.driver}</value>
    </property>
    <property name="url">
    <value>$dbUrl</value>
    </property>
    <property name="username">
    <value>$dbUser</value>
    </property>
    <property name="password">
    <value>$dbPassword</value>
    </property>
    <property name="validationQuery">
    <value>SELECT 1 FROM dual</value>
    </property>
    <property name="testWhileIdle">
    <value>true</value>
    </property>
    <property name="testOnReturn">
    <value>true</value>
    </property>
    <property name="timeBetweenEvictionRunsMillis">
    <value>1000</value>
    </property>
</bean>
  1. 即使在上述设置之后,连接仍然会关闭
  2. 还观察到,当应用程序空闲2-3(不同)小时时,验证查询将停止在服务器上执行,然后网络设置将关闭连接

我的问题是添加validationQuery是否保证连接不空闲?应用程序在第一次登录尝试时失败,没有抛出DB连接;但在2-3次尝试后工作。不确定这里发生了什么。

共有2个答案

有睿
2023-03-14

另一方面,C3P0连接池库比DBCP好得多。我过去一直对DBCP有问题,从那时起切换到C3P0至今没有问题。。。

http://www.mchange.com/projects/c3p0/

东方志尚
2023-03-14

validationQuery仅在从连接池检索连接时用于测试连接。见:https://commons.apache.org/proper/commons-dbcp/configuration.html

此外,我在org上也看到了一些奇怪的行为。阿帕奇。平民dbcp。BasicDataSource和Oracle(11和12)。我们在组织上有了更好的稳定性。阿帕奇。公猫dbcp。dbcp。相反,它是源代码。配置选项非常接近(可能相同?)对于commons dbcp实现,转换非常简单。

 类似资料:
  • 问题内容: 我正在尝试使用H2OR内的库在具有7000万行和25个数字特征的训练集上使用随机森林分类模型。总文件大小为5.6 GB。 验证文件的大小为1 GB。 我的系统上有16 GB RAM和8核CPU。 系统成功读取了H2O对象中的两个文件。 然后,我给出以下命令来构建模型: 但是几分钟(不生成任何树)后,出现以下错误: “ .h2o.doSafeREST中的错误(conn = conn,h2

  • 问题内容: 我正在用MySQL建立一个网站。我将TOAD用于MySQL,突然出现错误,无法连接数据库: “太多联系” Toad for MySQL中有什么方法可以查看现有连接以杀死它们或简单地将所有连接全部关闭? 问题答案: 不, 没有内置的MySQL命令 。有多种工具和脚本支持它,您可以手动终止某些连接或重新启动服务器(但这会比较慢)。 使用查看所有连接,进程ID是你想杀死。 您可以编辑超时设置

  • 问题内容: 是否可以在不关闭整个服务器的情况下终止服务器的Websocket连接?如果是这样,我该如何实现呢? 注意:我使用NodeJS作为后端和’ws’websocket模块。 问题答案: 如果要踢所有客户端而不关闭服务器,则可以执行以下操作: 如果您要特别寻找一个,也可以进行过滤。如果您要踢客户端作为连接逻辑的一部分(即,它发送错误的数据等),则可以执行以下操作: 和一个基本的客户 你会得到:

  • 我正在对一个拥有7000万行和25个数字特征的训练集使用R内部的< code>H2O库来尝试一个随机森林分类模型。总文件大小为5.6 GB。 验证文件的大小为 1 GB。 我的系统上有16 GB RAM和8核CPU。 系统成功读取H2O对象中的两个文件。 然后我发出以下命令来构建模型: 但是几分钟后(没有生成任何树),我得到以下错误: "在. h2o.doSafeREST(conn = conn,

  • 我正在尝试运行卡桑德拉,但每次它在连接时都会给出相同的错误...有什么我需要在配置文件或属性文件中编辑的吗? ('无法连接到任何服务器',{'127.0.0.1:9042 ':错误(61,"尝试连接到[('127.0.0.1 ',9042)]。最后一个错误:连接被拒绝")}) 启动cassandra时出错

  • 我试图通过Jedis客户端连接到redis服务器,但在连接时我得到了以下异常和堆栈跟踪- redisconnectionFailureException:无法获得Jedis连接;嵌套异常是redis.clients.jedis.exceptions.jedisconnectionException:无法从位于org.springframework.data.redis.connection.jed