最も簡単な方法は、autoReconnect
を指定することです。 JDBC URLのプロパティですが、これは推奨されるアプローチではありません。
spring.datasource.url = jdbc:mysql://localhost:3306/test?autoReconnect=true
これにより、アクティブな接続があり、トランザクション中に何かが発生して再接続が発生する場合に問題が発生する可能性があります。トランザクションの開始時に接続が検証され、開始時に新しい接続が取得された場合、問題は発生しません。
ただし、アプリケーションの存続期間中に接続の検証を有効にすることをお勧めします。このために、いくつかのプロパティを指定できます 。
まず、プールに許可する接続の最大数を指定することから始めます。 (最大プールサイズの決定については、これ をお読みください。 。
spring.datasource.max-active=10
初期接続の数を指定することもできます
spring.datasource.initial-size=5
次に、アイドル状態の接続の最小数と最大数を指定します。
spring.datasource.max-idle=5
spring.datasource.min-idle=1
接続を検証するには、validation-queryといつ検証するかを指定する必要があります。プールから接続を取得するときではなく、定期的に検証する必要があるため(これにより、プールでの接続の切断を防ぐことができます)。
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1
注: validation-query
の使用法 JDBC4には接続検証を行うためのより良い/異なる方法があるため、実際には推奨されていません。 HikariCPは、利用可能な場合、JDBC検証メソッドを自動的に呼び出します。
接続がアイドル状態のときにも検証しているので、接続に対してこのクエリを実行する頻度と、接続がアイドル状態であると見なされるタイミングを指定する必要があります。
spring.datasource.time-between-eviction-runs-millis=5000 (this is the default)
spring.datasource.min-evictable-idle-time-millis=60000 (this is also default)
これにより、(アイドル状態の)接続の検証がトリガーされ、例外が発生した場合、またはアイドル期間が経過すると、接続がプールから削除されます。
接続プールとしてTomcatJDBCを使用していると仮定します
更新: Spring Boot 2.xは、デフォルトの接続プールをTomcatJDBCではなくHikariCPに切り替えました。