@ConfigurationProperties:绑定类中的默认值

时间:2018-07-31 08:03:42

标签: spring-boot

我有一个配置类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中设置默认值。

我在这里想念什么?

3 个答案:

答案 0 :(得分:4)

您不应在同一课程中混用@Value@ConfigurationProperties。如果要在带有@ConfigurationProperties注释的类中具有默认值,则可以使用默认值配置字段:

@ConfigurationProperties("foo")
public class FooConfig {

    private Integer iterations = 999;

    // getter / setter

}

此更改带来了额外的好处,即在spring-boot-configuration-processor生成的元数据中包含默认值。编辑application.propertiesapplication.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外部)文件来覆盖它们。