2016-12-14 6 views
0

Я использую платформу воспроизведения (Java) и не могу понять, как использовать переменные среды в файле конфигурации для построения строки подключения к базе данных. В то время как я могу использовать переменные окружения, как это (имя пользователя и пароль):Строка подключения DB из переменных окружения

default.username = ${?FU_MAIN_DB_USERNAME} 
default.password = ${?FU_MAIN_DB_PASSWORD} 

Я не могу заставить его работать в url строке. Возможно, это простой случай обработки строк в Scala, который мне не хватает, но поскольку я работаю на Java, я мог бы использовать некоторую помощь.

До сих пор я пытался url строку в следующих форматах и ​​не удалось:

Пробовал добавить $ к имени переменной для выполнения интерполяции:

default.url = «JDBC: PostgreSQL:// $$ {FU_MAIN_DB_HOST?}: {? FU_MAIN_DB_NAME} $$ {? FU_MAIN_DB_PORT}/$$ ";

Но это не заменяет. Скорее, он выбирает строку как таковую.

default.url = "jdbc:postgresql://${?FU_MAIN_DB_HOST}:${?FU_MAIN_DB_PORT}/${?FU_MAIN_DB_NAME}"; 

Это тоже вставляет '$' и все дословные. Тогда я подумал, может быть, что-то вроде PHP-стиля будет работать

default.url = "jdbc:postgresql://${${?FU_MAIN_DB_HOST}}:${${?FU_MAIN_DB_PORT}}/${${?FU_MAIN_DB_NAME}}"; 

Но нет.

Я также пробовал делать вещи вроде "jdbc:postgresql://".concat(${?FU_MAIN_DB_HOST}) ..., но это также вставляет «.concat» дословно.

Наконец-то я попытался выполнить конкатенацию с помощью оператора «+», но мне сообщается (по моей IDE), что символы, такие как +: и т. Д., Не разрешены в файле application.conf.

Как тогда, во имя Бога, я должен это делать ?!

ответ

1

Двойные кавычки отключают интерполяцию. Но вам нужно сделать это для : и //.

Попробуйте

default.url = "jdbc:postgresql://"${?FU_MAIN_DB_HOST}":"${?FU_MAIN_DB_PORT}/${?FU_MAIN_DB_NAME} 

Может быть, вам лучше установить все это в одну большую переменную окружения вместо этого.

+0

Очень приятное предложение, но я считаю, что лучше держать вещи модульными. В синтаксисе, однако, довольно странно, что полная строка была создана без какого-либо оператора или чего-то еще. Возможно, тайна на другой день! :-) – dotslash

+1

Ну, цитаты ужасные. Без специальных символов это выглядело бы довольно хорошо: 'foo = $ {? BASE_DIR}/$ {app.prefix}/tmp/$ {http.hostname}' – Thilo

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