一尘不染

如何使用@Value Spring注释注入地图?

spring

如何在Spring中使用@Value批注将值从属性文件注入Map中?

我的Spring Java类是我尝试使用$,但收到以下错误消息

无法自动装配字段:私有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

阅读 579

收藏
2020-04-12

共2个答案

一尘不染

我相信Spring Boot支持使用@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批注才能启用此功能。

2020-04-12
一尘不染

可以使用@Value注释将属性文件中的值注入Map中。

属性文件中的属性。

propertyname={key1:'value1',key2:'value2',....}

在你的代码中。

@Value("#{${propertyname}}")  private Map<String,String> propertyname;
2020-04-12