2016-07-07 171 views
1

我在persistence.xml中設置了數據庫連接,包括服務器url和用戶名/密碼。但是,如果我想在開發環境(dev/qa/stg/prod)之間切換,是否有更好的方法來更改配置,而不是手動修改persistence.xml?如何使用持久性動態配置數據庫連接

我正在使用jdbc連接來調用存儲過程以及休眠的東西。 jdbc連接更加靈活。它根據環境變量DEV_ENV連接到不同的數據庫。

// DEV DB 
if (env.equalsIgnoreCase("dev")) { 
    connectionURL = "jdbc:oracle:thin:@ldap://mdaoid.mdanderson.org:389/risdev3, cn=OracleContext,dc=mdacc,dc=tmc,dc=edu"; 
    user = "ristore_owner"; 
    pass = "ristoreowner987"; 
} 
// QA DB 
else if (env.equalsIgnoreCase("qa")) { 
    connectionURL = "jdbc:oracle:thin:@ldap://mdaoid.mdanderson.org:389/risdev3, cn=OracleContext,dc=mdacc,dc=tmc,dc=edu"; 
    user = "ristore_owner_qa"; 
    pass = "ristore987q"; 
} 

如何配置hibernate數據庫連接以相同的方式,拿起環境變量,並決定哪個數據庫連接到飛行?

編輯:人們向我展示瞭如何通過從tomcat服務器獲取數據庫信息的戰爭來實現它。然而,我的是一個java應用程序(jar),我沒有部署。我把它設置爲一個cron作業來每週運行這個jar。

+1

爲什麼要手動修改persistence.xml?你可以擁有2個持久性單元「dev」和「prod」,並創建你的EMF,以適當的爲準 –

+0

@NeilStockton沒有考慮過使用單位。會試試看。在哪裏以及如何創建我的EMF? – ddd

+0

你在哪裏以及如何創建你的EMF? –

回答

1
  1. 創建兩個xml配置文件。 persistenceDev.xml和persistenceQA.xml

  2. 爲每個環境添加網址,用戶和密碼。

  3. 然後用戶SessionFactory的創建會話

注意:您更改的唯一事情是配置文件名。 我會提供的是一個命令行參數或靜態最終變量。假設0 = dev,1 = qa。

String configFileName = (args[0] == 0) ? persistenceDev.xml: persistenceQA.xml; 

獲取配置文件後您的代碼不會改變。

0

我看到你以某種方式提供環境。我的建議是使用一個構建工具(如Maven,Gradle等),通過它可以給出UAT,Dev,Prod等實際環境的參數。

然後,您可以擁有多個配置文件,如application-dev.xml,application-uat.xml。在構建過程中,您使用構建工具來加載approppiate配置文件。

作爲在Maven中這樣做的參考,您可以看看here