Настройка Spring Boot с помощью Docker Compose: выбор конкретной службы базы данных из нескольких служб

В настоящее время я столкнулся с проблемой поддержки 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

Как настроить установку на использование только одной службы базы данных, а не обеих? Обратите внимание, что предоставление информации только для одного источника данных не решает проблему.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
257
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Мне удалось решить эту проблему, используя профили 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.

kcsurapaneni 05.03.2024 21:59

Ах, я понимаю, вы хотите использовать любую базу данных одновременно. Спасибо, я неправильно понял ваш вопрос.

Afsar 05.03.2024 22:03

Другие вопросы по теме

Похожие вопросы

Плагин JavaFX Maven Assembly продолжает упаковывать неправильную версию JDK
Как предотвратить взаимоблокировки в Java с помощью алгоритма Bakery?
AADTS28004: указанное значение входного параметра "область" превысило разрешенное количество областей
Собственная компиляция java.lang.NoSuchMethodException: исключение org.apache.logging.log4j.message.DefaultFlowMessageFactory.<init>() для apache-poi
Количество уникальных строк, которые можно сформировать путем обращения одной подстроки строки
Как выполнить самостоятельное внедрение Spring Boot 3+, чтобы пройти через прокси и применить транзакционное поведение
Удалить символ – из строки в Java
Можно ли получить имя переменной, переданной функции в Java?
Google-cloud-run не будет запускать веб-образ Springboot, созданный Paketo Buildpacks
Как динамически выбирать, какие ограничения следует применять к задаче оптимизации на основе входных данных внешнего интерфейса в Timefold Spring Boot?