是否可以使用 Spring Boot 注释 @Value 从 application.properties 文件中获取 Map 值 [重复]
Posted
技术标签:
【中文标题】是否可以使用 Spring Boot 注释 @Value 从 application.properties 文件中获取 Map 值 [重复]【英文标题】:Is it possible to get Map value from application.properties file using springboot annotation @Value [duplicate] 【发布时间】: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
,这会更直观。这种格式有“字典”和地图。
【参考方案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
。那会帮助你。
【讨论】:
以上是关于是否可以使用 Spring Boot 注释 @Value 从 application.properties 文件中获取 Map 值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
我是不是需要使用 Kotlin Junit5 和 Spring Boot 将 Spring 注释复制到内部类?
Spring Boot 将 Java 注释上的配置属性/消息外部化