2015-01-18 11 views
22

Wie ich es momentan sehe ich habe 5 mögliche DatenbankWie kann ich verschiedene Datenbankkonfigurationen mit Spring Boot bereitstellen?

  • CI Testprofile -> h2 mem
  • Entwicklerumgebung (könnte Test oder App Lauf sein) -> h2 mem oder h2-Datei oder Postgres
  • Produktion -> postgres (idealerweise Anmeldeinformationen nicht im git/Krieg gespeichert)

zur Zeit habe ich postgres für die Ausführung der Anwendung konfiguriert und h2 für die Prüfung konfiguriert einen anderen application.properties inüber mits vs test/resources

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

+0

beziehen, welches Werkzeug bauen verwenden Sie? –

+5

Profile. Spring Boot lädt die Standard-'application.properties' und, falls angegeben, auch eine profilspezifische. Dies wird [hier] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-profile-specific-properties) in der Dokumentation erklärt. –

+0

@MasterSlave maven – xenoterracide

Antwort

41

Wie M. Deinum in seinem Kommentar erwähnt, ist der einfachste Weg, dies zu tun profile specific configuration.

Spring Boot ermöglicht es Ihnen, eine gemeinsame Konfigurationsdatei (application.properties) und dann mehrere andere Dateien, jeweils für ein Profil (application-${profile}.properties).

Zum Beispiel:

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

Wenn Ihre Anwendung läuft mit "ci" Profil zum Beispiel die Standard-Konfigurationsdatei sowie die CI-Konfigurationsdatei (die die Daten enthalten würde ource Konfigurationseigenschaften für ci Profil) werden geladen.

Profilen wechseln Sie eine der folgenden Optionen verwenden:

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

Für Sie Unit-Tests @ActiveProfiles("test") Annotation verwenden können auf Ihrem Testen Sie Klassen, um Spring mitzuteilen, dass Komponententests mit dem Testprofil ausgeführt werden sollen.

Auch wenn Sie zusammen mit Ihrem Quellcode speichern keine Produktion Datenbank-Anmeldeinformationen möchten, können Sie externe Konfigurationsdatei angeben können, wenn Sie Ihre Anwendung in der Produktion einsetzen:

  • mithilfe der Kommandozeilenschalter: --spring.config.location=/srv/myapp/config.properties
  • mit einer JVM-Eigenschaft: -Dspring.config.location=/srv/myapp/config.properties
+0

Ich versuche das gleiche zu tun. Aber die Konfiguration für die hsqldb wird nicht einfach aufgenommen. Können Sie ein Beispiel für application-dev.properties veröffentlichen? – divinedragon

+1

Wie aktivierst du ein Profil? Nichts, was ich tue, scheint zu funktionieren. – dleerob

+0

'-Dspring.profiles.active = ci' ist ein" VM-Argument ". Suchen Sie in Eclipse run Konfiguration -> Argumente –

0

Compact Antwort für das oben beschriebene Szenario durch die Schaffung eine einzige application.yml Datei sein würde und verschiedene Profile auf der Grundlage der Anforderung zu schaffen, in yo Ihr Fall -dev, -ci und -prod und Bereitstellung der DB-Informationen entsprechend.

Beispiel Beispiel 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 

    --- 

Zum weiteren Verständnis und einfaches Beispiel Sie diese link.

Verwandte Themen