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

spring-boot web app mister evnen til at oprette forbindelse til MySQL / RDS efter et stykke tid

Hvis du bruger automatisk konfiguration til at definere RDS-forbindelse fra egenskabsfilen som denne:

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

Spring boot-datakildens automatiske konfiguration vil ikke fungere, selvom du sætter disse (eller tomcat datakilde conf) til 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

Jeg tror, ​​at dette er grunden til, at du ikke kan validere dine forbindelser i poolen, før du bruger dem.

Du skal tilsidesætte postProcessAfterInitialization-metoden for at indstille poolegenskaber for TomcatJdbcDataSourceFactory-bønnen på denne måde:

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

Jeg kunne ikke finde nogen anden løsning på dette. Dette kan i øvrigt være en fejl i spring-cloud-aws-autoconfigure pakke.

Held og lykke!



  1. Hvorfor er det mere sikkert at bruge en mysql-forberedt sætning end at bruge de almindelige escape-funktioner?

  2. Sådan får du gårsdagens dato i T-SQL

  3. Sådan konfigureres asynkron replikering fra Galera Cluster til selvstændig MySQL-server med GTID

  4. Er der en måde at indlæse tekstdata til databasen i PostgreSQL?