@ConfigurationProperties:绑定类中的默认值

2022-09-01 21:42:40

我有一个配置类,其中我有一个绑定类'Foo'。FooConfig

@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

在 中设置默认值有效,但在我的绑定类中设置默认值。FooConfigFoo

我在这里错过了什么?


答案 1

你不应该混在同一个班级。如果要在带注释的类中使用默认值,可以使用默认值配置字段:@Value@ConfigurationProperties@ConfigurationProperties

@ConfigurationProperties("foo")
public class FooConfig {

    private Integer iterations = 999;

    // getter / setter

}

此更改带来了在 生成的元数据中包含默认值的额外好处。IDE 使用元数据在编辑和文件时提供自动完成功能。spring-boot-configuration-processorapplication.propertiesapplication.yaml

最后,与您的问题没有直接关系,带注释的类不应使用 进行注释。带注释的类用于通过方法配置 Bean。您的类应使用 进行注释,或者应在要使用 的类上使用 。@ConfigurationProperties@Configuration@Configuration@BeanFooConfig@Component@EnableConfigurationProperties(FooConfig.class)@ConfigurationFooConfig


答案 2

将默认值放在“然后,您可以通过提供外部(外部打包的 jar)文件来覆盖它们”中。resources/application.ymlapplication.yml


推荐