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

2022-09-02 10:23:45

我有一个带有Java后端的Web应用程序,它使用Tomcat jdbc池进行数据库连接。这工作正常。

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

我在Tomcat jdbc-pool文档中寻找某种配置,告诉数据源尝试重新连接,但我找不到任何东西。

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


答案 1

不是100%确定这是否是你的问题,但在 http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency 它说你可以与.testOnBorrowvalidationQuery

<Resource type="javax.sql.DataSource"
            ...
            testOnBorrow="true"
            validationQuery="SELECT 1"
            removeAbandoned="true"
            />

答案 2

在检查同一问题时,我遇到了这篇文章,它具有所有应用程序服务器的自动连接配置。

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

    <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"/>

所有应用程序服务器的完整自动连接配置都可以在 Java 应用程序服务器中的数据源自动重新连接中找到。


推荐