【问题标题】:Spring Boot - using environment variables in application.ymlSpring Boot - 在 application.yml 中使用环境变量
【发布时间】:2015-10-14 12:41:36
【问题描述】:

我正在尝试参数化我的 application.yml 文件,以便我可以将它与我的项目一起放在 github 存储库中,但不会显示数据库连接详细信息。我想使用系统环境变量来做到这一点。我使用 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'@'&lt;my-ip-address&gt;' (using password: YES)

当然,当我将${JDBC_TODO_USER} 替换为我的用户名并用我的密码替换${JDBC_TODO_PASS} 时,一切正常。看起来 Spring 不明白我指的是环境变量。我需要做一些额外的配置才能让它工作吗?

【问题讨论】:

    标签: spring spring-boot


    【解决方案1】:

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

    echo $JDBC_TODO_USER
    echo $JDBC_TODO_PASS
    

    export
    

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

    1. sudo vi /etc/launchd.conf
    2. 添加以下行:
    setenv JDBC_TODO_USER 
    setenv JDBC_TODO_PASS
    
    1. 保存文件。
    2. 运行 export 以确认您的条目在那里

    你也可以试试系统属性:

    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/

    【讨论】:

    • 正如我在自己的回答中所写,问题在于 Eclipse 没有看到在 .bash_profile 中定义的变量。我注意到当我在终端中运行mvn spring-boot:run 并且应用程序启动时没有任何问题。我必须在 Eclipse 的 Run Configuration 中设置这些变量,才能让它在那里工作。但感谢您指出传递这些凭据的其他方式!
    • 这也适用于使用 Java 属性文件。我只想指出,在依赖环境变量时,您必须事先明确它们存在(例如,注意 Win env)。
    【解决方案2】:

    我找到了罪魁祸首——我通过 Eclipse 完成了所有操作,而 Eclipse 看不到 .bash_profile 文件中的内容。在 Run -> Run Configuratons... -> Environment 中设置这些环境变量,解决了这个问题。

    【讨论】:

    • IntelliJ IDEA 也一样。感谢你的分享。我花了 1 周的时间才最终让它发挥作用。
    猜你喜欢
    • 2020-03-15
    • 2020-06-09
    • 2021-11-09
    • 2021-06-25
    • 2016-06-26
    • 2017-09-06
    • 2021-09-29
    • 2017-12-01
    • 2019-05-23
    相关资源
    最近更新 更多