如何在Spring中使用@Value批注将值从属性文件注入Map中?
我的Spring Java类是我尝试使用$,但收到以下错误消息
无法自动装配字段:私有java.util.Map Test.standard; 嵌套异常是java.lang.IllegalArgumentException:无法解析字符串值“ $ {com.test.standard}”中的占位符'com.test.standard'
java.util.Map Test.standard;
java.lang.IllegalArgumentException
“ $ {com.test.standard}”
'com.test.standard'
@ConfigurationProperty("com.hello.foo") public class Test { @Value("${com.test.standard}") private Map<String,Pattern> standard = new LinkedHashMap<String,Pattern> private String enabled; }
我在.properties文件中具有以下属性
com.test.standard.name1=Pattern1 com.test.standard.name2=Pattern2 com.test.standard.name3=Pattern3 com.hello.foo.enabled=true
我相信Spring Boot支持使用@ConfigurationProperties注释开箱即用地加载属性映射。
@ConfigurationProperties
根据该文档,你可以加载属性:
my.servers[0]=dev.bar.com my.servers[1]=foo.bar.com
像这样变成豆子:
@ConfigurationProperties(prefix="my") public class Config { private List<String> servers = new ArrayList<String>(); public List<String> getServers() { return this.servers; } }
我之前使用过@ConfigurationProperties功能,但没有加载到地图中。你需要使用@EnableConfigurationProperties批注才能启用此功能。
可以使用@Value注释将属性文件中的值注入Map中。
@Value
属性文件中的属性。
propertyname={key1:'value1',key2:'value2',....}
在你的代码中。
@Value("#{${propertyname}}") private Map<String,String> propertyname;