我想用自定义参数值配置Tomcat JDBC Pool的属性。该池由spring-cloud(Spring Cloud Connector)环境(Cloud Foundry)引导,并连接到PostgreSQL数据库。特别是,我想为给定池设置minIdle
,maxIdle
和initialSize
属性。
在“春季香草”环境(非云)中,可以使用轻松设置属性
@ConfigurationProperties
注释。但是,这种方法无法转移到我的Cloud环境中,在该环境中,URL(和其他参数)是从环境变量VCAP_SERVICES
(通过ServiceInfo
实例)中注入的。我不想重新实现Spring Cloud已经对其连接器进行的逻辑。
经过一些搜索,我还偶然发现了一些教程/指南,建议使用PoolConfig
对象(例如http://cloud.spring.io/spring-cloud-connectors/spring-cloud-spring-service-connector.html#_relational_database_db2_mysql_oracle_postgresql_sql_server)。但是,这种方式不能设置我需要的属性,而只能设置以下三个:
minPoolSize
,maxPoolSize
,maxWaitTime
。请注意,我不想设置与连接相关的属性(例如charset),但是这些属性与池本身关联。
从本质上讲,我想进行与https://www.baeldung.com/spring-boot-tomcat-connection-pool类似的配置(使用spring.datasource.tomcat.*
属性)。这种方法的问题在于,如果数据源是由Spring Cloud创建的,则不考虑属性。文章https://dzone.com/articles/binding-data-services-spring的“使用CloudFactory创建数据源”部分声称,以下代码段使得该文本“可以通过spring.datasource。*属性使用application.properties进行调整”:>
@Bean
@ConfigurationProperties(DataSourceProperties.PREFIX)
public DataSource dataSource() {
return cloud().getSingletonServiceConnector(DataSource.class, null);
}
但是,我自己的本地测试(使用spring-cloud:Greenwich.RELEASE
和spring-boot-starter-parent:2.1.3.RELEASE
)表明,这些属性值只是被忽略了。
我找到了解决问题的丑陋方法,但我认为这不合适:
我不认为这是正确的方法,因为我正在使用内部知识(关于数据源的分层)。此外,该方法不适用于属性initialSize
,只有在创建池时才会考虑使用该属性。