【问题标题】:Is it possible to get Map value from application.properties file using springboot annotation @Value [duplicate]是否可以使用 Spring Boot 注释 @Value 从 application.properties 文件中获取 Map 值 [重复]
【发布时间】:2019-03-28 11:12:01
【问题描述】:

我需要从application.properties文件中获取静态键值对数据,是否可以通过SpringBoot注解@Value来实现。

建议将不胜感激。

示例: languageMap={'1'='English','2'='French'}

@Value($("languageMap"))
Map<String,String> languageMap;

【问题讨论】:

  • 我想如果你选择application.yml格式而不是application.properties,这会更直观。这种格式有“字典”和地图。

标签: java spring spring-mvc spring-boot spring-batch


【解决方案1】:

application.properties:

languageMap[1]= English
languageMap[2]= French

代码,只需使用@ConfigurationProperties 和setter 方法(setLanguageMap) 是Map 字段的必填项,否则您将无法获取值。

import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController("/myclass")
@ConfigurationProperties
public class TestControllerEx {

  Map<String, String> languageMap;

  @GetMapping
  public ResponseEntity control() {

    System.out.println(getLanguageMap());

    return new ResponseEntity("success", HttpStatus.OK);
  }

  public Map<String, String> getLanguageMap() {
    return languageMap;
  }

  public void setLanguageMap(Map<String, String> languageMap) {
    this.languageMap = languageMap;
  }
}

输出:

{1=English, 2=French}

【讨论】:

    【解决方案2】:

    使用@ConfigurableProperties 并重组您的属性文件:

    @Configuration
    @PropertySource("<prop-file-path>")
    @ConfigurationProperties()
    public class ConfigProperties {
        @Value($("languageMap"))
        Map<String,String> languageMap;
    }
    

    属性文件:

    languageMap.1=English
    languageMap.2=French
    

    【讨论】:

      【解决方案3】:

      您可以使用文档中提到的 @ConfigurationProperties 注释来注入 Map。

      https://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/htmlsingle/#boot-features-external-config-loading-yaml]

      根据该文档,您可以加载属性:

      language.map[0]='英语'

      language.map[1]='法语'

      @ConfigurationProperties(prefix="language")
      public class LanguageMap{
      
          private List<String> languages= new ArrayList<String>();
      
          public List<String> getLanguages() {
              return this.languages;
          }
      }
      

      【讨论】:

        【解决方案4】:

        是的,可以使用@ConfigurableProperties。您必须创建一个类来访问这些属性。看看this。在该示例中,查看如何访问 additionalHeaders。那会帮助你。

        【讨论】:

          猜你喜欢
          • 2018-03-16
          • 2018-09-01
          • 2017-07-09
          • 1970-01-01
          • 2015-04-20
          • 1970-01-01
          • 1970-01-01
          • 2022-12-15
          • 2019-03-18
          相关资源
          最近更新 更多