Spring:@ConfigurationProperties中的@NestedConfigurationProperty列表

时间:2015-06-22 16:51:31

标签: spring properties configuration spring-boot

您好我正在尝试启动并运行以下配置。

@ConfigurationProperties(prefix="my")
public class Config {

    @NestedConfigurationProperty
    private List<ServerConfiguration> servers = new ArrayList<ServerConfiguration>();

    public List<ServerConfiguration> getServers() {
        return this.servers;
    }
}

@ConfigurationProperties(prefix = "server")
public class ServerConfiguration {
    private String name;
    private String description;
}

所以,我希望嵌套在对象中的多个服务器配置。 我尝试使用以下属性文件设置属性。我可以看到列表是按项添加的,但服务器的成员从未设置(名称,描述)

my.servers[0].name=test
my.servers[0].server.name=test
my.servers[1].name=test
my.servers[1].server.name=test

2 个答案:

答案 0 :(得分:6)

扩展Maciej已经说过的话。

<script src='script.js?0001'><script> 只应设置在 root 对象上(即负责处理给定前缀的对象。不需要使用带注释的嵌套对象。

@ConfigurationProperties 仅元数据生成器使用(表示属性不是单个值,而是我们应该探索的内容以生成其他元数据。在这种情况下@NestedConfigurationProperty中没有任何有限数量的属性,因此元数据必须在列表中停止。

在任何情况下,每个奇异属性都需要一个getter和setter。我们不进行字段绑定,并且我们需要公共getter来避免在元数据中暴露不必要的属性。

答案 1 :(得分:2)

  • 您需要向ServerConfiguration
  • 添加setter和getter
  • 您不需要使用@ConfigurationProperties
  • 的嵌套属性来注释类
  • ServerConfiguration.description和属性my.servers[X].server.name=test
  • 之间的名称不匹配