Какой пул соединений (Connection Pool) выберет Spring Boot, если в classpath есть и кастомный, и стандартный (HikariCP)?

«Какой пул соединений (Connection Pool) выберет Spring Boot, если в classpath есть и кастомный, и стандартный (HikariCP)?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Spring Boot использует четкий алгоритм выбора источника данных (DataSource), который определяет, какой пул соединений будет использован.

Порядок приоритета (от высшего к низшему):

  1. Явное указание в конфигурации: Если в свойствах (например, application.properties) задан spring.datasource.type, будет использован именно этот класс.
    spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
  2. Наличие кастомного пула в classpath: Если в зависимостях проекта есть библиотека пула соединений (например, Tomcat JDBC, Commons DBCP2), Spring Boot отдаст приоритет ей, а не HikariCP.
  3. Стандартный выбор (по умолчанию): Если ни одно из условий выше не выполнено, Spring Boot автоматически настраивает HikariCP, при условии, что он находится в classpath (что верно для spring-boot-starter-data-jpa или spring-boot-starter-jdbc).

Практический вывод: При добавлении зависимости кастомного пула (например, tomcat-jdbc) он будет выбран автоматически. Чтобы гарантированно использовать HikariCP, нужно либо исключить другие пулы, либо явно указать spring.datasource.type=com.zaxxer.hikari.HikariDataSource.