Можно ли указать несколько URL при настройке DataSource в Spring?

«Можно ли указать несколько URL при настройке DataSource в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет. Стандартная конфигурация DataSource в Spring Boot через свойства spring.datasource.* поддерживает только один URL подключения к базе данных.

Пример конфигурации (application.properties):

spring.datasource.url=jdbc:postgresql://primary-host:5432/mydb
spring.datasource.username=user
spring.datasource.password=pass

Почему только один URL? Базовый DataSource предназначен для подключения к одной конкретной инстанции БД. Для работы с несколькими узлами (например, master-replica) требуется дополнительная логика.

Как реализовать подключение к нескольким узлам?

  1. Использование AbstractRoutingDataSource: Создание кастомного источника данных для роутинга запросов (например, чтение на реплику, запись на мастер).
  2. Специализированные библиотеки: Например, для PostgreSQL можно использовать PgBouncer или pgpool-II как прокси, который сам управляет пулом соединений к разным узлам.
  3. Явное создание нескольких DataSource бинов: Для разных целей (отдельный бин для чтения, отдельный для записи).

Ключевой вывод: Свойство spring.datasource.url принимает единственную строку подключения. Любая логика балансировки или репликации требует программной реализации поверх стандартного DataSource.