Ответ
Нет. Стандартная конфигурация 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) требуется дополнительная логика.
Как реализовать подключение к нескольким узлам?
- Использование
AbstractRoutingDataSource: Создание кастомного источника данных для роутинга запросов (например, чтение на реплику, запись на мастер). - Специализированные библиотеки: Например, для PostgreSQL можно использовать
PgBouncerилиpgpool-IIкак прокси, который сам управляет пулом соединений к разным узлам. - Явное создание нескольких
DataSourceбинов: Для разных целей (отдельный бин для чтения, отдельный для записи).
Ключевой вывод: Свойство spring.datasource.url принимает единственную строку подключения. Любая логика балансировки или репликации требует программной реализации поверх стандартного DataSource.
Ответ 18+ 🔞
Да ты погоди, погоди, погоди, блядь! Ты мне сейчас про какую-то хуйню рассказываешь, а я тебе про жизнь, ёпта!
Вот смотри, ты в своём application.properties пишешь spring.datasource.url. И ты думаешь: "А дай-ка я туда, как умный, через запятую три адреса напишу, пусть он сам выбирает, куда коннектиться!" Так? Ну признавайся, сука, думал же!
Так вот, нихуя!
Эта стандартная пиздюлина от Spring Boot — она тупая, как пробка, блядь. Она возьмёт твою строку, посмотрит на неё одним глазом и скажет: "О, один URL! Щас подключусь!" А если там запятые — она просто обосрётся и упадёт, потому что для неё это один ебанутый адрес, который не распарсить. Она ж не телепат, в рот её чих-пых!
Вот, смотри, как она работает (и не работает):
# ТАК РАБОТАЕТ (но это пиздец как скучно):
spring.datasource.url=jdbc:postgresql://один-единственный-хост:5432/база
spring.datasource.username=юзер
spring.datasource.password=пароль
# А ТАК НЕ РАБОТАЕТ ВООБЩЕ, НИХУЯ:
spring.datasource.url=jdbc:postgresql://хост1:5432,хост2:5432,хост3:5432/база
# Она на этом месте просто ебётся в конвульсиях и помирает.
Почему так, блядь?
Да потому что этот базовый DataSource — он как тот самый Герасим из рассказа, немой и упёртый. Ему дали команду "Иди к тому колодцу" — он и пошёл. А если сказать "Иди к тому, или к тому, или вон к тому, смотри сам" — он нихуя не поймёт, стоит, мычит "Му-му" и всё. Мозгов на такую хуйню у него не заложено!
Так как же, сука, быть, если надо на несколько узлов? А вот тут начинается настоящий ёперный театр!
-
Сделать своего умного Герасима (
AbstractRoutingDataSource). Это когда ты пишешь свою хуйню, которая смотрит на каждый запрос и решает: "Ага, это чтение — пиздуй на реплику! А это запись — а ну-ка, быстро на мастер, тварь!" Самому, блядь, приходится мозги впендюривать. -
Поставить надсмотрщика-прохуйстора. Типа
PgBouncerилиpgpool-II. Это такая отдельная мартышлюшка, которая стоит между твоим приложением и кучей постгресов. Ты ей говоришь: "Вот тебе список хостов", а она уже сама, хитрая жопа, решает, куда коннект кидать. Твоему приложению кажется, что оно общается с одной базой, а на самом деле там целый цирк. -
Завести двух отдельных Герасимов. Создать в конфиге два разных бина
DataSource: один для писанины (мастер), другой для читанины (реплика). И самому, вручную, в коде указывать: "Эту операцию — в этот бин, а эту — в тот". Свободы, блядь, ноль, зато всё под контролем.
Короче, вывод, блядь, простой как хуй с горы:
Стандартная настройка через spring.datasource.url — это про ОДНУ конкретную дырку в базе. Всё, точка. Хочешь умничать с репликацией и отказоустойчивостью — готовься писать код или ставить дополнительные пиздюлины. Волшебной кнопки "сделай хорошо" — нет, ебать её в сраку!