我正在开发一个 Spring Boot 项目,其中传递了许多 VM 参数以供应用程序启动,即证书位置、特定配置文件类型(不是 dev、qa、prod 等)。
我正在将所有配置移动到 default.yml 文件中。
问题陈述
default.yml 中设置的属性只能访问 spring 上下文的环境接口,即 org.springframework.core.env.Environment 并且这些属性不会自动/默认设置为系统属性。
我正在通过方法contextInitialized中的侦听器ServletContextListener在系统中设置属性。但我不想使用它们的名称显式调用所有属性
environment .getProperty(key),而是我希望spring上下文中可用的所有属性都应该循环/不循环设置到系统/环境变量中。
预期的解决方案
我正在寻找一种方法,使用该方法在 listner 方法中我可以将 default.yml 文件中定义的所有属性设置为系统属性,而无需通过其名称访问属性。
以下是我目前正在遵循的方法,将从 spring env/default.yml 提取的活动配置文件设置为系统属性。我不想获取活动配置文件或从 yml 获取任何属性,但希望将 .yml 中可用的所有属性自动设置到系统中。
Optional.ofNullable(springEnv.getActiveProfiles())
.ifPresent(activeProfiles -> Stream.of(activeProfiles).findFirst().ifPresent(activeProfile -> {
String currentProfile = System.getProperty("spring.profiles.active");
currentProfile = StringUtils.isBlank(currentProfile) ? activeProfile : currentProfile;
System.setProperty("spring.profiles.active", currentProfile);
}));