2017-09-12 86 views
0

我有一個Java webapp在Tomcat上成功運行。OpenShift 3:如何使用Java訪問POSTGRESQL POD環境變量?

我在MYAPP創造三個環境變量部署:

MY_ENV_VAR_1=dbuser 
MY_ENV_VAR_2=dbpassword 
MY_ENV_VAR_3=dbname 

我可以使用標準的Java代碼獲取這些值:

myEnvVar1 = System.getenv("MY_ENV_VAR_1"); 
myEnvVar2 = System.getenv("MY_ENV_VAR_2"); 
myEnvVar3 = System.getenv("MY_ENV_VAR_3"); 

我用「正常的Java '代碼連接到數據庫:

connection = DriverManager.getConnection(「jdbc:postgresql://」+ postgresqlServiceHost +「:」+ postgresqlServicePort +「/」+ myEnvVar3,myEnvVar1,myEnvVar2);

所以,我可以成功連接到數據庫。

的問題是:

我可以看到(在Web控制檯),但不能讓PostgreSQL的部署,從以下三個環境變量的值:

POSTGRESQL_USER 
POSTGRESQL_PASSWORD 
POSTGRESQL_DATABASE 

使用「正常」系統。 GETENV( 「POSTGRESQL_USER」);不起作用。

那麼,請有人告訴我如何使用Java代碼訪問這三個postgresql pod環境變量的值?

+0

你將它們添加到您的應用程序部署配置?在部署數據庫時不會自動添加它們。請參閱https://www.openshift.com/promotions/for-developers.html –

+0

將數據庫環境變量添加到應用程序的示例。感謝Graham,我之前實際找到了您的書,並發現env vars最初並未添加到應用程序中。所以我手動添加它們並開始工作。這是做到這一點的正確方法嗎?以供將來參考... – Lyndon

+0

現在它是。當Open Service Broker被正確地結合到OpenShift中時,在將數據庫鏈接到應用程序時,可以自動填充環境變量。我不知道他們什麼時候可能。 –

回答

0

所以,簡單的答案是:

您手動以下三個環境變量添加到將要訪問數據庫的應用程序的部署環境。

POSTGRESQL_USER 
POSTGRESQL_PASSWORD 
POSTGRESQL_DATABASE 

您必須以與您在postgresql部署環境中看到的完全相同的方式執行此操作。

它真的就是這麼簡單...

在Java應用程序:

String postgresqlServiceHost = System.getenv("POSTGRESQL_SERVICE_HOST"); 
String postgresqlServicePort = System.getenv("POSTGRESQL_SERVICE_PORT"); 
String postgresqlDatabase = System.getenv("POSTGRESQL_DATABASE"); 
String postgresqlUser = System.getenv("POSTGRESQL_USER"); 
String postgresqlPassword = System.getenv("POSTGRESQL_PASSWORD"); 

Connection connection = DriverManager.getConnection("jdbc:postgresql://" + postgresqlServiceHost + ":" + postgresqlServicePort + "/" + postgresqlDatabase, postgresqlUser, postgresqlPassword);