首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库重新启动后尝试重新连接jdbc池数据源

数据库重新启动后尝试重新连接jdbc池数据源
EN

Stack Overflow用户
提问于 2012-07-03 05:54:08
回答 3查看 32.1K关注 0票数 20

我有一个网络应用程序与Java后端,使用Tomcat jdbc-pool的数据库连接。这可以很好地工作。

然而,我正在尝试在将其导出到其他位置之前确保它万无一失,最近发生了一种情况,有人重新启动了SQL Server数据库服务,但没有重新启动Tomcat服务。这导致了一个SQLException:java.sql.SQLException: I/O Error: Connection reset by peer: socket write error,直到我重新启动Tomcat,强制jdbc-pool数据源重新连接。

我在Tomcat jdbc-pool文档中寻找某种配置,以告诉数据源尝试重新连接,但我什么也找不到。

有没有人知道这是否有某种配置,或者我应该在每次请求之前检查这个条件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-03 06:48:00

不是100%确定这是不是你的问题,但在http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency上,它说你可以使用带有validationQuerytestOnBorrow

代码语言:javascript
复制
<Resource type="javax.sql.DataSource"
            ...
            testOnBorrow="true"
            validationQuery="SELECT 1"
            removeAbandoned="true"
            />
票数 20
EN

Stack Overflow用户

发布于 2016-05-21 07:17:53

在检查相同的问题时,我遇到了这篇文章,其中包含所有应用服务器的自动连接配置。

下面是我在tomcat中用于自动连接的配置,以供参考。

代码语言:javascript
复制
    <Resource auth="Container"
driverClassName="oracle.jdbc.OracleDriver"
initialSize="5"
maxActive="120"
maxIdle="5"
maxWait="5000"
name="jdbc/oracle/myds"
password="secret"
poolPreparedStatements="true"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@DBHOSTNAME:1521/ServiceName"
username="testuser"
validationQuery="select 1 from tab"
testOnBorrow="true"/>

所有应用服务器的完整自动连接配置都可以在Datasource autoreconnect in Java Application Servers中找到。

票数 1
EN

Stack Overflow用户

发布于 2017-11-30 08:06:00

只是为了补充纳坦·考克斯的回答

参考- http://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#Common_Attributes

代码语言:javascript
复制
<Resource type="javax.sql.DataSource"
        ...
        testOnBorrow="true"
        validationQuery="SELECT 1"
        removeAbandoned="true"
        />

对于Geronimo,我仍然希望使用validationQuery。

数据库validationQuery notes

hsqldb - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS

Oracle - select 1 from dual

DB2 - select 1 from sysibm.sysdummy1

mysql - select 1

microsoft SQL Server - select 1

postgresql - select 1

ingres - select 1

德比- values 1

H2 - select 1

火鸟- select 1 from rdb$database

参考- DBCP - validationQuery for different Databases

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11301707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档