2016-06-10 4 views
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?

+0

Использование синтаксиса $ {OPENSHIFT_MYSQL_DB_HOST} в application.yml - способ сделать это, и он должен работать. Как вы пытались? –

+0

О, спасибо, видимо, мне пришлось перезапустить мою машину для Windows, чтобы она работала. Я отбросил свои модификации класса и совершил новую WAR. Я посмотрю в журналы открывания, чтобы увидеть, что такое ошибки. Если вы опубликуете этот комментарий в качестве ответа, я бы с радостью принял его как правильный. еще раз спасибо – Nani

ответ

1

Использование синтаксиса $ {OPENSHIFT_MYSQL_DB_HOST} в application.yml - это способ сделать это, и он должен работать.

Смежные вопросы