我有一个配置类FooConfig
,其中有一个绑定类'Foo'。
@Configuration
@ConfigurationProperties("foo")
public class FooConfig {
@Value("${foo.default.iterations}")
private Integer iterations;
private Foo foo;
// getter / setter
}
在我的课程Foo
中,我希望没有在属性文件中明确设置的迭代变量集具有现有的默认配置值。
public class Foo {
private String name;
@Value("${foo.default.iterations}")
private Integer iterations;
// getter / setter
}
我的属性文件
foo.default.iterations=999
# if this is set this config is bound (wins) in FooConfig-class as expected
# foo.iterations=111
foo.foo.name=foo
可以在FooConfig
中设置默认值,但不能在我的绑定类Foo
中设置默认值。
我在这里想念什么?
答案 0 :(得分:4)
您不应在同一课程中混用@Value
和@ConfigurationProperties
。如果要在带有@ConfigurationProperties
注释的类中具有默认值,则可以使用默认值配置字段:
@ConfigurationProperties("foo")
public class FooConfig {
private Integer iterations = 999;
// getter / setter
}
此更改带来了额外的好处,即在spring-boot-configuration-processor
生成的元数据中包含默认值。编辑application.properties
和application.yaml
文件时,IDE将使用元数据提供自动完成功能。
最后,并且与您的问题没有直接关系,@ConfigurationProperties
注释的类不应使用@Configuration
注释。带有@Configuration
注释的类用于通过@Bean
方法配置bean。您的FooConfig
类应该用@Component
注释,或者应该在想要使用@EnableConfigurationProperties(FooConfig.class)
的{{1}}类上使用@Configuration
。
答案 1 :(得分:0)
不需要为迭代变量显式分配任何值。 只需尝试在下面使用此方法(在冒号后面添加默认值,例如100500):
@Value("${foo.iterations:100500}")
顺便说一句,@Configuration
注释是多余的
答案 2 :(得分:0)
在resources/application.yml
中放入默认值
然后,您可以通过提供外部application.yml
(包装的jar外部)文件来覆盖它们。