Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O aplicativo web spring-boot perde a capacidade de se conectar ao MySQL / RDS depois de um tempo


Se você estiver usando a configuração automática para definir a conexão RDS do arquivo de propriedades assim:
cloud.aws.rds.testdb.password=testdbpwd
cloud.aws.rds.testdb.username=testdbuser
cloud.aws.rds.testdb.databaseName=testdb

A configuração automática de fonte de dados de inicialização de mola não funcionará mesmo que você coloque estes (ou tomcat datasource conf) em seu arquivo de configuração:
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

Acho que esse é o motivo pelo qual você não pode validar suas conexões no pool antes de usá-las.

Você precisa substituir o método postProcessAfterInitialization para definir as propriedades do pool do bean TomcatJdbcDataSourceFactory assim:
@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;
}
}

Não consegui encontrar nenhuma outra solução para isso. A propósito, isso pode ser um bug de spring-cloud-aws-autoconfigure pacote.

Boa sorte!