web-dev-qa-db-de.com

Wie kann ich verschiedene Datenbankkonfigurationen mit Spring Boot bereitstellen?

Wie ich es momentan sehe, habe ich 5 mögliche Datenbankprofile

  • CI-Test -> h2 mem
  • entwicklerumgebung (Test oder App ausgeführt) -> h2 mem oder h2-Datei oder Postgres
  • produktion -> Postgres (idealerweise Zeugnisse, die nicht im Git/Krieg gespeichert sind)

momentan habe ich Postgres für die Ausführung der Anwendung konfiguriert und H2 für das Testen über einen anderen application.properties in Java/resources vs test/resources konfiguriert.

was ist der einfachste Weg, um die Datenbankverbindungsinformationen für diese Szenarien zu ändern?

29
xenoterracide

Wie Herr Deinum in seinem Kommentar erwähnt, ist die einfachste Methode, profile-spezifische Konfiguration zu verwenden.

Spring Boot ermöglicht Ihnen, eine gemeinsame Konfigurationsdatei (application.properties) und mehrere andere Dateien zu erstellen, von denen jede für ein Profil spezifisch ist (application-${profile}.properties).

Zum Beispiel:

  • application.properties - Gemeinsame Konfiguration
  • application-dev.properties - Konfiguration für das dev-Profil
  • application-ci.properties - Konfiguration für ci-Profile

Wenn Ihre Anwendung beispielsweise mit einem "ci" -Profil läuft, werden die Standardkonfigurationsdatei sowie die ci-Konfigurationsdatei (die die Datenquellen-Konfigurationseigenschaften für das ci-Profil enthalten würde) geladen.

Zum Wechseln des Profils können Sie eine der folgenden Optionen verwenden:

  • JVM-Eigenschaft: -Dspring.profiles.active=ci
  • Befehlszeilenschalter: --spring.profiles.active=dev

Für Komponententests können Sie die @ActiveProfiles("test")-Anmerkung in Ihren Testklassen verwenden, um Spring mitzuteilen, dass Komponententests mit einem Testprofil ausgeführt werden sollten.

Wenn Sie keine Produktionsdatenbank-Anmeldeinformationen zusammen mit dem Quellcode speichern möchten, können Sie bei der Bereitstellung Ihrer App in der Produktion eine externe Konfigurationsdatei angeben:

  • Befehlszeilenschalter verwenden: --spring.config.location=/srv/myapp/config.properties
  • Verwenden einer JVM-Eigenschaft: -Dspring.config.location=/srv/myapp/config.properties
52

Die kompakte Antwort für das obige Szenario wäre, eine einzelne application.yml-Datei zu erstellen und je nach Anforderung verschiedene Profile zu erstellen, in Ihrem Fall -dev, -ci und -prod und die DB-Informationen entsprechend bereitzustellen.

Beispielbeispiel ist:

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

    ---

Für ein besseres Verständnis und ein einfaches Beispiel können Sie diesen Link verwenden.