2015-10-14 3192 views
4

我試圖參數化我的application.yml文件,所以我可以將它放在我的項目的github repo上,但不顯示數據庫連接的詳細信息。我想使用系統環境變量來做到這一點。我使用OS X El Capitan。Spring Boot - 在application.yml中使用環境變量

我把我的.bash_profile下面幾行:

export JDBC_TODO_USER=<my-username> 
export JDBC_TODO_PASS=<my-password> 

及以下線路在我application.yml

spring: 
    datasource: 
    username: ${JDBC_TODO_USER} 
    password: ${JDBC_TODO_PASS} 

我也試過

spring: 
    datasource: 
    username: ${JDBC.TODO.USER} 
    password: ${JDBC.TODO.PASS} 

兩個那些給我一個錯誤在應用程序的開始: java.sql.SQLInvalidAuthorizationSpecException: Could not connect: Access denied for user '${JDBC_TODO_USER'@'<my-ip-address>' (using password: YES)

當然,當我用我的用戶名替換${JDBC_TODO_USER}並用我的密碼${JDBC_TODO_PASS}時,一切正常。它看起來像Spring不明白我指的是環境變量。我需要做一些額外的配置才能使它工作嗎?

回答

0

我發現的罪魁禍首 - 我做了一切通過Eclipse和Eclipse沒有看到.bash_profile文件裏面有什麼。在運行 - >運行配置... - >環境中設置這些環境變量解決了問題。

3

您的環境變量很可能無法使用。你有沒有嘗試過以下內容以查看它們是否可以訪問?

echo $JDBC_TODO_USER 
echo $JDBC_TODO_PASS 

export 

一個安全可靠的方式,以確保它們可以是:

  1. 須藤六/etc/launchd.conf
  2. 添加以下行:
setenv JDBC_TODO_USER 
setenv JDBC_TODO_PASS 
  1. 保存文件。
  2. 運行出口,以確認您的條目有

您也可以嘗試系統屬性:

的Java -Djdbc.todo.user = myuser的-Djdbc.todo.pass =爲mypass的罐子MyProject.jar

與您的應用程序中的以下內容。陽明:

spring: 
    datasource: 
    username: ${jdbc.todo.user} 
    password: ${jdbc.todo.pass} 

但最終存儲在生產環境中的用戶憑據,我會建議下列之一: http://docs.ansible.com/ansible/playbooks_vault.html https://vaultproject.io/

+0

正如我在我自己的答案寫,問題與Eclipse沒有看到變量在'.bash_profile'中定義。我注意到當我在終端中運行'mvn spring-boot:run'時,應用程序啓動時沒有任何問題。我不得不在Eclipse中的運行配置中設置這些變量,以使其在那裏工作。但是謝謝你指出了通過這些憑據的其他方式! –

+0

這也適用於使用Java屬性文件。我只想指出,當依賴環境變量時,你必須明確說明它們事先存在(例如,注意Win env的)。 – reim