SpringBoot は、mysql 接続の 8 時間の問題を解決します
問題: サービスは mysql データベースに接続されています。8 時間データベース操作がない場合、データベースは積極的に切断され、リソースが解放されます。
トータルソリューション4种方法
-
MySQL 5 バージョンより前の場合は、URL の後に追加できます。
autoReconnect=true
-
以下を application.properties ファイルに追加します。
spring.datasource.test-on-borrow=true #(即在获取Connection对象时检测其可用性),不过这样会影响性能,但是这个配置是最有效的。 spring.datasource.test-while-idle=true spring.datasource.time-between-eviction-runs-millis= 3600000
-
** データベース構成の調整: **
MySQL サーバーの構成にアクセスできる場合は、MySQL 接続タイムアウトを調整することもできます。
wait_timeout
およびパラメータを変更しinteractive_timeout
、より大きな値に設定して、接続の存続期間を延長します。MySQL サーバーの構成を変更すると、すべての接続に影響するため、慎重な検討が必要になる場合があることに注意してください。
my.ini 文件中修改此参数
[mysqld] wait_timeout=31536000 interactive_timeout=31536000
-
クエリを送信するスケジュールされたタスク:
接続プールを使用していない場合は、接続をアクティブに保つために一定の間隔でクエリを送信する 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); } }