2016-12-14 85 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