Spring Boot - 在application.yml中使用环境变量

时间:2015-10-14 12:41:36

标签: spring spring-boot

我试图对我的application.yml文件进行参数化,以便我可以将它放在我的项目的github repo上,但不会显示数据库连接细节。我想使用系统环境变量来做到这一点。我使用OS X El Capitan。

我在.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不明白我是指环境变量。我是否需要进行一些额外配置才能使其正常工作?

2 个答案:

答案 0 :(得分:3)

您的环境变量很可能无法使用。您是否尝试过以下操作以查看它们是否可访问?

echo $JDBC_TODO_USER
echo $JDBC_TODO_PASS

export

确保它们可用的确定方法是:

  1. sudo vi /etc/launchd.conf
  2. 添加以下行:
  3. setenv JDBC_TODO_USER 
    setenv JDBC_TODO_PASS
    
    1. 保存文件。
    2. 运行导出以确认您的参赛作品
    3. 您还可以尝试系统属性:

      java -Djdbc.todo.user = myuser -Djdbc.todo.pass = mypass -jar MyProject.jar

      在你的application.yml中有以下内容:

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

      但最终是为了在生产环境中存储用户凭据,我建议使用以下方法之一: http://docs.ansible.com/ansible/playbooks_vault.html https://vaultproject.io/

答案 1 :(得分:0)

我找到了罪魁祸首 - 我通过Eclipse完成了所有工作,Eclipse没有看到.bash_profile文件中的内容。在Run - &gt;中设置这些环境变量运行Configuratons ... - &gt;环境解决了这个问题。