2008-08-19 10 views
13

私はtomcatインスタンスの設定をしていますが、context.xmlで設定したデータベース接続は、何も操作しなくても死んでしまいます。Java + Tomcat、データベース接続が壊れていますか?

私は、私は次のエラーを取得するログをチェックすると:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: に成功was68051秒 前に、サーバから受信した最後のパケット。サーバーに正常に送信された最後のパケットは、前に の68051秒でした。これは、サーバー構成の値の 'wait_timeout'よりも長くなっています。アプリケーションで使用する前に 接続の有効期限を期限切れまたはテストするか、クライアントのタイムアウト値を に設定するか、Connector/J 接続プロパティ 'autoReconnect = true'を使用してこの問題を回避する必要があります。ここで

はcontext.xmlにで構成です:

<Resource name="dataSourceName" 
     auth="Container" 
     type="javax.sql.DataSource" 
     maxActive="100" 
     maxIdle="30" 
     maxWait="10000" 
     username="username" 
     password="********" 
     removeAbandoned = "true" 
     logAbandoned = "true" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://127.0.0.1:3306/databasename?autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8" /> 

エラーがすると言うように、私は自動再=トゥーレを使用していますが、接続は死ぬ続けます。私はこれが以前に起こるのを見たことがない。

また、すべてのデータベース接続が正しく閉じられていることを確認しました。

答えて

8

Tomcat Documentation

DBCPはジャカルタ・コモンズ、データベース接続プールを使用しています。

* Jakarta-Commons DBCP 
* Jakarta-Commons Collections 
* Jakarta-Commons Pool 

この属性はあなたを助けてくれるかもしれません。

removeAbandonedTimeout="60" 

私は、同じ接続プーリングのものを使用していると私はそれだけのTomcatて構成されていないのと同じ事を防ぐために、これらのプロパティを設定しています。 しかし、最初のことが動作しない場合は、これらを試してください。

testWhileIdle=true 
timeBetweenEvictionRunsMillis=300000 
+0

ニース。私はcontext.xmlでパラメータを設定し、それを24時間座らせておきます。それが動作しない場合、私は答えを受け入れません。しかし、それは有望に見えます!ありがとう! –

0

私は上記の答えは基本的に同じことを行いますが、当社のシステムのいくつかは、週に1回程度、DB接続を使用して、私たちはその-Otimeoutフラグか何かを提供することを見てきたかどうかわかりませんmysqlにソートして接続タイムアウトを設定します。

5

これを実際に引き起こしていることを明確にするだけです。 MySQLは、デフォルトで8時間使用しないとオープン接続を終了します。ただし、データベース接続プールはそれ以上の接続を保持します。

timeBetweenEvictionRunsMillis = 300000に設定することで、接続プールを接続を実行し、5分ごとにアイドル状態のメッセージを退出させて閉じるように指示しています。

+0

このプロパティの名前は何ですか?私はそれをもう一度チェックしたいと思います。 "thread_pool_idle_timeout = 60"は私が見るものです。 – mass

+0

@massわかりません。上記の私の答えは7歳ですが、私はTomcatやServlet Resourceを数年使っていません。私がtimeBetweenEvictionRunsMillisがcontext.xmlのResourceタグのプロパティであり、thread_pool_idle_timeoutが.propertyファイルのキーであることがわかります。 –

+0

今のところ私はtimeBetweenEvictionRunsMillisがjdbcデータソースプールの接続スイーパを起動していることを知っています。 thread_pool_idle_timeoutは私が言及していたMySQLのパラメータでした。私は現在のデフォルトが8時間より短いとは思っていませんが、とにかくお返事いただきありがとうございます。受け入れられた解決策がOPのために働いたように見える、私はそれを行ってもらう。 – mass

1

removeAbandonedオプションは、DBCP 1.2(ただし、1.3ブランチのstill present)では廃止予定です。 Hereは非公式な説明です。

関連する問題