Java spring boot在application.properties中使用spring.profile.default时未加载默认配置文件
仅供参考:我发誓没有激活配置文件配置,如-D或运行配置 目标 当应用程序在没有任何激活配置文件的情况下启动时,Java spring boot在application.properties中使用spring.profile.default时未加载默认配置文件,java,spring-boot,spring-profiles,Java,Spring Boot,Spring Profiles,仅供参考:我发誓没有激活配置文件配置,如-D或运行配置 目标 当应用程序在没有任何激活配置文件的情况下启动时,dev配置文件默认激活 问题 我已经设置了spring.profile.default=dev,我希望dev配置文件被激活。但事实并非如此 我所做的 运行环境 Spring启动版本:2.1.2版本 我所指的内容 1) 如何在Spring Boot应用程序中使用配置文件- 以下是我所做的代码 /resources/application.properties spring.profile
dev
配置文件默认激活
问题
我已经设置了spring.profile.default=dev
,我希望dev配置文件被激活。但事实并非如此
我所做的
运行环境
Spring启动版本:2.1.2版本
我所指的内容
1) 如何在Spring Boot应用程序中使用配置文件-
以下是我所做的代码
/resources/application.properties
spring.profiles.default= dev
application.environment=This is a "Default" Environment
application.environment=This is a "dev" Environment
server.port= 8082
/resources/application-dev.properties
spring.profiles.default= dev
application.environment=This is a "Default" Environment
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
这是我的春季开机日志
2019-10-16 23:17:02.926信息64099---[main]c.e.s.SpringbootdemoappApplication:未设置活动配置文件,返回默认配置文件:dev
为服务器端口添加另一个日志
2019-10-17 00:25:03.837信息68318---[main]o.s.b.w.embedded.tomcat.TomcatWebServer:tomcat已用端口初始化:8083(http)
我添加的原因是它似乎与注射无关
是时候结束这个问题了
我想要实现的第一个目标是更改默认配置文件。
在spring docs()中,可以将默认配置文件更改为application.properties
中的设置spring.profiles.default
但这似乎有点bug(谢谢@antoniosss)。即使我在application.properties
中设置了它,并且控制台显示没有活动的配置文件集,返回到默认配置文件:dev
。
但是,dev
profile仍未激活
我发现,在加载application.properties之前应该更改默认配置文件
这意味着,如果在application.properties
中描述了更改默认配置文件,那就太晚了。(IDK为什么,我不明白,因为Spring中有这么多层…)
如果使用-Dspring.default.profile=dev
设置了défaut配置文件,则该配置文件工作正常
发件人:
无法通过在配置文件中声明来更改默认配置文件。它必须在读取配置文件之前就位
您只配置了默认配置文件。 您需要设置一个活动配置文件,如
spring.profiles.active=dev
在应用程序属性中。对于注入电流活动剖面
@Value("${spring.profiles.active}")
private String currentActiveEnv;
您可以使用
spring.profiles.default=dev
将默认配置文件回退设置为dev
。如果您有spring.profiles.active=someOtherProfile
,您将激活someOtherProfile
2019-10-16 23:17:02.926信息64099---[main]
c、 e.s.SpringbootdemoappApplication:无活动配置文件集,掉落
返回默认配置文件:dev
此日志指出,
dev
配置文件是活动的,因为您没有激活任何显式配置文件。问题是您在加载应用程序后传递此属性,您需要在应用程序启动时提供此属性
将其作为JVM参数传递
java -jar -Dspring.profiles.default=dev myproject.jar
作为环境变量传递
java -jar myproject.jar --spring.profiles.default=dev
SPRING_PROFILES_DEFAULT=dev
系统变量
java -jar myproject.jar --spring.profiles.default=dev
SPRING_PROFILES_DEFAULT=dev
你能试试
spring.profile.active=dev
吗?@hasancansal你的意思是在application-dev.properties
中添加spring.profile.active=dev
?是的。它正在按预期工作。如果您有spring.profiles.active=someOtherProfile
您将激活someOtherProfile
。如果你什么都没有,通过spring.profiles.default
你将你的回退设置为dev
@hasancansal,所以我没有设置任何活动的配置文件。我希望dev
将被激活。因为默认配置文件是dev
它是一个bug-我能问一下为什么吗?默认配置文件与活动配置文件不同?在我看来,如果没有激活的配置文件,默认配置文件应该是激活。是吗?@minwookan在代码片段中,您提到默认配置文件为dev。而且dev似乎已正确激活。您是否在问为什么在回答中没有得到“这是一个“开发”环境”?这可能会发生,因为您正在向变量注入@Value(${application.environment}),而不是活动配置文件。噢,感谢您激发了新的见解。。可能是。。但是在dev
配置文件中,我设置了server.port=8082
,但是tomcat是在8083端口启动的,这在application.properties
中有描述。这让我更加困惑。如果dev
配置文件被正确激活,服务器端口应该是8082,对此可能毫无疑问。是的,你是对的。但正如您在结果中所看到的,应用程序.environment
仍然是默认值
值。您是否尝试使用spring.profiles.active
?如果没有明确的配置文件集,我怀疑可能无法加载回退配置文件的属性。我需要在spring.profiles.active
中输入什么值?但是默认属性(它意味着application.properties
)加载正确。因为服务器是在我在application.properties
中描述的端口中启动的spring profiles active=dev
。正如我所说的,如果您的应用程序返回到默认配置文件(在您的情况下,dev
),您的application.properties
可能会被加载,而不是application-dev.properties
。可能需要显式设置活动配置文件。噢,退回到默认配置文件:dev
意味着