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


81

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

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


Я считаю, что лучше использовать другого поставщика DataSource, например BoneCP или C3P0,
Луигги Мендоза,

3
-Dspring.datasource.tomcat.initial-size=10(по умолчанию 10)
Кристоф Русси

Ответы:


122

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

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

Tomcat DataSource - это расширение DataSourceProxy , в котором есть метод setMaxActive().

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

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

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


6
По этому поводу есть явная документация (как это бывает): docs.spring.io/spring-boot/docs/current/reference/htmlsingle/… . Также вы можете запустить приложение и посмотреть / configprops (с Actuator). Проблема для документации заключается в том, что все реализации DataSource имеют немного разные свойства (вы просто привязываетесь к Java bean).
Дэйв Сайер

Спасибо, что указали на @DaveSyer, он не очень удобен для SEO при поиске ключевых слов, связанных с пулом соединений. Я согласен с тем, что пулы соединений имеют разные конфигурации, поэтому я добавил об этом раздел. Обновлю ответ.
JBCP

8
Смотрите другие ответы, такие как Daniel's и wildloop's. В более поздних версиях весенней загрузки многие настройки требуют, чтобы вы установили настройки для конкретного поставщика. например spring.datasource.tomcat.max-activeили spring.datasource.hikari.maximum-pool-size.
Дэн Таннер

Только в моем случае spring.datasource.maxActive=1сработало. Эта линия spring.datasource.max-active=1у меня не сработала. Версия Spring Boot2.2.2.RELEASE
Рафаэль

32

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

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

spring.datasource.tomcat.max-wait=10000

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

spring.datasource.max-wait=10000

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



6

Разные пулы подключений имеют разные конфигурации.

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

3

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

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

spring.datasource.tomcat.max-active=5 spring.datasource.tomcat.max-idle=5Мне хватило добавления , спасибо!
L.Butz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.