在Spring,如果我们有两个.yaml文件(包含在应用程序中(yaml)
application-one.yaml application-two.yaml
------------------- -------------------
abc: abc:
flow: flow:
- id: 'remote02' - id: 'remote04'
- id: 'remote03' - id: 'remote05'
如果这个配置的properties类-
@ConfigurationProperties(prefix = "abc")
class Abc {
List<Flow> flow;
}
class Flow{
String id;
}
然后只加载一个文件中的“flow”,即flow.size()给出2(远程04,远程05。这取决于配置文件在application.yaml中的顺序)
但如果我把yamls文件改成-
application-one.yaml application-two.yaml
------------------- -------------------
abc: abc:
flow: flow:
remote02: remote04:
id: remote02 id: remote04
remote03: remote05:
id: remote03 id: remote05
以及类的属性
@ConfigurationProperties(prefix = "abc")
class Abc {
HashMap<String, Flow> flow;
}
class Flow{
String id;
}
现在hashmap将有4个条目。i、 e.flow.size()给出4
所以这是否意味着spring不会从两个yaml加载列表结构并将它们添加到一起?
如果是真的,如何克服这个限制?
1条答案
按热度按时间sr4lhrrt1#
我认为这是因为springboot将yaml文件转换为属性。在第一种情况下,文件的转换方式如下:
但在第二种情况下,你得到
如您所见,在第一种情况下,您得到两对相同的属性,而在第二种情况下,您得到四个唯一的属性。因此,在第一种情况下,两个属性将消失,因为它们是冗余的。
我不确定你能否避免这种情况。上面链接的文档说你可以使用
YamlMapFactoryBean
但我对spring的了解还不够,还不知道你是否可以,如何把它和spring结合起来@ConfigurationProperties
.