如何使用 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} 语法是实现它的方法,它应该有效。
所以我用 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} 语法是实现它的方法,它应该有效。