sql >> Database >  >> RDS >> Mysql

spring-boot web-app verliest na een tijdje de mogelijkheid om verbinding te maken met MySQL / RDS

Als u automatische configuratie gebruikt om de RDS-verbinding vanuit het eigenschappenbestand als volgt te definiëren:

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

automatische configuratie van spring boot datasource werkt niet, zelfs niet als je deze (of Tomcat datasource conf) in je configuratiebestand plaatst:

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

Ik denk dat dit de reden is waarom u uw verbindingen in de pool niet kunt valideren voordat u ze gebruikt.

U moet de postProcessAfterInitialization-methode overschrijven om pooleigenschappen van de TomcatJdbcDataSourceFactory-bean als volgt in te stellen:

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

Ik kon hier geen andere oplossing voor vinden. Dit kan trouwens een bug zijn van spring-cloud-aws-autoconfigure pakket.

Veel succes!



  1. Waarom zijn UNION-query's zo traag in MySQL?

  2. Hoe stel ik een MySQL-rij in op ALLEEN-LEZEN?

  3. MySQL Bestel op een nummer, lege tekenreeksen (of nullen) als laatste

  4. Tien tips voor het bereiken van MySQL- en MariaDB-beveiliging