2015-01-18 13 views
22

ben 5 olası veritabanıSpring Boot ile farklı veritabanı yapılandırmalarını nasıl sağlayabilirim? Şu anda Görebildiğim kadarıyla

  • CI test profilleri var -> h2 mem
  • geliştirici ortamı (olabilir testi veya uygulama çalıştırma) -> h2 mem veya h2 dosyası veya postgres
  • üretim -> postgres (git/savaş saklanmayan ideal kimlik)

anda ben postgres uygulamayı çalıştırmak için yapılandırılmış olması ve h2farklı application.properties sahip yoluyla test için yapılandırılmışs vs test/resources

Bu senaryolar için veritabanı bağlantı bilgilerinin değişmesinin en kolay yolu nedir?

+0

başvurabilir? –

+5

Profiller. Spring Boot, varsayılan 'application.properties' türünü yükler ve belirtildiğinde, ayrıca belirli bir profile yüklenir. Bu belgede [burada] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-profile-specific-properties) açıklanmaktadır. –

+0

@MasterSlave maven – xenoterracide

cevap

41

M. Deinum kendi yorumunda bahsettiğinden, bunu yapmanın en kolay yolu profile specific configuration'u kullanmaktır.

Spring Boot, bir ortak yapılandırma dosyasına (application.properties) ve daha sonra her bir profile özgü diğer dosyalara (application-${profile}.properties) sahip olmanıza olanak tanır. Örneğin

: - Ortak yapılandırma

  • application-dev.properties -

    • application.properties ci profillerin

    Başvurunuz "ci" profili ile çalışıyorsa

  • için Yapılandırma - dev
  • application-ci.properties profili için Yapılandırma örneğin, varsayılan yapılandırma dosyasının yanı sıra ci yapılandırma dosyası (verileri içeren ci profili için ource yapılandırma özellikleri yüklenecektir. aşağıdaki seçeneklerden birini kullanabilirsiniz

    profiller arasında geçiş için:

    • JVM özelliği: -Dspring.profiles.active=ci
    • Komut satırı anahtarı: Üzerinde @ActiveProfiles("test") ek açıklama kullanabilirsiniz birim testleri için --spring.profiles.active=dev

    senin Spring'e test dersleriyle test edilmesi gerektiğini test etmek için test sınıfları test edilmelidir.

    • kullanma komut satırı anahtarı: --spring.config.location=/srv/myapp/config.properties
    • Eğer kaynak kodu ile birlikte üretim veritabanı kimlik bilgilerini saklamak istemiyorsanız eğer üretimde uygulamanızı dağıtmak zaman, dış yapılandırma dosyası belirtebilirsiniz Ayrıca

    • bir JVM özelliğini kullanarak: -Dspring.config.location=/srv/myapp/config.properties
  • +0

    Aynısını yapmaya çalışıyorum. Ancak, hsqldb için yapılandırma henüz alınmadı. Application-dev.properties için bir örnek gönderir misiniz? – divinedragon

    +1

    Bir profili nasıl etkinleştirirsiniz? Yaptığım hiçbir şey işe yaramıyor. – dleerob

    +0

    '-Dspring.profiles.active = ci' bir" VM argümanı "dır. Tutulma çalıştırma yapılandırmasında buna bakın -> argümanlar –

    0
    yo içinde, tek application.yml dosyası oluşturma ve ihtiyacına bağlı olarak farklı profiller oluşturarak olurdu yukarıdaki senaryo için

    Kompakt cevap -dev, -ci ve -prod durumları ve DB bilgilerinin buna göre sağlanması.

    Numune örnektir: ileri anlayış ve basit Örneğin

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

    aracı kullandığınız inşa bu link.