春季启动:PropertySoursourcesplaceholderconfigurer加载的文件中忽略的配置文件



我有一个弹簧启动项目的库。该库有一个库。yml文件,其中包含用于其配置的Dev和prod Prop:

library.yml

---
spring:
    profiles: 
        active: dev
---
spring:
    profiles: dev
env: dev
---
spring:
    profiles: prod
env: prod

另一个应用程序使用此库,并使用:

加载道具
@Bean
public static PropertySourcesPlaceholderConfigurer dataProperties() {
  PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
  YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
  yaml.setResources(new ClassPathResource("library.yml"));
  propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
  return propertySourcesPlaceholderConfigurer;
}

及其应用程序。

---
spring:
    profiles: 
        active: dev

但是,当我检查Env的价值时,我会得到"产品"。为什么?

如何告诉Spring Boot使用Library.ym中的活动(例如DEV)配置文件道具?

注意:我更喜欢使用.yml代替.properties文件。

默认情况下,PropertySourcesPlaceholderConfigurer仅对获得配置文件特定道具一无所知。如果您在诸如env之类的文件中多次定义了支架,则它将绑定与该Prop的最后一次出现相关的值(在这种情况下为prod)。

使其绑定匹配特定配置文件的道具,请设置配置文件文档匹配器。配置文件匹配器将需要了解可以从环境获得的活动配置文件。这是代码:

@Bean
public static PropertySourcesPlaceholderConfigurer dataProperties(Environment environment) {
  PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
  YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
  SpringProfileDocumentMatcher matcher = new SpringProfileDocumentMatcher();
  matcher.addActiveProfiles(environment.getActiveProfiles());
  yaml.setDocumentMatchers(matcher);
  yaml.setResources(new ClassPathResource("library.yml"));
  propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
  return propertySourcesPlaceholderConfigurer;
}

相关内容

  • 没有找到相关文章

最新更新