Ответ
Spring Boot использует четкий алгоритм выбора источника данных (DataSource), который определяет, какой пул соединений будет использован.
Порядок приоритета (от высшего к низшему):
- Явное указание в конфигурации: Если в свойствах (например,
application.properties) заданspring.datasource.type, будет использован именно этот класс.spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource - Наличие кастомного пула в classpath: Если в зависимостях проекта есть библиотека пула соединений (например, Tomcat JDBC, Commons DBCP2), Spring Boot отдаст приоритет ей, а не HikariCP.
- Стандартный выбор (по умолчанию): Если ни одно из условий выше не выполнено, Spring Boot автоматически настраивает HikariCP, при условии, что он находится в classpath (что верно для
spring-boot-starter-data-jpaилиspring-boot-starter-jdbc).
Практический вывод: При добавлении зависимости кастомного пула (например, tomcat-jdbc) он будет выбран автоматически. Чтобы гарантированно использовать HikariCP, нужно либо исключить другие пулы, либо явно указать spring.datasource.type=com.zaxxer.hikari.HikariDataSource.
Ответ 18+ 🔞
Ну ты смотри, какая заковыристая история с этими базами данных в Спринге! Как будто на базаре стоят три продавца с одним и тем же товаром, и ты такой: "Кому из вас платить?" А Спринг Бут — он как главный закупщик, у него в голове чёткий план, кого слушать.
Вот смотри, как он решает, какую банку с соединениями (этот твой DataSource) тебе подсунуть:
Кто главнее в этой очереди (от самого наглого к самому скромному):
-
Твой прямой приказ. Если ты в своём
application.propertiesнаписал, как отче наш: "Хочу именно эту банку!", то всё, вопрос закрыт. Ты босс.spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSourceСказал "томкат" — получил томкат, даже если у тебя в кармане лежит три других пула. Твоя воля, ёпта.
-
Кто громче крикнул "я тут!". Если ты в проект (в pom.xml или build.gradle) засунул какую-нибудь левую библиотеку с пулом соединений (ну, типа того же томката или commons-dbcp2), то Спринг Бут её увидит первее всех и скажет: "О, а вот и специалист подъехал!". И автоматом выберет её, а не нашего тихоню HikariCP. Такие дела.
-
Молчаливый пай-мальчик по умолчанию. Если ты не орал приказами и не тащил в проект левых продавцов, то Спринг Бут вздохнёт и скажет: "Ладно, давайте самого проверенного". И достанется с полки HikariCP. Но только при одном условии — что он вообще у тебя на этой полке есть (а он есть, если ты взял стартер для JPA или JDBC).
А теперь практический вывод, чтобы не обосраться: Если ты вдруг добавил какую-нибудь зависимость с другим пулом — он и вылезет, как хитрая жопа из штанов. Хочешь точно, чтобы работал HikariCP? Либо выкидывай нахуй всех конкурентов из зависимостей, либо дай тот самый прямой приказ из первого пункта: spring.datasource.type=com.zaxxer.hikari.HikariDataSource. Тогда уже ни у кого не будет вопросов.