Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Spring-Boot-Web-App verliert nach einer Weile die Fähigkeit, eine Verbindung zu MySQL / RDS herzustellen

Wenn Sie die automatische Konfiguration verwenden, um die RDS-Verbindung aus der Eigenschaftsdatei wie folgt zu definieren:

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

Die automatische Konfiguration der Spring Boot-Datenquelle funktioniert nicht, selbst wenn Sie diese (oder Tomcat-Datenquellen-Konf) in Ihre Konfigurationsdatei einfügen:

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

Ich denke, das ist der Grund, warum Sie Ihre Verbindungen im Pool nicht validieren können, bevor Sie sie verwenden.

Sie müssen die postProcessAfterInitialization-Methode überschreiben, um Pool-Eigenschaften der TomcatJdbcDataSourceFactory-Bean wie folgt festzulegen:

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

Ich konnte keine andere Lösung dafür finden. Übrigens könnte dies ein Fehler von spring-cloud-aws-autoconfigure sein Paket.

Viel Glück!