SpringBoot は、mysql 接続の 8 時間の問題を解決します

SpringBoot は、mysql 接続の 8 時間の問題を解決します

問題: サービスは mysql データベースに接続されています。8 時間データベース操作がない場合、データベースは積極的に切断され、リソースが解放されます。

トータルソリューション4种方法

  1. MySQL 5 バージョンより前の場合は、URL の後に追加できます。autoReconnect=true

  2. 以下を application.properties ファイルに追加します。

    spring.datasource.test-on-borrow=true #(即在获取Connection对象时检测其可用性),不过这样会影响性能,但是这个配置是最有效的。
    spring.datasource.test-while-idle=true
    spring.datasource.time-between-eviction-runs-millis= 3600000
    
  3. ** データベース構成の調整: **

    MySQL サーバーの構成にアクセスできる場合は、MySQL 接続タイムアウトを調整することもできます。wait_timeoutおよびパラメータを変更しinteractive_timeout、より大きな値に設定して、接続の存続期間を延長します。

    MySQL サーバーの構成を変更すると、すべての接続に影響するため、慎重な検討が必要になる場合があることに注意してください。

    my.ini 文件中修改此参数

    [mysqld]
    wait_timeout=31536000
    interactive_timeout=31536000
    
  4. クエリを送信するスケジュールされたタスク:

    接続プールを使用していない場合は、接続をアクティブに保つために一定の間隔でクエリを送信する cron ジョブを作成できます。@Scheduledこれは Spring のアノテーションを使用して実現できます。

    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    @Component
    public class KeepAliveTask {
          
          
        private final JdbcTemplate jdbcTemplate;
    
        public KeepAliveTask(JdbcTemplate jdbcTemplate) {
          
          
            this.jdbcTemplate = jdbcTemplate;
        }
    
        @Scheduled(fixedRate = 300000) // 5 minutes
        public void keepConnectionAlive() {
          
          
            jdbcTemplate.queryForObject("SELECT 1", Integer.class);
        }
    }
    
    

おすすめ

転載: blog.csdn.net/caidingnu/article/details/132411301