コンテナーで war ファイルを実行すると、サーバー側で切断された接続 (デフォルトのアイドル タイムアウトは 8 時間) が例外につながるように見えます (根本原因: 接続は既に閉じられています / サーバーへの最後の成功したパッケージは 0ms以前または >8h を表す値。これらの例外は、コンテナーを再起動するまで回復できません。
問題 1) jdbc-tomcat プールを build.grade ランタイム「org.apache.tomcat:tomcat-jdbc」の依存関係として追加すると、切断された「メイン以外」のデータソース (データソースの下) への再接続が試行されません。これらのプロパティに関係なく: dataSource: pooled: true jmxExport: true driverClassName: com.mysql.jdbc.Driver
方言: org.hibernate.dialect.MySQL5InnoDBDialect プロパティ: initialSize: 2 # 接続プール サイズ maxActive: 10 minIdle: 0 maxIdle: 10 removeAbandonedTimeout: 120 # Quartz ジョブで使用される接続を解放 removeAbandoned: true validationQuery: SELECT 1 testOnBorrow: true maxWait: 10000 maxAge: 600000 timeBetweenEvictionRunsMillis: 5000 minEvictableIdleTimeMillis: 60000 validationQueryTimeout: 3 validationInterval: 15000 testWhileIdle: true testOnReturn: false jdbcInterceptors: ConnectionState defaultTransactionIsolation: java.sql.Connection.TRANSACTION_READ_COMMITTED "other" DS は、grails/tomcat でのプーリングの組み合わせに関して完全にサポートされています.
そこで、gradle から tomcat-jdbc を削除し、すべての URL の後に ?autoReconnect=true を追加しました。それでも、一部のプロパティは影響します。properties: initialSize: 2 # connection pool size maxActive: 20 minIdle: 2 maxIdle: 20 上記の値が原因で、20 回の接続 (並列ではなく順次) を使用してクロージャ内で 20 回の呼び出しを行った後、21 回目の接続が失敗しました。常に、mariadb 側で開いている接続を監視すると、同時接続が 0 または 1 つありました。プロパティを削除した後、機能しました。接続プールがロードされていないときに、この値が影響するのはなぜですか?
Tomcat には独自の tomcat-jdbc jar が付属しているため、違いが生じる可能性があります。tomcat自体と同じように、build.gradeでタイプを「provided」に変更する必要がありますか?
問題 2) は、Web の調査結果です。つまり、このフォーラムにもありますが、grails のドキュメント自体もhttps://grails.org/deploymentを指しています。ドキュメントには、そこに文書化されているコンテナにデプロイする際の注意事項が記載されています...しかし、登録すると、確認メールが届かず、ページがhttps://grails.org/unauthorizedに転送されます。登録が壊れているように見えます。そのための電子メールの連絡先はありますか - 見つかりませんでした。
Web コンテナーにプレーン プールを作成するのにこれほど長い時間がかかるとは信じられません。古いコンテナバージョンでも問題なく動作しました