我试图对我的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不明白我是指环境变量。我是否需要进行一些额外配置才能使其正常工作?
答案 0 :(得分:3)
您的环境变量很可能无法使用。您是否尝试过以下操作以查看它们是否可访问?
echo $JDBC_TODO_USER
echo $JDBC_TODO_PASS
或
export
确保它们可用的确定方法是:
setenv JDBC_TODO_USER setenv JDBC_TODO_PASS
您还可以尝试系统属性:
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;环境解决了这个问题。