В настоящее время я столкнулся с проблемой поддержки Docker Compose и Spring Boot Docker. В моем файле compose.yaml я указал две службы баз данных, но намерен использовать только одну из них, а не обе. Файл compose.yaml имеет следующую структуру:
version: "3"
services:
server:
platform: linux/amd64
image: mysql:8.0.23
---
client:
platform: linux/amd64
image: mysql:8.0.23
---
Причина наличия двух служб заключается в том, что я планирую использовать вторую службу для другого приложения. Однако в текущей настройке при работе с одной службой базы данных Spring Boot обычно автоматически настраивает детали подключения . Имея два сервиса, я сталкиваюсь с трудностями при выборе того, какой из них использовать. Сообщение об ошибке, которое я получаю, выглядит следующим образом:
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 1 of method dataSource in org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari required a single bean, but 2 were found:
- jdbcConnectionDetailsForClient_database: defined in unknown location
- jdbcConnectionDetailsForServer_database: defined in unknown location
This may be due to missing parameter name information
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
Как настроить установку на использование только одной службы базы данных, а не обеих? Обратите внимание, что предоставление информации только для одного источника данных не решает проблему.




Мне удалось решить эту проблему, используя профили Docker с функцией Compose. compose.yaml файл обновляется следующим образом:
version: "3"
services:
server:
profiles:
- server
platform: linux/amd64
image: mysql:8.0.23
---
client:
profiles:
- client
platform: linux/amd64
image: mysql:8.0.23
---
Кроме того, в файл Spring Boot application.properties включено следующее свойство:
spring.docker.compose.profiles.active=server
В этой конфигурации приложением Spring Boot будут использоваться только службы, отмеченные профилем server в файле компоновки Docker.
Вам нужно будет запустить его на двух разных портах. Оба не могут быть доступны на 3306 (порт по умолчанию).
Также вам нужно будет определить URL-адрес, имя пользователя и пароль, оба из которых могут находиться в Spring.datasource (URL-адрес, имя пользователя, пароль), а другой может быть Spring.customdb (URL-адрес, имя пользователя, пароль).
Создайте @Configuration и добавьте компонент @Bean для DataSource для второй базы данных, прочитав файл application.yml/.properties (параметры Spring.customdb)
Первичный источник данных может быть создан весной при запуске, доступном в (spring.datasource).
Ах, я понимаю, вы хотите использовать любую базу данных одновременно. Спасибо, я неправильно понял ваш вопрос.
@Afasr У меня службы базы данных работают на двух разных портах, чтобы избежать конфликтов при работе Docker. Как я указал в своем первоначальном вопросе, моя цель — использовать только одну службу базы данных, а не обе. Следовательно, я считаю, что нет необходимости настраивать параметры источника данных для обеих служб. Кроме того, в своем ответе я подчеркнул, что этого можно добиться с помощью функции создания профилей Docker.