是否可以使用 springboot 注释@Value从应用程序属性文件中获取 Map 值



我需要从application.properties文件中获取静态键值对数据。是否可以使用 SpringBoot 注释@Value来做到这一点。

如能提出建议,将不胜感激。

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

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

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

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

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

语言地图[0]='英语'

language.map[1]='法语'

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

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}

是的,可以使用@ConfigurableProperties.您必须创建一个类才能访问这些属性。看看这个。在该示例中,查看如何访问additionalHeaders。这将对您有所帮助。

使用@ConfigurableProperties并重构属性文件:

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

属性文件:

languageMap.1=English
languageMap.2=French

最新更新