Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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>

Ответ 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