Spring Boot-从application.yml注入映射

我有一个带有以下内容的Spring Boot" title="Spring Boot">Spring Boot应用程序application.yml-基本上是从这里获取的:

info:

build:

artifact: ${project.artifactId}

name: ${project.name}

description: ${project.description}

version: ${project.version}

我可以注入特定的值,例如

@Value("${info.build.artifact}") String value

但是,我想注入整个地图,例如:

@Value("${info}") Map<String, Object> info

那(或类似的东西)可能吗?显然,我可以直接加载yaml,但是想知道Spring是否已经支持了某些东西。

回答:

你可以使用插入地图@ConfigurationProperties:

import java.util.HashMap;

import java.util.Map;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.boot.context.properties.EnableConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

@EnableAutoConfiguration

@EnableConfigurationProperties

public class MapBindingSample {

public static void main(String[] args) throws Exception {

System.out.println(SpringApplication.run(MapBindingSample.class, args)

.getBean(Test.class).getInfo());

}

@Bean

@ConfigurationProperties

public Test test() {

return new Test();

}

public static class Test {

private Map<String, Object> info = new HashMap<String, Object>();

public Map<String, Object> getInfo() {

return this.info;

}

}

}

使用问题中的yaml运行它会产生:

{build={artifact=${project.artifactId}, version=${project.version}, name=${project.name}, description=${project.description}}}

有多种选项可用于设置前缀,控制如何处理缺少的属性等。有关更多信息,请参见javadoc。

以上是 Spring Boot-从application.yml注入映射 的全部内容, 来源链接: utcz.com/qa/419184.html

回到顶部