1
因此,我使用JHipster生成了一个应用程序。如何使用OpenShift环境变量来配置MySQL数据库
本地,我只是修改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环境变量在我的配置类成功连接到数据库?
奖金问题:什么是更好的方法来解决这个问题,我觉得把变量名放在DatabaseConfiguration
类中是不对的?
在application.yml中使用$ {OPENSHIFT_MYSQL_DB_HOST}语法是实现它的方法,它应该可以工作。你是怎么试试的? –
哦谢谢,显然我必须重新启动我的Windows机器才能正常工作。我回滚了我的类修改并提交了新的WAR。我将查看openshift日志以查看错误是什么。如果你发表这个评论作为答案,我会高兴地接受它作为正确的。再次感谢 – Nani