16

Tomcatインスタンスをセットアップしましたが、構成したデータベース接続が非アクティブなcontext.xml状態が続くと停止し続けます。

ログを確認すると、次のエラーが発生します。

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:サーバーから正常に受信された最後のパケットは68051秒前でした。サーバーに正常に送信された最後のパケットは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"  />

エラーのように使用しautoReconnect=trueていますが、接続が切断され続けています。私はこれがこれまでに起こったのを見たことがありません。

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

4

4 に答える 4

11

Tomcatのドキュメント

DBCPは、Jakarta-Commonsデータベース接続プールを使用します。これは、Jakarta-Commonsコンポーネントの数に依存しています。

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

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

removeAbandonedTimeout="60"

私は同じ接続プールのものを使用しており、Tomcatを介して構成されていないものと同じものを防ぐためにこれらのプロパティを設定しています。しかし、最初のものがうまくいかない場合は、これらを試してください。

testWhileIdle=true
timeBetweenEvictionRunsMillis=300000
于 2008-08-19T13:40:10.283 に答える
4

実際にこれを引き起こしているものを明確にするだけです。デフォルトでは、MySQL は非アクティブ状態が 8 時間続くと開いている接続を終了します。ただし、データベース接続プールはそれよりも長く接続を保持します。

したがって、timeBetweenEvictionRunsMillis=300000 を設定することで、接続を実行し、アイドル状態の接続を 5 分ごとに削除して閉じるように接続プールに指示します。

于 2008-09-16T16:12:44.707 に答える
1

removeAbandonedオプションは、DBCP 1.2で非推奨になりました(ただし、1.3ブランチにはまだ存在しています)。これが非公式の説明です。

于 2009-02-09T13:21:44.390 に答える
0

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

于 2008-08-19T19:06:11.730 に答える