2017-09-12 64 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);