2012-07-02 94 views
13

データベース接続にTomcat jdbc-poolを使用するJavaバックエンドを持つWebアプリケーションがあります。これは正常に動作します。データベースの再起動後にjdbc poolデータソースを再接続しよう

しかし、私は他の場所にエクスポートする前にそれを完全に保護しようとしています。最近、SQL Serverデータベースサービスを再起動したのにTomcatサービスを再起動しなかったシナリオが発生しました。これにより、Tomcatを再起動するまでSQLException:java.sql.SQLException: I/O Error: Connection reset by peer: socket write errorが発生し、jdbc-poolデータソースを強制的に再接続しました。

Tomcat jdbc-pool docsの設定で、データソースに再接続しようとしたが、何も見つかりませんでした。

これに何らかの設定があるかどうか知っている人はいますか?各リクエストの前にこの状態を確認する必要がありますか?

答えて

15

これがあなたの問題ならば、http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrencyにはtestOnBorrowにはvalidationQueryを使用できます。

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

私は検証クエリーのオーバーヘッドを回避しようとしている、と 'timeBetweenEvictionRunsMillis = "5000"'と 'minEvictableIdleTimeMillis = "5000"'と 'minIdleを使用して、同じリンクで別の方法を見つけました。 = "0" '問題を処理しているようですが、ありがとうございます。 – Geronimo

0

私はすべてのアプリケーションサーバーの自動接続構成を持つこの記事に出くわしました。

以下は、参照用に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"/> 

すべてのアプリケーションサーバーの完全自動接続設定は、Datasource autoreconnect in Java Application Serversにあります。

0

ただ、ナタン・コックスの答え

参考にアドオンする - ジェロニモに対するとしてhttp://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#Common_Attributes

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

、私はまだ使用したいvalidationQuery

データベースvalidationQueryは

ノートhsqldb - select 1 from INFORMATION_SCHEMA.SYSTEM_USERS

オラクル - select 1 from dual

DB2 - select 1 from sysibm.sysdummy1

のmysql - select 1

のMicrosoft SQL Serverの - select 1

PostgreSQLの - select 1

アングル - select 1

ダービー - values 1

H2 - select 1

Firebirdのからselect 1 from rdb$database

リファレンス - DBCP - validationQuery for different Databases

関連する問題