Spring boot 如何使用SpringBoot在地图中加载属性?

Spring boot 如何使用SpringBoot在地图中加载属性?,spring-boot,properties,configuration,hashmap,configuration-files,Spring Boot,Properties,Configuration,Hashmap,Configuration Files,我试图在SpringBoot应用程序中初始化映射,但我做错了什么 我的config.properties: myFieldMap.10000.fieldName=MyFieldName myFieldMap.10000.fieldName2=MyFieldName2 myFieldMap.10001.fieldName=MyFieldName myFieldMap.10001.fieldName2=MyFieldName2 myFieldMap.10002.fieldName=MyFieldNa

我试图在SpringBoot应用程序中初始化映射,但我做错了什么

我的config.properties:

myFieldMap.10000.fieldName=MyFieldName
myFieldMap.10000.fieldName2=MyFieldName2
myFieldMap.10001.fieldName=MyFieldName
myFieldMap.10001.fieldName2=MyFieldName2
myFieldMap.10002.fieldName=MyFieldName
myFieldMap.10003.fieldName2=MyFieldName2
...
(是否可以使用某种括号表示法,如
myFieldMap[10001].fieldName
表示地图(我看到它用于列表)。 我尝试使用MyConfig.class:

@PropertySource("classpath:config.properties")      
@Component
public class MyConfig {
    private java.util.Map<Integer, MyMapping> theMappingsMap = new HashMap<Integer, MyMapping>();

    public Map<String, MyMapping> getTheMappingsMap() {
        return theMappingsMap;
    }
    public void setTheMappingsMap(Map<String, MyMapping> theMappingsMap) {
        this.theMappingsMap= theMappingsMap;
    }

    public class MyMapping {
        private String fieldName;
        private String fieldName2;

        public String getFieldName() {
            return fieldName;
        }

        public String getFieldName2() {
            return fieldName2;
        }

        public void setFieldName(final String fieldName) {
            this.fieldName = fieldName;
        }

        public void setFieldName2(final String fieldName) {
            this.fieldName2 = fieldName;
        }
    }
}
@PropertySource(“classpath:config.properties”)
@组成部分
公共类MyConfig{
private java.util.Map theMappingsMap=new HashMap();
公共地图getTheMappingsMap(){
返回地图;
}
公共void设置映射映射(映射映射映射){
this.theMappingsMap=theMappingsMap;
}
公共类MyMapping{
私有字符串字段名;
私有字符串字段名2;
公共字符串getFieldName(){
返回字段名;
}
公共字符串getFieldName2(){
返回字段名2;
}
public void setFieldName(最终字符串fieldName){
this.fieldName=字段名;
}
public void setFieldName2(最终字符串fieldName){
this.fieldName2=字段名;
}
}
}

如何调整我的代码,让SpringBoot使用config.properties文件中的定义初始化我的配置(Map)?

您缺少
@ConfigurationProperties
注释。请尝试此操作

@PropertySource("classpath:config.properties")
@Configuration
@ConfigurationProperties
public class MyConfig {
  private java.util.Map<String, MyMapping> myFieldMap = new HashMap<>();
  ....
}
@PropertySource(“classpath:config.properties”)
@配置
@配置属性
公共类MyConfig{
private java.util.Map myFieldMap=new HashMap();
....
}

代码的另一个问题是,如果要将MyMapping类作为MyConfig的内部类,则需要将其声明为静态。否则,可以将其作为单独的类。

缺少
@ConfigurationProperties
注释。请尝试此操作

@PropertySource("classpath:config.properties")
@Configuration
@ConfigurationProperties
public class MyConfig {
  private java.util.Map<String, MyMapping> myFieldMap = new HashMap<>();
  ....
}
@PropertySource(“classpath:config.properties”)
@配置
@配置属性
公共类MyConfig{
private java.util.Map myFieldMap=new HashMap();
....
}

代码的另一个问题是,如果要将MyMapping类作为MyConfig的内部类,则需要将其声明为静态类。否则可以将其作为单独的类。

Aaargh!当然。就是这样。同时,我发现我可以使用类似myFieldMap[10000]fieldname=MyFieldName myFieldMap[10000]的表示法fieldname2=myfieldname2aargh!当然。就是这样。同时我发现我可以使用像myFieldMap[10000]fieldname=MyFieldName=myFieldMap[10000]fieldname2=MyFieldName2这样的符号