是否可以使用 Spring 和 @Value 注释将 YAML 属性读入 Map

Posted

技术标签:

【中文标题】是否可以使用 Spring 和 @Value 注释将 YAML 属性读入 Map【英文标题】:Is it possible to read YAML property into Map using Spring and @Value annotation 【发布时间】:2018-03-16 09:29:28 【问题描述】:

我想做的是:

YAML:

features:
    feature1: true
    feature2: false
    feature3: true

代码:

@Value("$features")
private Map<String,Boolean> features;

我不知道使用什么 Spring 脚本语法来执行此操作(如果可能的话)

【问题讨论】:

Spring Boot - inject map from application.yml的可能重复 【参考方案1】:

我正在使用 Spring Boot 并像这样访问自定义变量:

    创建一个映射到您的自定义属性的自定义类:

    @Component
    @ConfigurationProperties(prefix="features")
    public class ConstantProperties 
        private String feature1;
    
        public String getFeature1()
            return feature1;
        
        public void setFeature1(String feature1) 
            this.feature1 = feature1;
        
    
    

    YAML 文件将如下所示:

    features:
      feature1: true
      feature2: false
      feature3: true
    

    在您想要访问这些属性的类中,您可以使用以下内容:

    @Autowire 
    private ConfigurationProperties configurationProperties;
    

    然后要访问该类,请使用以下语法:

    configurationProperties.getFeature1();
    

    或者您可以引用自定义属性,例如:

    "features.feature1"
    

【讨论】:

以上是关于是否可以使用 Spring 和 @Value 注释将 YAML 属性读入 Map的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA - 创建动态查询注释

使用 Spring 的 @Value 注释插入时如何避免截断前导零数字?

@Controller 类中的 Spring @Value 注释未评估属性文件中的值

Spring是否有一个注释来将类路径内容读取到String?

Spring 3.0.5 不评估属性中的 @Value 注释

从属性文件中读取List并使用spring注释加载@Value