如何使用@Value弹簧注记注入地图?

如何使用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;

}

我在.属性文件中具有以下属性

com.test.standard.name1=Pattern1
com.test.standard.name2=Pattern2
com.test.standard.name3=Pattern3
com.hello.foo.enabled=true

答案 1

您可以使用如下所示的注记将值从属性文件注入到 Map 中。@Value

属性文件中的属性。

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

在代码中。

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

请注意,主题标签是注释的一部分。


答案 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注释才能启用此功能。

关于此功能的很酷的东西是,您可以验证您的属性


推荐