Spring -Boot: Как установить свойства пула JDBC, такие как максимальное количество соединений?
Spring -Boot - довольно устрашающий инструмент, но документация немного редка, когда речь идет о более продвинутой конфигурации. Как установить свойства, такие как максимальный размер для пула соединений с базой данных?
Spring -Boot поддерживает tomcat-jdbc
, HikariCP
и Commons DBCP
изначально все они настроены одинаково?
Ответы
Ответ 1
Оказывается, настройка этих свойств конфигурации довольно прямолинейна, но официальная документация является более общей, поэтому ее может быть сложно найти при поиске конкретной информации о конфигурации пула соединений.
Чтобы установить максимальный размер пула для tomcat-jdbc, установите это свойство в своих .properties или .yml файле:
spring.datasource.maxActive=5
Вы также можете использовать следующее, если хотите:
spring.datasource.max-active=5
Вы можете установить любое свойство пула соединений, которое вы хотите таким образом. Ниже приведен полный список свойств, поддерживаемых tomcat-jdbc
.
Чтобы понять, как это работает в целом, вам нужно немного копаться в коде Spring -Boot.
Spring -Boot создает такой DataSource (см. здесь, строка 102):
@ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX)
@Bean
public DataSource dataSource() {
DataSourceBuilder factory = DataSourceBuilder
.create(this.properties.getClassLoader())
.driverClassName(this.properties.getDriverClassName())
.url(this.properties.getUrl())
.username(this.properties.getUsername())
.password(this.properties.getPassword());
return factory.build();
}
DataSourceBuilder отвечает за выяснение, какую библиотеку пула использовать, проверяя каждую из серии классов знаний в пути к классам. Затем он создает DataSource и возвращает его функции dataSource()
.
В этот момент магия срабатывает при использовании @ConfigurationProperties
. Эта аннотация сообщает Spring искать свойства с префиксом CONFIGURATION_PREFIX
(который есть spring.datasource
). Для каждого свойства, начинающегося с этого префикса, Spring будет пытаться вызвать setter на DataSource с этим свойством.
Tomcat DataSource является расширением DataSourceProxy, у которого есть метод setMaxActive()
.
И то, как ваш spring.datasource.maxActive=5
применяется правильно!
Как насчет других пулов соединений
Я не пробовал, но если вы используете один из других поддерживаемых пулов соединений Spring -Boot (в настоящее время HikariCP или Commons DBCP), вы должны иметь возможность устанавливать свойства одинаково, но вам понадобится посмотреть документацию проекта, чтобы узнать, что доступно.
Ответ 2
В текущей версии Spring -Boot (1.4.1.RELEASE) каждая реализация источника данных для пула имеет свой собственный префикс для свойств.
Например, если вы используете tomcat-jdbc:
spring.datasource.tomcat.max-wait=10000
Вы можете найти объяснение здесь
spring.datasource.max-wait=10000
это больше не имеет эффекта.
Ответ 3
Различные пулы соединений имеют разные конфигурации.
Например, Tomcat (по умолчанию) ожидает:
spring.datasource.ourdb.url=...
и HikariCP будут довольны:
spring.datasource.ourdb.jdbc-url=...
Мы можем удовлетворить обе конфигурации без конфигурации:
spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}
Не существует свойства для определения поставщика пула соединений.
Взгляните на источник DataSourceBuilder.java
Если Tomcat, HikariCP или Commons DBCP находятся в пути к классам, один из них будет выбран (в том порядке с первым Tomcat).
... поэтому мы можем легко заменить поставщика пула соединений, используя эту конфигурацию maven (pom.xml):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
Ответ 4
В весенней загрузке 2.x вам нужно ссылаться на специфические свойства провайдера.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database
По умолчанию, hikari может быть установлен с помощью spring.datasource.hikari.maximum-pool-size
.
Ответ 5
На основе вашего приложения тип/размер/нагрузка/нет. пользователей.. и т.д. - вы можете следить за вашими производственными свойствами
spring.datasource.tomcat.initial-size=50
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=300
spring.datasource.tomcat.max-idle=150
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true