sql >> Databasteknik >  >> RDS >> Mysql

spring-boot webbapp förlorar förmågan att ansluta till MySQL / RDS efter ett tag

Om du använder automatisk konfiguration för att definiera RDS-anslutning från egenskapsfilen så här:

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

Auto-konfiguration av vårstartdatakällan kommer inte att fungera även om du lägger dessa (eller tomcat datakälla conf) till din konfigurationsfil:

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

Jag tror att detta är anledningen till att du inte kan validera dina anslutningar i poolen innan du använder dem.

Du måste åsidosätta postProcessAfterInitialization-metoden för att ställa in poolegenskaper för TomcatJdbcDataSourceFactory-bönan så här:

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

Jag kunde inte hitta någon annan lösning för detta. Detta kan förresten vara en bugg av spring-cloud-aws-autoconfigure paket.

Lycka till!



  1. Använd tnsnames.ora i Oracle SQL Developer

  2. kan jag återställa auto_increment-fältet i mySql?

  3. MySQL proxyalternativ för databasdelning

  4. Lägger till sekunder till datetime i MySQL