spring boot 在 application.properties 中使用 spring.profile.default 时未加载默认配置文件
Posted
技术标签:
【中文标题】spring boot 在 application.properties 中使用 spring.profile.default 时未加载默认配置文件【英文标题】:spring boot not loading default profile while using spring.profile.default in application.properties 【发布时间】:2020-02-13 09:59:26 【问题描述】:仅供参考:我发誓没有激活配置文件配置,例如 -D 或运行配置
目标
当应用程序在没有任何激活配置文件的情况下启动时,dev
配置文件被默认激活。
问题
我已设置 spring.profile.default = dev
,我希望开发配置文件已激活。但事实并非如此。
我做了什么
Run Environment
Spring-Boot 版本:2.1.2 发布
What I'm referred
1) 如何在 Spring Boot Application 中使用配置文件 - https://www.javacodegeeks.com/2019/07/profiles-spring-boot-application.html#respond
这是我所做的代码
/resources/application.properties
spring.profiles.default= dev
application.environment=This is a "Default" Environment
/resources/application-dev.properties
application.environment=This is a "dev" Environment
server.port= 8082
/ProfileController.java
@RestController
@RequestMapping("/v1")
public class ProfileController
@Value("$application.environment")
private String applicationEnv;
@GetMapping
public String getApplicationEnv()
return applicationEnv;
结果
localhost/v1 => 这是一个“默认”环境
还有
我发现默认配置文件正确设置为dev
。
这是我的 spring-boot 日志。
2019-10-16 23:17:02.926 INFO 64099 --- [main] c.e.s.SpringbootdemoappApplication:未设置活动配置文件,回退到默认配置文件:dev
为服务器端口添加另一个日志
2019-10-17 00:25:03.837 INFO 68318 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer:Tomcat 使用端口初始化:8083 (http)
我添加的原因是它似乎与注入无关。
是时候结束这个问题了
我要实现的第一个目标是更改默认配置文件。
从 spring docs(https://docs.spring.io/spring/docs/4.2.0.RELEASE/spring-framework-reference/htmlsingle/#beans-definition-profiles-default) 中,可以将默认配置文件更改为在 application.properties
中设置 spring.profiles.default
。
但这似乎是一种错误(感谢@Antoniossss)。即使我在application.properties
中设置了它并且控制台显示No active profile set, falling back to default profiles: dev
。
然而,dev
个人资料仍未激活。
我发现应该在加载 application.properties 之前更改默认配置文件。
这意味着如果在application.properties
中描述了更改默认配置文件,那就太晚了。(IDK 为什么,我不知道,因为 Spring 中有很多层......)
如果使用 -Dspring.default.profile = dev
设置了默认配置文件,则它可以正常工作。
来自https://github.com/spring-projects/spring-boot/issues/1219:
您不能通过在配置文件中声明来更改默认配置文件。它必须在读取配置文件之前就位。
【问题讨论】:
你能试试spring.profiles.active=dev
吗?
@HasanCanSaral 你的意思是在application-dev.properties
中添加spring.profile.active=dev
吗?
是的。它按预期工作。如果您有spring.profiles.active=someOtherProfile
,您将激活someOtherProfile
。如果您一无所有,请通过spring.profiles.default
将您的后备设置为dev
。
@HasanCanSaral 所以,我没有设置任何有效的个人资料。我希望dev
将被激活。因为默认配置文件是dev
这是/曾经是一个错误 - github.com/spring-projects/spring-boot/issues/1219
【参考方案1】:
问题是您在加载应用程序后传递此属性,您需要在应用程序启动时提供此属性
将其作为 JVM 参数传递
java -jar -Dspring.profiles.default=dev myproject.jar
作为环境变量传递
java -jar myproject.jar --spring.profiles.default=dev
系统变量
SPRING_PROFILES_DEFAULT=dev
【讨论】:
是的,它完全有效。你已经在几秒钟内找到了答案。我花了很多时间才弄清楚?【参考方案2】:您将默认配置文件后备设置为dev
和spring.profiles.default=dev
。如果你有spring.profiles.active=someOtherProfile
,你就会激活someOtherProfile
。
2019-10-16 23:17:02.926 信息 64099 --- [主要] c.e.s.SpringbootdemoappApplication:没有活动的配置文件集,下降 返回默认配置文件:dev
此日志显示dev
配置文件是活动的,因为您没有激活任何明确的配置文件。
【讨论】:
是的,你是对的。但正如您在结果中看到的那样,application.environment
仍然是 Default
值。
你试过spring.profiles.active
吗?我怀疑如果没有明确的配置文件集,您的后备配置文件的属性可能不会加载。
我需要在spring.profiles.active
中输入什么值?但是默认属性(这意味着application.properties
)已正确加载。因为服务器是在我在application.properties
中描述的端口中启动的。
spring-profiles-active=dev
。正如我所说,如果您的应用程序回退到默认配置文件(在您的情况下为dev
),您的application.properties
可能会被加载而不是application-dev.properties
。可能需要明确设置您的活动个人资料。
哦,falling back to default profiles: dev
表示application.properties
会被加载?我可能对设置默认值有误解...当我将默认配置文件设置为dev
时,我希望默认配置文件将是dev
并且没有激活的配置文件,因此回退到dev
...但是好像不是……对吧?【参考方案3】:
您只配置了默认配置文件。
您需要设置一个活动配置文件,例如spring.profiles.active=dev
在您的应用程序属性中。对于注入当前活动配置文件,
@Value("$spring.profiles.active")
private String currentActiveEnv;
【讨论】:
我能问你为什么吗?默认配置文件与活动配置文件不同?在我看来,如果没有激活的配置文件,则应该激活默认配置文件。不是吗? @MinwooKang 在 sn-p 中,您提到了默认配置文件为 dev。似乎 dev 已正确激活。您是在问为什么在响应中没有得到“这是一个“开发”环境”?这可能会发生,因为您正在向变量注入 @Value("$application.environment") 而不是活动配置文件。 哦,感谢您启发新见解.. 可能是.. 但在dev
配置文件中,我设置了sever.port = 8082
,但tomcat 是在@ 中描述的8083 端口中启动的987654325@。这让我更加困惑。如果dev
配置文件被正确激活,服务器端口应该是8082,这点毫无疑问。【参考方案4】:
请通过以下链接-
https://medium.com/@khandkesoham7/profiling-with-spring-boot-408b33f8a25f
那家伙解释得很好
并按照以下命令验证 or 命令以生成构建
mvn -Ppreprod package -DskipTests clean verify
【讨论】:
以上是关于spring boot 在 application.properties 中使用 spring.profile.default 时未加载默认配置文件的主要内容,如果未能解决你的问题,请参考以下文章
如何 JUnit 测试 Spring-Boot 的 Application.java
Spring boot 学习 四:spring boot 配置文件 application.yml
如何在 spring-boot 配置中加载 application.yaml 配置以进行硒测试
Spring Boot中application.properties和application.yml文件