如何在 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;
中有一个示例
像这样定义您的列表
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
后的冒号是可选的,以避免在您使用多个配置文件时出现启动错误,而这个 属性 根本不存在。
我的 yml 文件中有一个列表,我需要在我的 java springboot 应用程序中绑定它,我该怎么做?
fruits:
- Apple
- Bannana
理想情况下我想要
@Value("${filters.siteID}")
List siteIDs;
像这样定义您的列表
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
后的冒号是可选的,以避免在您使用多个配置文件时出现启动错误,而这个 属性 根本不存在。