Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'application Web Spring-Boot perd la capacité de se connecter à MySQL / RDS après un certain temps

Si vous utilisez la configuration automatique pour définir la connexion RDS à partir du fichier de propriétés comme ceci :

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

La configuration automatique de la source de données Spring Boot ne fonctionnera pas même si vous mettez ces éléments (ou la configuration de la source de données Tomcat) dans votre fichier de configuration :

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

Je pense que c'est la raison pour laquelle vous ne pouvez pas valider vos connexions dans le pool, avant de les utiliser.

Vous devez remplacer la méthode postProcessAfterInitialization pour définir les propriétés de pool du bean TomcatJdbcDataSourceFactory comme ceci :

@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;
}
}

Je n'ai trouvé aucune autre solution pour cela. Au fait, cela pourrait être un bogue de spring-cloud-aws-autoconfigure paquet.

Bonne chance !