如何使用Spring Boot在Map中加载属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Spring Boot在Map中加载属性?相关的知识,希望对你有一定的参考价值。

我尝试在SpringBoot应用程序中初始化Map,但是我做错了。

我的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;
        }
    }
}

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

答案

你缺少@ConfigurationProperties注释。试试这个

@PropertySource("classpath:config.properties")
@Configuration
@ConfigurationProperties
public class MyConfig {
  private java.util.Map<String, MyMapping> myFieldMap = new HashMap<>();
  ....
}

您的代码的另一个问题是,如果您想将MyMapping类作为MyConfig的内部类,那么您需要将其声明为静态。或者你可以把它作为一个单独的类。

以上是关于如何使用Spring Boot在Map中加载属性?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Spring Boot 中加载外部属性

如何在 spring-boot 配置中加载 application.yaml 配置以进行硒测试

如何通过Spring Boot在MongoDB中加载初始数据?

无法在 Spring Boot 测试中加载类 [pg-uuid]

在 Spring Boot 应用程序上使用 Flyway 时如何在 H2 中加载初始数据?

如何在没有 spring-boot 的情况下在 spring-webflux 中加载配置?