ドルイド新バージョンエラー破棄長い時間なし受信接続を解決する。
2022-03-02 06:04:20
問題現象
druidバージョン1.2.1を使用しているのですが、再度開発するとコンソールに必ず時々段落が表示されます。
discard long time none received connection. jdbcUrl : xxxx
見るのがめんどくさいので、非主流派の無責任精神で、ネットで原因を探ってみると.........。
原因
Webでいろいろ検索した結果、何が問題なのかがわかり、ソースコードを見ました。
com.alibaba.druid.pool.DruidAbstractDataSource で、DruidAbstractDataSource を使用します。
if (valid && isMySql) { // unexcepted branch
long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn);
if (lastPacketReceivedTimeMs > 0) {
long mysqlIdleMillis = currentTimeMillis - lastPacketReceivedTimeMs;
if (lastPacketReceivedTimeMs > 0 //
&& mysqlIdleMillis >= timeBetweenEvictionRunsMillis) {
discardConnection(holder);
String errorMsg = "discard long time none received connection. "
+ ", jdbcUrl : " + jdbcUrl
+ ", version : " + VERSION.getVersionNumber()
+ ", lastPacketReceivedIdleMillis : " + mysqlIdleMillis;
LOG.warn(errorMsg);
return false;
}
}
}
このコードは、大まかに言って、接続が60秒以上アイドル状態である場合、その接続は破棄され(ホルダー)、警告ログが出力されることを意味します。
<ブロッククオートなぜdruidは接続プールで60秒しかアイドル状態でない接続を破棄するのですか?ウェブ上では、アリはデータベース・サーバーの処理能力を高めようとしているのだと言う人もいます。
ソリューション
druidに設定を追加する:druid.mysql.usePingMethod=false
アイドル接続の検証はmysqlのpingメソッドを使わず、select 1を使うことで、上記のソースコードに入るたびに時間が更新され、60sを超えないようにしようということです。
具体的な方法は2つあります。
-
ランタイムコンフィグレーション
I.e. ランタイムパラメータに追加 : ランタイムパラメータに追加 -Ddruid.mysql.usePingMethod=false -
クラスファイルの設定
プロジェクトの DruidConfig クラスに、新しい/* * Resolve druid log error: discard long time none received connection:xxx */ @PostConstruct public void setProperties(){ System.setProperty("druid.mysql.usePingMethod","false"); }
ちょっとした反省
問題を最後まで見届けるには、ソースコードを見るのが良い場合が多いのです。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例