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

Seb*_*ski 8 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>
Run Code Online (Sandbox Code Playgroud)

我的后续行application.yml:

spring:
   datasource:
   username: ${JDBC_TODO_USER}
   password: ${JDBC_TODO_PASS}
Run Code Online (Sandbox Code Playgroud)

我也试过了

spring:
   datasource:
   username: ${JDBC.TODO.USER}
   password: ${JDBC.TODO.PASS}
Run Code Online (Sandbox Code Playgroud)

这两个都在应用程序启动时给我一个错误: 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不明白我是指环境变量.我是否需要进行一些额外配置才能使其正常工作?

rud*_*lfv 5

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

echo $JDBC_TODO_USER
echo $JDBC_TODO_PASS
Run Code Online (Sandbox Code Playgroud)

或者

export
Run Code Online (Sandbox Code Playgroud)

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

  1. 须藤vi /etc/launchd.conf
  2. 添加以下几行:
setenv JDBC_TODO_USER 
setenv JDBC_TODO_PASS
Run Code Online (Sandbox Code Playgroud)
  1. 保存文件。
  2. 运行导出以确认您的条目在那里

您还可以尝试系统属性:

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

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

spring:
   datasource:
   username: ${jdbc.todo.user}
   password: ${jdbc.todo.pass}
Run Code Online (Sandbox Code Playgroud)

但最终为了在生产环境中存储用户凭据,我会推荐以下之一:http : //docs.ansible.com/ansible/playbooks_vault.html https://vaultproject.io/


Seb*_*ski 3

我找到了罪魁祸首 - 我通过 Eclipse 完成了所有操作,但 Eclipse 看不到.bash_profile文件内的内容。在“运行”->“运行配置...”->“环境”中设置这些环境变量修复了该问题。