Подтвердить что ты не робот

Как я могу предоставить различные конфигурации баз данных с помощью Spring Boot?

Как я сейчас вижу, у меня есть 5 возможных профилей базы данных

  • CI-тестирование → h2 mem
  • среда разработчика (может быть выполнена проверка или приложение) → h2 mem, или h2 файл, или postgres
  • production → postgres (в идеале учетные данные не хранятся в git/war)

В настоящее время у меня есть postgres, настроенный для запуска приложения, и h2 настроен для тестирования с помощью другого application.properties в java/resource vs test/resources

какой самый простой способ изменить информацию о подключении к базе данных для этих сценариев?

4b9b3361

Ответ 1

Как отмечает М. Деййн в своем комментарии, самый простой способ сделать это - использовать конфигурацию, специфичную для профиля.

Spring Загрузка позволяет иметь один общий файл конфигурации (application.properties), а затем несколько других файлов, каждый из которых относится к профилю (application-${profile}.properties).

Например:

  • application.properties - Общая конфигурация
  • application-dev.properties - Конфигурация для профиля dev
  • application-ci.properties - Конфигурация для профилей ci

Если ваше приложение работает с профилем "ci", например, будет загружен файл конфигурации по умолчанию, а также файл конфигурации ci (который будет содержать свойства конфигурации источника данных для профиля ci).

Для переключения профилей вы можете использовать один из следующих вариантов:

  • Свойство JVM: -Dspring.profiles.active=ci
  • Переключатель командной строки: --spring.profiles.active=dev

Для модульных тестов вы можете использовать аннотацию @ActiveProfiles("test") на ваших тестовых классах, чтобы сообщить Spring, что модульные тесты должны запускаться с тестовым профилем.

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

  • Использование командной строки: --spring.config.location=/srv/myapp/config.properties
  • Использование свойства JVM: -Dspring.config.location=/srv/myapp/config.properties

Ответ 2

Компактный ответ для описанного выше сценария будет заключаться в создании одного файла application.yml и создании различных профилей на основе этого требования в вашем случае -dev, -ci и -prod и предоставления соответствующей информации БД.

Пример примера:

spring:
  profiles.active: development

---
spring:
  profiles: development
datasource:
  db-person:
      url: jdbc:oracle:thin:@db_person_dev
      username: username
      password: pwd
      driver-class-name: oracle.jdbc.OracleDriver
      test-on-borrow: true
      validation-query: SELECT 1 FROM dual
  db-contract:
      url: jdbc:oracle:thin:@db_contract_dev
      username: username
      password: pwd
      driver-class-name: oracle.jdbc.OracleDriver
      test-on-borrow: true
      validation-query: SELECT 1 FROM dual

    ---

    spring:
      profiles: test
    datasource:
      db-person:
          url: jdbc:oracle:thin:@db_person_test
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual
      db-contract:
          url: jdbc:oracle:thin:@db_contract_test
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual

    ---

    spring:
      profiles: production
    datasource:
      db-person:
          url: jdbc:oracle:thin:@db_person_prod
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual
      db-contract:
          url: jdbc:oracle:thin:@db_contract_prod
          username: username
          password: pwd
          driver-class-name: oracle.jdbc.OracleDriver
          test-on-borrow: true
          validation-query: SELECT 1 FROM dual

    ---

Для дальнейшего понимания и простого примера вы можете ссылаться на эту ссылку .