Как настроить свойства пула Tomcat JDBC при использовании конфигурации Spring Cloud Connector? - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу настроить свойства Tomcat JDBC Pool с использованием пользовательских значений параметров.Пул загружается средой Spring Cloud Connector (Cloud Foundry) и подключается к базе данных PostgreSQL.В частности, я хочу установить свойства minIdle, maxIdle и initialSize для данного пула.

В среде «весна-ваниль» (не облачной) свойства можно легко установить с помощью файлов

  • application.properties / .yaml со свойствами среды,
  • @ConfigurationProperties аннотация.

Однако этот подход не переносится в мою облачную среду, где 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.

Обратите внимание, что я не хочу устанавливать свойства, связанные с подключением (например, набор символов), но свойства связаны с самим пулом.

По сути, я хотел бы выполнить настройку аналогично https://www.baeldung.com/spring-boot-tomcat-connection-pool (используя свойства spring.datasource.tomcat.*). Проблема этого подхода заключается в том, что свойства не учитываются, если источник данных был создан Spring Cloud.https://dzone.com/articles/binding-data-services-spring, В разделе «Использование CloudFactory для создания источника данных» утверждается, что следующий фрагмент кода делает это так, что конфигурация «может быть изменена с использованием application.properties через spring.datasource. *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) показал, что эти значения свойств просто игнорируются.

Я нашел некрасивый способ решениямоя проблема, но я думаю, что она неуместна:

  • Пусть Spring-Cloud создаст DataSource, который не является непосредственно DataSource в пуле,
  • проверьте, что ссылка является потомком DelegatingDataSource,
  • разрешить делегат, который затем является самим пулом,
  • изменить свойства программно непосредственно в самом пуле.

Я не верю, что этоправильный путь, поскольку я использую внутреннее знание (на уровне источников данных).Кроме того, этот подход не работает для свойства initialSize, которое учитывается только при создании пула.

...