如何为同类型的 bean 动态提供不同的 .properties 文件?



在我尝试解释我想要满足的需求之前,让我们提供上下文。

类 - 动物收容所配置

@Configuration
public class AnimalShelterConfiguration {
@Bean
public List<Animal> animals(@Value("#{'${animals}'.split(',')}") List<String> animals) {
return animals.stream()
.map(animal -> animal())
.collect(Collectors.toList());
}
@Bean
public Animal animal() {
return new Animal();
}
}

类 - 动物

public class Animal {
@Value("${name}")
private String name;
}

资源结构:+ src/main/resources
+ animal.properties
+ animals/
+ dog.animal.properties
+ cat.animal.properties

animal.properties:
animals=dog,cat
dog.animal.properties:
name=dog
cat.animal.properties
name=cat

----

  1. 现在,我想做的是创建尽可能多的动物豆,因为它在 animal.properties 中定义。动物列表中的每个值都应"引用"目录中animals/匹配的值。
  2. 接下来,我希望每个 bean "获取或获得"它们自己的属性文件,并将其中的所有属性注入到 Bean 中。每个 Bean 都应该有自己单独的属性文件,如animals/目录中一样。因此,当创建动物的新豆子时,@Value("${name})解析值应对应于相同类型的不同豆类上的dogcat
  3. 可能有任意数量的不同ANIMAL.animal.properties- 所有动物都是未定义的,可以添加到动物列表中。但是,ANIMAL.animal.properties中的属性名称列表是相同的。

有没有办法在没有太多配置的情况下使用 Spring 引导来实现这一点?据我所知,ConfigurationPropertiesPropertySource必须包含一个静态值,所以这对我来说自动是不合适的选项。这是否可以使用弹簧上下文来完成,同时注册 bean 并通过以某种方式使用 regex *.animal.properties 扫描位置来提供不同类别的PropertySourcePlaceholderConfigurer

任何帮助,不胜感激。

附言所有这些类和属性都是虚构的,我只是想了解这是否可能。

您可以使用@ProperySource注释

@PropertySource("classpath:foo.properties")

或者,您可以使用占位符注册新的属性文件,这允许我们在运行时动态选择正确的文件

@PropertySource({ 
"classpath:persistence-${envTarget:mysql}.properties"
})

尝试搜索主题"带有弹簧和弹簧引导的属性">

相关内容

  • 没有找到相关文章