The last packet successfully received from the server was x milliseconds agoソリューション

1663 ワード

この問題に遭遇して多くのブログを調べたが、基本的には大同小異だが、何の役にも立たない.
参考記事:https://blog.csdn.net/frankcheng5143/article/details/50589264ここに移動して表示できます.
ネット上のシナリオ:
1.mysqlサーバのwait_をtimeoutは無限大に設定されており、タイムアウトしないことを保証しています(できるかどうかはわかりませんが、採用はお勧めしません(実際には何の役にも立たないですが、5.0以前のmysqlに適用するという文章があります)、このように
set global wait_timeout=28800;

2.プロンプトに従って自動再接続autoReconnect=trueをデータベースリンクのコードに追加します.
jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false

3.mysqlでのwait_timeout時間内に心拍数を1回発生させ、接続の有効性を保証する
4.使用時に接続の有効性を検出し、無効になったら新しい接続を取得する
 
シナリオ1とシナリオ2は基本的に役に立たない、あるいは独立してこれらのパラメータを設定するのは基本的に役に立たない、他のパラメータを結合する必要がある.しかし、検索された多くのブログの記事は1,2をめぐって、設定しても何の役にも立たないと言え、重要なパラメータidleConnectionTestPeriodには一言も触れていない.
政府は第3の方法を採用することを提案した.
 testConnectionOnCheckout    false
 testConnectionOnCheckin    true
 idleConnectionTestPeriod    30,        ,             , 8     ,    90

プロジェクトの完全な構成
jdbc.jdbcUrl = jdbc:mysql://117.*.*.*:9966/databasename?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.user = root
jdbc.password = root
jdbc.miniPoolSize = 1
jdbc.maxPoolSize = 100
jdbc.initialPoolSize = 1
jdbc.maxIdleTime = 3600
jdbc.acquireIncrement = 1

jdbc.acquireRetryAttempts = 30
jdbc.acquireRetryDelay = 1000
jdbc.testConnectionOnCheckout=false
jdbc.testConnectionOnCheckin = true
jdbc.automaticTestTable = c3p0TestTable
#   ,idleConnectionTestPeriod                 ,     10000       
jdbc.idleConnectionTestPeriod = 90
jdbc.checkoutTimeout=30000