it-roy-ru.com

Spring-Boot: Как настроить свойства пула JDBC, например, доступное количество соединений?

Spring-Boot - довольно замечательный инструмент, но документация немного скуднее, когда речь идет о более продвинутой конфигурации. Как я могу установить свойства, такие как максимальный размер для моего пула соединений с базой данных?

Spring-Boot изначально поддерживает Tomcat-jdbc, HikariCP и Commons DBCP все они настроены одинаково?

55
JBCP

Оказывается, установка этих свойств конфигурации довольно проста, но официальная документация носит более общий характер, поэтому может быть трудно найти ее при поиске информации о конфигурации пула соединений. 

Чтобы установить максимальный размер пула для 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().

На этом этапе магия начинает работать с использованием @ConfigurationProperties. Эта аннотация говорит Spring, чтобы искать свойства с префиксом CONFIGURATION_PREFIX (который spring.datasource). Для каждого свойства, которое начинается с этого префикса, Spring будет пытаться вызвать установщик в DataSource с этим свойством.

Источник данных Tomcat - это расширение DataSourceProxy , которое имеет метод setMaxActive().

И вот как ваш spring.datasource.maxActive=5 применяется правильно!

А как насчет других пулов соединений

Я не пробовал, но если вы используете один из других поддерживаемых Spring-Boot пулов соединений (в настоящее время HikariCP или Commons DBCP), вы сможете установить свойства таким же образом, но вам нужно будет посмотреть на проект документация, чтобы знать, что доступно.

107
JBCP

В текущей версии Spring-Boot (1.4.1.RELEASE) каждая реализация источника данных пула имеет свой собственный префикс для свойств.

Например, если вы используете Tomcat-jdbc:

spring.datasource.Tomcat.max-wait=10000

Вы можете найти объяснение здесь

spring.datasource.max-wait=10000

это больше не действует.

29
Daniel Nuss

У разных пулов соединений разные конфиги.

Например, 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>
5
wildloop

В весенней загрузке 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.

2
Mariano LEANCE

На основе вашего приложения тип/размер/нагрузка/нет. пользователей .. и т. д. - вы можете продолжать следить как ваши производственные свойства 

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
0
Pravin