3

这是一个示例application.yml文件

myapp:
  resource:
    teststring: "string"
    testlist:
      - "apple"
      - "banana"

这是我的不可变配置类

import org.immutables.value.Value.Immutable;
import org.immutables.value.Value.Modifiable;

@Immutable
@Modifiable
public abstract class ResourceConfiguration {

  public abstract String teststring();

  public abstract List<String> testlist();

}

这是我的顶级配置类

@ConstructorBinding
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfiguration {

  private final ImmutableResourceConfiguration resource;

  public MyAppConfiguration(ImmutableResourceConfiguration resource) {
    this.resource = resource.toImmutable();
    System.out.println("Look here: "+resource);
  }

它读取teststring值很好。但是testlist是空的。

请注意,testlist如果它没有包含在 Immutables 中,我可以阅读罚款 例如,如果我将 application.yml 更改为

myapp:
  resource:
    teststring: "string"
  testlist:
    - "apple"
    - "banana"

我将我的顶级课程更改为:

@ConstructorBinding
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfiguration {

  private final ImmutableResourceConfiguration resource;

  public MyAppConfiguration(ImmutableResourceConfiguration resource, List<String> testlist) {
    this.resource = resource.toImmutable();
    System.out.println("Look here: "+testlist);
  }

然后testlist正确填充。

所以我假设它与不可变库处理 spring 配置文件中列表的方式有关。

4

1 回答 1

2

经过一些实验,我发现您必须将其阅读String[]List<String>

@Immutable
@Modifiable
public abstract class ResourceConfiguration {

  public abstract String[] testlist();

}

我没有在任何地方看到这个记录,所以如果有人可以提供,我会很乐意选择它作为更好的答案。

于 2021-02-20T00:41:04.067 回答