如何将heroku config var传递给spring boot的application.properties?

时间:2018-03-23 18:39:10

标签: java spring-boot heroku cloud application.properties

我正在尝试将自定义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

2 个答案:

答案 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变量将具有正确的值。