如何通过 Spring 占位符在 yaml 中表达对象列表或数组?

Posted

技术标签:

【中文标题】如何通过 Spring 占位符在 yaml 中表达对象列表或数组?【英文标题】:How do I express a list or array of objects in yaml via a Spring placeholder? 【发布时间】:2019-04-07 01:53:25 【问题描述】:

我知道您可以使用如下占位符覆盖 yaml 配置值:

some-setting: $SOME_SETTING:default value

我知道你可以像这样表达对象列表:

customers:
  - name: acme
    category: manufacturing
    employees: 200 
  - name: virtucon
    category: evil
    employees: 1

那么我将如何通过 $ 占位符表示法来表达这样的列表?

【问题讨论】:

【参考方案1】:

您必须创建一个 ConfigurationProperties 才能读入属性对象。

@Component
@ConfigurationProperties("app")
public class AppProperties 

    private List<Customer> customers = new ArrayList<>();

    public static class Customer 
        private String name;
        private String category;
        private int employees;
    

通常你也会在你的 .yml 文件中为此创建一个前缀

app:
   customers:
   - name: acme
     category: manufacturing
     employees: 200
   - name: virtucon
     category: evil
     employees: 1 

您现在可以在应用程序的任何位置自动连接此类。

【讨论】:

不是完全相同的东西。我知道如何从 YAML 读取属性,这里的想法是在静态 YAML 中使用 Spring $ 占位符符号,以便可以将值注入其他地方。 我认为不可能使用值占位符来读取复杂的对象。您可以获得像这样的单个字段 @Value("$customers[0].name") docs.spring.io/spring-boot/docs/current/reference/html/…

以上是关于如何通过 Spring 占位符在 yaml 中表达对象列表或数组?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 语句在Java中如何使用占位符?

如何修复 select2 的占位符在文档准备好时被截断?

如何给占位符在yii2 gridview中创建的下拉框

HTML5 占位符在焦点上消失

当输入和占位符具有不同的字体大小时,输入的占位符在 Chrome 中未对齐

UITextField 占位符在点击时一直显示