Mysql
 sql >> Database >  >> RDS >> Mysql

l'app Web di avvio a molla perde la capacità di connettersi a MySQL / RDS dopo un po'

Se stai utilizzando la configurazione automatica per definire la connessione RDS dal file delle proprietà in questo modo:

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

la configurazione automatica dell'origine dati di avvio primaverile non funzionerà anche se metti questi (o Tomcat datasource conf) nel tuo file di configurazione:

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

Penso che questo sia il motivo per cui non puoi convalidare le tue connessioni nel pool prima di utilizzarle.

Devi sovrascrivere il metodo postProcessAfterInitialization per impostare le proprietà del pool del bean TomcatJdbcDataSourceFactory in questo modo:

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

Non sono riuscito a trovare nessun'altra soluzione per questo. A proposito, questo potrebbe essere un bug di spring-cloud-aws-autoconfigure pacchetto.

Buona fortuna!