Spring-Boot: Як встановити властивості пулу JDBC, як максимальну кількість з'єднань?


81

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

Spring-Boot підтримує tomcat-jdbc, HikariCPі Commons DBCPчи всі вони налаштовані однаково?


Я вважаю, що краще використовувати іншого постачальника джерел даних, такого як 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).
Dave Syer

Дякуємо, що вказали на це @DaveSyer, це не дуже зручно для SEO при пошуку ключових слів, пов’язаних з пулом підключень. Я згоден з різницею пулів підключення мають різні конфігурації, ось чому я додав розділ про це. Я оновлю відповідь.
JBCP

8
Див. Інші відповіді, такі як Даніеля та Wildloop. Станом на пізніші версії весняного завантаження, для багатьох налаштувань потрібно встановити параметри, які відповідають постачальнику. наприклад spring.datasource.tomcat.max-activeабо spring.datasource.hikari.maximum-pool-size.
Dan Tanner

Для мене справа 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

Залежно від типу вашої програми / розміру / завантаження / №. користувачів ..etc - u може продовжувати стежити за вашими виробничими властивостями

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.