sql >> データベース >  >> RDS >> Mysql

スプリングブートjpahibernateで>4<24の後にDbへの接続が切断される

    最も簡単な方法は、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に切り替えました。




    1. SQLステートメントによる順序に右括弧がありません

    2. Sqlite Android Raw QueryINSERTINTOが機能しない

    3. MSSQLServerでスタックしたプロセスの自動削除

    4. SQLServerの別のテーブルに基づいて一時テーブルを作成する