2016-04-06 44 views
2

合作,以便連接到我使用網絡插座,這是內部指定的數據庫我hibernate.cfg.xml爲:如何配置Hibernate ORM數據庫屬性與碼頭工人

<property name="connection.url">jdbc:postgresql://localhost:PORT/DBNAME</property> 

與用戶名一起,密碼:

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

我想使用docker進行部署。

我的問題是,目前我必須更改源代碼(例如hibernate.cfg.xml),並重新生成一個新的.war文件,每次我想重新部署。

有沒有辦法避免這種情況?我可以使用相同的.war文件並從docker動態鏈接到數據庫嗎?

我想我可以有一個配置文件(類似.ENV),將包含數據庫憑據,並有Java和泊塢窗閱讀,但我現在不配置搬運工這樣做

+0

您對Java EE服務器有什麼用? –

+0

我的堆棧是hibernate,postgresql,tomcat,nginx(作爲tomcat的反向代理) – chefarov

+0

主要是我的問題是docker支持--env-file在docker運行但不在docker build,但是我最終將env變量放在dockerfile中ENV命令(不是最佳實踐)。因此,將這一點與andrepnh的迴應相結合,我想我可以解決這個問題。 – chefarov

回答

2

我相信你有以下幾種選擇:

  • 使用系統屬性中的XML爲<property name="connection.username">${db.user}</property>
  • 使用maven配置文件和過濾器來選擇一個正確的爲每個環境中保持不同hibernate.cfg.xml文件
  • 使用的程序化配置和系統性能或環境變量

與系統性能的問題是,要使用它們你就必須設置他們在您的應用程序服務器上,使用屬性文件或通過命令行傳給他們,在-Ddb.user=foo。要在應用程序服務器中設置它們,您必須使容器使用CLI,REST API或另一個配置文件(這次是服務器)來設置它。這將取決於你正在部署你的.war。通過命令行傳遞這些屬性會導致數據庫憑據以明文形式存在,以便列出該進程的任何人都可以訪問。

維護多個配置文件或使用屬性文件也是一件痛苦的事情,它會增加構建過程的開銷,我認爲這不是必需的,至少不會設置簡單的憑據。

我相信你最好打賭是使用programmatic configuration。然後你所要做的就是在容器中設置正確的環境變量。在您的應用程序中,它只是一個問題:

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

它的工作,謝謝 – chefarov