如何使用 OpenShift 环境变量配置 MySQL 数据库

How to use OpenShift environment variables to configure a MySQL database

所以我用 JHipster 生成了一个应用程序。

在本地,我只需要修改 application-dev.yml/application-prod.yml 中的数据库信息,一切正常。

现在我想在 OpenShift 上部署我的应用程序。我尝试将环境变量名称放入 application-xxx.yml 但它返回 null。所以我修改了 DatabaseConfiguration.java 以跳过从 .yml 文件中读取信息并直接从环境变量中读取它们。

if(System.getenv("OPENSHIFT_MYSQL_DB_HOST") != null && System.getenv("OPENSHIFT_MYSQL_DB_PORT") != null){
    config.addDataSourceProperty("url", "jdbc:mysql://"+System.getenv("OPENSHIFT_MYSQL_DB_HOST")+":"+System.getenv("OPENSHIFT_MYSQL_DB_PORT")+"/zetravelcloud?useUnicode=true&characterEncoding=utf8");
}
if (System.getenv("OPENSHIFT_MYSQL_DB_USERNAME") != null) {
    config.addDataSourceProperty("user", System.getenv("OPENSHIFT_MYSQL_DB_USERNAME"));
} else {
    config.addDataSourceProperty("user", ""); // HikariCP doesn't allow null user
}
System.out.println(System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD"));
if (System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD") != null) {
    config.addDataSourceProperty("password", System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD"));
} else {
    config.addDataSourceProperty("password", ""); // HikariCP doesn't allow null password
}

而不是

config.addDataSourceProperty("url", dataSourceProperties.getUrl());
if (dataSourceProperties.getUsername() != null) {
    config.addDataSourceProperty("user", dataSourceProperties.getUsername());
} else {
    config.addDataSourceProperty("user", ""); // HikariCP doesn't allow null user
}
if (dataSourceProperties.getPassword() != null) {
    config.addDataSourceProperty("password", dataSourceProperties.getPassword());
} else {
    config.addDataSourceProperty("password", ""); // HikariCP doesn't allow null password
}

现在的问题是:如何在我的配置中正确使用OpenShift环境变量class来成功连接数据库?

奖金问题:有什么更好的方法来解决这个问题,我觉得将变量名放在 DatabaseConfiguration class 中是不对的?

在 application.yml 中使用 ${OPENSHIFT_MYSQL_DB_HOST} 语法是实现它的方法,它应该有效。