2016-12-14 89 views
0

我正在使用Play Framework(Java),无法弄清楚如何在我的配置文件中使用环境变量来构建数据库连接字符串。虽然我能够使用环境变量是这样的(用户名和密码):从环境变量构建数据库连接字符串

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