如何在 spring boot 中将 yaml 列表绑定到 java 列表?

How to bind yaml list to a java list in springboot?

我的 yml 文件中有一个列表,我需要在我的 java springboot 应用程序中绑定它,我该怎么做?

fruits: - Apple - Bannana

理想情况下我想要

@Value("${filters.siteID}") List siteIDs;

文档在 "24.6.1 Loading YAML"

中有一个示例

像这样定义您的列表

my:
    fruits:
        - Apple
        - Bannana

并创建一个配置属性 class 来表示它:

@Component
@ConfigurationProperties(prefix="my")
public class FruitConfig {
    private final List<String> fruits = new ArrayList<String>();
    public List<String> getFruits() {
        return this.fruits;
    }
}

然后在代码中需要配置的地方使用这个class

@Autowired
FruitConfig fruitConfig;

...  {
    System.out.println(fruitConfig.getFruits());
}

直接绑定到 @Value 似乎不起作用,因为 @Value 的工作方式

如果您想避免创建 属性 class 并继续使用 @Value 并且您的列表不是很长,还有另一个机会。

像这样定义您的列表

my:
  fruits: Apple,Banana

并使用它,例如

使用 Kotlin

@Value("#{'${my.fruits:}'.split(',')}")
private lateinit var fruits: List<String>

或Java

@Value("#{'${my.fruits:}'.split(',')}")
private final List<String> fruits = new ArrayList<>();

注意:fruits 后的冒号是可选的,以避免在您使用多个配置文件时出现启动错误,而这个 属性 根本不存在。