sql >> Base de Datos >  >> RDS >> Mysql

La aplicación web spring-boot pierde la capacidad de conectarse a MySQL / RDS después de un tiempo

Si está utilizando la configuración automática para definir la conexión RDS desde el archivo de propiedades de esta manera:

cloud.aws.rds.testdb.password=testdbpwd
cloud.aws.rds.testdb.username=testdbuser
cloud.aws.rds.testdb.databaseName=testdb

la configuración automática de fuente de datos de arranque de primavera no funcionará incluso si coloca estos (o la configuración de fuente de datos de tomcat) en su archivo de configuración:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.test-on-borrow: true
spring.datasource.validation-query: SELECT 1 FROM DUAL
spring.datasource.log-validation-errors: true

Creo que esta es la razón por la que no puede validar sus conexiones en el grupo antes de usarlas.

Debe anular el método postProcessAfterInitialization para establecer las propiedades del grupo del bean TomcatJdbcDataSourceFactory de esta manera:

@Component
public class PoolConfiguration implements BeanPostProcessor {

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    if (bean instanceof TomcatJdbcDataSourceFactory) {
        TomcatJdbcDataSourceFactory tomcatJdbcDataSourceFactory = (TomcatJdbcDataSourceFactory) bean;
        tomcatJdbcDataSourceFactory.setTestOnBorrow(true);
        tomcatJdbcDataSourceFactory.setTestWhileIdle(true);
        tomcatJdbcDataSourceFactory.setValidationQuery("SELECT 1");
    }
    return bean;
}
}

No pude encontrar ninguna otra solución para esto. Por cierto, esto podría ser un error de spring-cloud-aws-autoconfigure paquete.

¡Buena suerte!