OpenShift 3:如何使用Java访问POSTGRESQL POD环境变量?

OpenShift 3:如何使用Java访问POSTGRESQL POD环境变量?,java,postgresql,tomcat,environment-variables,openshift,Java,Postgresql,Tomcat,Environment Variables,Openshift,我有一个Java webapp在Tomcat上成功运行 我在myapp部署中创建了三个环境变量: MY_ENV_VAR_1=dbuser MY_ENV_VAR_2=dbpassword MY_ENV_VAR_3=dbname POSTGRESQL_USER POSTGRESQL_PASSWORD POSTGRESQL_DATABASE 我可以使用标准Java代码获得这些值: 我使用“普通Java”代码连接到数据库: connection=DriverManager.getConnection

我有一个Java webapp在Tomcat上成功运行

我在myapp部署中创建了三个环境变量:

MY_ENV_VAR_1=dbuser
MY_ENV_VAR_2=dbpassword
MY_ENV_VAR_3=dbname
POSTGRESQL_USER
POSTGRESQL_PASSWORD
POSTGRESQL_DATABASE
我可以使用标准Java代码获得这些值:

我使用“普通Java”代码连接到数据库:

connection=DriverManager.getConnectionjdbc:postgresql://+postgresqlServiceHost+:+postgresqlServicePort+/+myEnvVar3、myEnvVar1、myEnvVar2

因此,我可以成功连接到数据库

问题是:

我可以在web控制台中看到,但无法从postgresql部署中的三个环境变量中获取值:

MY_ENV_VAR_1=dbuser
MY_ENV_VAR_2=dbpassword
MY_ENV_VAR_3=dbname
POSTGRESQL_USER
POSTGRESQL_PASSWORD
POSTGRESQL_DATABASE
使用'normal'System.getenvPOSTGRESQL_用户;不起作用


那么,有人能告诉我如何使用Java代码访问这三个postgresql pod环境变量的值吗

将以下三个环境变量手动添加到将访问数据库的应用程序的部署环境中

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);

是否已将它们添加到应用程序的部署配置中?部署数据库时不会自动添加它们。请参阅《感谢格雷厄姆》中向应用程序添加数据库环境变量的示例,实际上我在前面找到了您的书,并且看到env变量最初并没有添加到应用程序中。所以我手动添加了它们,它开始工作了。这是正确的方法吗?供将来参考…现在是。当OpenServiceBroker正确地集成到OpenShift中时,当将数据库链接到应用程序时,将有一种方法自动填充环境变量。我不知道他们什么时候会来。