3

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

2 回答 2

2

您在此处显示的内容应该有效。仔细检查拼写等。否则,您可以将选项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. 您可能想尝试application.ymlconfig 。

于 2018-03-23T18:52:22.160 回答
0

还有一种非常简单的方法可以做到,但尚未提及。如果您的 application.properties 看起来像这样:

spring.mail.username=localpassword/dummyvalue

然后在 heroku 中,您应该添加名为 SPRING_MAIL_USERNAME 的新配置变量,并将真实/产品密码分配为值。然后你可以像你提到的那样将它注入你的应用程序,如下所示:

@Value("${spring.mail.username}")
private String SENDER_MAIL_USERNAME;

并且 SENDER_MAIL_USERNAME 变量将具有正确的值。

于 2020-10-05T16:26:58.073 回答