我有一个名为 CommonConfig
的配置类,到目前为止一直运行良好......
@Data
@Component
@ConfigurationProperties(prefix = “my")
public class CommonConfig {
private String foo;
private String bar;
private SubA subA;
@Data
public static class SubA {
private String baz;
private SubB subB;
@Data
public static class SubB {
private String qux;
}
}
}
以及与之相关的Yaml property
文件:
my.foo: a
my.bar: b
my.sub-a.baz: c
my.sub-a.sub-b.qux: d
当我想map
进入SubB时,我的问题就开始了:
my:
foo: a
bar: b
sub-a:
baz: c
sub-b:
qux: d
map:
number-one: 1
number-two: 2
number-three: 3
我尝试在我的 SubB 类中添加一个简单的映射声明:
...
@Data
public static class SubB {
private String qux;
private Map<String, Integer> map = new HashMap<>();
}
当我运行它时,所有其他属性都在配置中,但映射是空的。我也尝试不初始化地图,但它保持空。
我的@SpringBootApplication
类以前只用了一个注释就可以正常工作。 基于其他一些 StackOverflow 问题,我尝试添加 @EnableConfigurationProperties
,但没有区别。
这个例子确实工作正常。 我的特定问题是配置文件未被读取。
- 如果是 YAML 文件,
application.yml
会自动加载。如果文件名是其他名称,Spring 不会自动加载它。 -
@PropertySource
从SprintBoot 2.1开始不适用于YAML - 如果 YAML 文件需要不同的名称,我们需要设置
spring.config.name
和spring.config.location
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-yaml - 以下链接也指向一个很好的答案:
在 Java 中从 yaml 读取地图变得空