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!