如何将yaml列表绑定到springboot中的java列表?

时间:2016-06-09 19:18:35

标签: java list spring-boot yaml bind

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

fruits: - Apple - Bannana

理想情况下,我想要像

这样的东西

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

2 个答案:

答案 0 :(得分:5)

文档在"24.6.1 Loading YAML"

中有一个示例

定义您的列表,如

my:
    fruits:
        - Apple
        - Bannana

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

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

然后在需要配置的地方的代码中使用此类

@Autowired
FruitConfig fruitConfig;

...  {
    System.out.println(fruitConfig.getFruits());
}
由于@Value的工作方式,

直接绑定到@Value似乎不起作用

答案 1 :(得分:3)

如果您想避免创建属性类并继续使用 @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 后的冒号是可选的,以避免在您使用多个配置文件时出现启动错误,并且该属性不存在。