SpringBoot resuelve el problema de las 8 horas de la conexión mysql

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种方法

  1. Antes de la versión MySQL 5, puedes agregarlo después de la URLautoReconnect=true

  2. 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
    
  3. ** 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_timeouty interactive_timeouty 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
    
  4. 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 @Scheduledlas 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);
        }
    }
    
    

Supongo que te gusta

Origin blog.csdn.net/caidingnu/article/details/132411301
Recomendado
Clasificación