在我尝试解释我想要满足的需求之前,让我们提供上下文。
类 - 动物收容所配置
@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.propertiesname=cat
----
- 现在,我想做的是创建尽可能多的动物豆,因为它在 animal.properties 中定义。动物列表中的每个值都应"引用"目录中
animals/
匹配的值。 - 接下来,我希望每个 bean "获取或获得"它们自己的属性文件,并将其中的所有属性注入到 Bean 中。每个 Bean 都应该有自己单独的属性文件,如
animals/
目录中一样。因此,当创建动物的新豆子时,@Value("${name})
解析值应对应于相同类型的不同豆类上的dog
和cat
。 - 可能有任意数量的不同
ANIMAL.animal.properties
- 所有动物都是未定义的,可以添加到动物列表中。但是,ANIMAL.animal.properties
中的属性名称列表是相同的。
有没有办法在没有太多配置的情况下使用 Spring 引导来实现这一点?据我所知,ConfigurationProperties
和PropertySource
必须包含一个静态值,所以这对我来说自动是不合适的选项。这是否可以使用弹簧上下文来完成,同时注册 bean 并通过以某种方式使用 regex *.animal.properties 扫描位置来提供不同类别的PropertySourcePlaceholderConfigurer
?
任何帮助,不胜感激。
附言所有这些类和属性都是虚构的,我只是想了解这是否可能。
您可以使用@ProperySource注释
@PropertySource("classpath:foo.properties")
或者,您可以使用占位符注册新的属性文件,这允许我们在运行时动态选择正确的文件
@PropertySource({
"classpath:persistence-${envTarget:mysql}.properties"
})
尝试搜索主题"带有弹簧和弹簧引导的属性">