2016-04-06 14 views
2

çalışmak için hazırda ORM veritabanı özelliklerini yapılandırmak için benim hibernate.cfg.xml olarak:nasıl içine belirtilen bir ağ soketi, kullanmak veritabanına bağlanmak amacıyla Docker

<property name="connection.url">jdbc:postgresql://localhost:PORT/DBNAME</property> 
kullanıcı adı ile birlikte

, şifre:

<property name="connection.username">user</property> 
    <property name="connection.password">pass</property> 

Dağıtım için docker'ı kullanmak istiyorum.

Sorun şu ki, her defasında yeniden dağıtmak istediğim kaynak kodunu (ör. Hibernate.cfg.xml) değiştirmem ve yeni bir .war dosyası oluşturmam gerekiyor.

Bundan kaçınmanın bir yolu var mı? Aynı .war dosyasını kullanabilir miyim ve docker'dan bir veritabanına dinamik olarak bağlantı kurabilir miyim?

ben bir yapılandırma dosyası var herhalde (gibi bir şey .env) db kimlik bilgilerini içeren ve java ve liman işçilerinin hem bu okuma var, ama şimdi çok

+0

Bir Java EE sunucusu için ne kullanıyorsunuz? –

+0

yığınım hazırda bekletme, postgresql, tomcat, nginx (tomcat için ters vekil olarak) – chefarov

+0

Temelde benim sorunum docker - dov'lu çalıştırmayı şu anda çalıştırıyordu ama docker yapısında değil, ama doverfile içindeki env değişkenlerini kullanarak bitti ENV komutu (en iyi uygulama değil). Böylece bunu verepnh'in yanıtıyla birleştirerek, bu sorunu çözebileceğimi düşünüyorum. – chefarov

cevap

2

I yapmak liman işçisi yapılandırmak yok edeceğini aşağıdaki seçenekleri kullanabilirsiniz inanıyoruz: her ortam için doğru olanı seçmek için maven profilleri ve filtreleri kullanarak farklı hibernate.cfg.xml dosyaları koruyun <property name="connection.username">${db.user}</property>

  • gibi XML

    • sistemin özellikleri
    • kullanın programlı yapılandırma ve sistem özelliklerini veya ortam değişkenleri

    sistem özelliklerine sahip sorun olarak kullanmak, uygulama sunucusunda özellikleri dosyaları bunları ayarlamak veya komut satırı yoluyla geçmesi gerekecek onları kullanmaktır -Ddb.user=foo. Bunları uygulama sunucusunda ayarlamak için, kapsayıcıyı bir CLI, REST API'sı veya başka bir yapılandırma dosyası (sunucu için bu kez) ayarlaması gerekir. Bu sizin .war için ne dağıttığınıza bağlı olacaktır. Bu özelliklerin komut satırından geçirilmesi, bu işlemi listeleyebilen herkes için düz metin olarak orada bulunan veritabanı kimlik bilgileri sorununa yol açar.

    Birden çok yapılandırma dosyasını veya özellik dosyalarını kullanarak bakımı da bir acıdır ve en azından basit kimlik bilgileri oluşturmamanın gerekli olduğunu düşündüğüm oluşturma işleminize ek yük ekler.

    programmatic configuration'u kullanmanın en iyi yol olduğuna inanıyorum. Sonra yapmanız gereken tek şey kapsayıcıdaki doğru ortam değişkenlerini belirlemektir. Uygulamanızda bu sadece bir konudur:

    Configuration cfg = new Configuration() 
        .setProperty("connection.username", System.getenv("DB_USER")) 
        // ... 
    
  • +0

    Çalıştı, teşekkürler – chefarov

    İlgili konular