java - 迁移后 Eclipse 不会将邮件属性传递给 Spring Boot

标签 java eclipse spring-boot

我正在将 Spring Boot 应用程序从版本 1.5.7 迁移到 2.0.0,我注意到由于某种原因它不再从 ENV 变量获取邮件属性。

我正在使用 java.mail.Sender 并在我的 application.properties 文件中具有以下属性:

spring.mail.host=smtp.example.com
spring.mail.username=username
spring.mail.password=password
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.defaultEncoding=UTF-8

这只是为了在测试中模拟邮件属性。我使用与 ENV 变量相同的 key 注入(inject)真实的 key :spring.mail.host=smtp.google.com

但是当我尝试发送电子邮件时,我发现它仍在使用 smtp.example.com。我认为 ENV 变量的优先级高于 application.properties 中的值。有什么改变吗? Spring Boot 1.5.7 中一切正常。

编辑: 以下命令有效,所以这肯定是 Eclipse 的问题:

SPRING_PROFILES_ACTIVE=development SPRING_MAIL_HOST=smtp.gmail.com SPRING_MAIL_USERNAME=xxx SPRING_MAIL_PASSWORD=xxx ./gradlew clean bootRun

我不明白的是,为什么当我切换回 1.5.7 时,完全相同的配置会起作用。同样奇怪的是,当通过 Eclipse 运行配置传递环境变量时,它适用于配置文件。所以有些环境变量被应用,有些则没有......

Eclipse ENV variables

最佳答案

我能够重现这个问题。使用 1.5.X 创建了一个 Spring boot 应用程序,并从 Eclipse 注入(inject)了环境变量。现在,当我迁移到 2.X 版本时,环境变量不会被注入(inject)。

进一步分析,发现这个有趣的thread

一位 Spring-boot 开发人员发表了这样的评论 enter image description here

因此,我的结论是,当我们使用 2.X 版本时,Spring-boot-parent 中有一个组件,它使 spring boot maven 插件 fork 它并在单独的 JVM 中运行。因此,环境变量没有被传递。

这回答了为什么从环境部分获取配置文件值的问题。无论应用程序是在 Maven JVM 还是新的 JVM 中运行,配置文件标志始终作为参数传递

要确认这一点,您可以将配置条目添加到 JVM 参数选项卡,如下所示 enter image description here

您现在将能够看到传递给 Spring Boot 的新值

关于java - 迁移后 Eclipse 不会将邮件属性传递给 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49108511/

相关文章:

java - org.json.simple 和 org.json 之间的区别

android - Facebook SDK 不包含在 Eclipse 中的 Android 应用程序中?

eclipse - 如何在 Eclipse 3.7 中安装 Aptana 插件?

java - tomcat - 找不到请求的资源错误

java - 无法在Intellij Idea的Springboot项目上通过模板创建jsp文件

java - 在 O(1) 中返回数组中的随机数并创建单个排列的算法/函数

java - 用户缺乏保存查询的权限或未找到对象错误

java - 插入失败后恢复 Hibernate session 状态

java - Spring Boot 应用程序中未插入尾部斜线

java - 当 url 包含分号时,Spring 5 中获取 500 响应