我正在尝试将自定义heroku配置变量传递给application.properties,但没有传递任何值。
我的application.properties条目:
spring.mail.username=${SPRING_MAIL_SENDER_USERNAME}
然后我将此值注入String变量:
@Value("${spring.mail.username}")
private String SENDER_MAIL_USERNAME;
但是当我尝试使用它时,SENDER_MAIL_USERNAME是一个空字符串。
我可以得到这样的正确值:
System.getenv("SPRING_MAIL_SENDER_USERNAME");
但这不是我想要的。谁知道我在这里做错了什么?
修改
也许值得补充一点,我的项目使用maven和2个模块(后端和前端)。简化的项目结构如下所示:
-app
-backend
-src.main
-java.com.jakubeeee.app
-some java files...
-resources
-application.properties
-frontend
-src
-some web files...
我还使用包含以下内容的Procfile:
web: java -Dserver.port=$PORT -jar $PATH_TO_JAR
其中$ PATH_TO_JAR是带有值的heroku配置变量:
backend/target/myjarname.jar
答案 0 :(得分:1)
你在这里展示的应该工作。仔细检查拼写等。否则,您可以将Procfile
中的选项作为Java属性传递给:
web: java -Dspring.mail.username=${SPRING_MAIL_SENDER_USERNAME} -jar target/myapp.jar
另外请务必确认它适用于像spring.mail.username=foo
这样的硬编码值(否则您将会知道它除了env之外的其他内容)。
修改强>
我现在意识到您使用的是.properties
文件,而不是.yml
文件。我不确定Spring application.properties
是否支持env vars。您可能希望尝试application.yml
配置。
答案 1 :(得分:0)
还有一种非常简单的方法,尚未提及。如果您的application.properties看起来像这样:
spring.mail.username=localpassword/dummyvalue
然后在heroku中,应添加名称为SPRING_MAIL_USERNAME的新配置变量,并分配实/产品密码作为值。然后,您可以像上面提到的那样将其注入到您的应用中,如下所示:
@Value("${spring.mail.username}")
private String SENDER_MAIL_USERNAME;
和SENDER_MAIL_USERNAME变量将具有正确的值。