SpringBoot resuelve el problema de las 8 horas de la conexión mysql
Problema: el servicio está conectado a la base de datos mysql. Si no hay operación de la base de datos durante 8 horas, la base de datos se desconectará activamente y liberará recursos.
soluciones totales4种方法
-
Antes de la versión MySQL 5, puedes agregarlo después de la URL
autoReconnect=true
-
Agregue lo siguiente al archivo application.properties:
spring.datasource.test-on-borrow=true #(即在获取Connection对象时检测其可用性),不过这样会影响性能,但是这个配置是最有效的。 spring.datasource.test-while-idle=true spring.datasource.time-between-eviction-runs-millis= 3600000
-
** Ajuste de configuración de la base de datos: **
Si tiene acceso a la configuración del servidor MySQL, también puede ajustar el tiempo de espera de la conexión MySQL. Modifique los parámetros
wait_timeout
yinteractive_timeout
y configúrelos en un valor mayor para extender la vida útil de la conexión.Tenga en cuenta que modificar la configuración del servidor MySQL puede requerir una consideración cuidadosa, ya que afectará todas las conexiones.
my.ini 文件中修改此参数
[mysqld] wait_timeout=31536000 interactive_timeout=31536000
-
Consulta de envío de tarea programada:
Si no está utilizando un grupo de conexiones, puede crear un trabajo cron que envíe una consulta en un intervalo determinado para mantener la conexión activa. Esto se puede lograr usando
@Scheduled
las anotaciones de 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); } }