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

Spring引导-在application.yml中使用环境变量,spring,spring-boot,Spring,Spring Boot,我正在尝试参数化我的应用程序.yml文件,这样我就可以将它与我的项目一起放在github repo上,但不会透露数据库连接的详细信息。我想使用系统环境变量来实现这一点。我使用OS X El Capitan 我在.bash\u配置文件中添加了以下行: export JDBC_TODO_USER=<my-username> export JDBC_TODO_PASS=<my-password> 我也试过了 spring: datasource: username

我正在尝试参数化我的
应用程序.yml
文件,这样我就可以将它与我的项目一起放在github repo上,但不会透露数据库连接的详细信息。我想使用系统环境变量来实现这一点。我使用OS X El Capitan

我在
.bash\u配置文件中添加了以下行:

export JDBC_TODO_USER=<my-username>
export JDBC_TODO_PASS=<my-password>
我也试过了

spring:
   datasource:
   username: ${JDBC.TODO.USER}
   password: ${JDBC.TODO.PASS}
这两个选项在应用程序启动期间都会给我一个错误:
java.sql.SQLInvalidAuthorizationSpecException:无法连接:拒绝用户“${JDBC\u TODO\u user'@”(使用密码:YES)


当然,当我将
${JDBC\u TODO\u USER}
替换为我的用户名和
${JDBC\u TODO\u PASS}
使用我的密码,然后一切正常。看起来Spring不明白我引用的是环境变量。我需要做一些额外的配置以使其正常工作吗?

我找到了罪魁祸首-我通过Eclipse做了所有事情,Eclipse看不到
.bash\u profile
文件中的内容。设置这些环境Run->Run Configurations…->Environment中的变量解决了此问题。

很可能您的环境变量不可用。您是否尝试过以下方法以查看它们是否可访问

echo $JDBC_TODO_USER
echo $JDBC_TODO_PASS

确保其可用的可靠方法是:

  • sudo vi/etc/launchd.conf
  • 添加以下行:
  • 保存文件
  • 运行导出以确认您的条目是否存在
  • 您还可以尝试系统属性:

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

    在application.yml中包含以下内容:

    spring:
       datasource:
       username: ${jdbc.todo.user}
       password: ${jdbc.todo.pass}
    
    但最终,对于在生产环境中存储用户凭据,我建议使用以下方法之一:

    正如我在自己的回答中所写,问题在于Eclipse没有看到
    .bash\u profile
    中定义的变量。我注意到,当我在终端中运行
    mvn spring boot:run
    时,应用程序启动没有任何问题。我必须在Eclipse的运行配置中设置这些变量,以使其在那里工作。但感谢您的指点找出传递这些凭据的其他方法!这在使用Java属性文件时也有效。我只想指出,在依赖环境变量时,必须事先明确它们的存在(例如,注意Win-env)。IntelliJ IDEA也是如此。感谢您的分享。我花了1周的时间才最终将其付诸实施。
    export
    
    setenv JDBC_TODO_USER 
    setenv JDBC_TODO_PASS
    
    spring:
       datasource:
       username: ${jdbc.todo.user}
       password: ${jdbc.todo.pass}