注入地圖我有一個Spring Boot應用具有以下application.yml
- 從here基本上採取:彈簧引導 - 從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是否已經支持某些東西。
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運行此產生:
感謝安迪 - 這個按預期工作。有趣的是,如果沒有額外的類,它就無法工作 - 即出於某種原因(可能因爲它被用於在'SpringApplication.run'調用中運行應用程序),您無法將'info'映射放入'MapBindingSample'中。 –
有沒有辦法注入子圖?例如。從上面的地圖注入'info.build'而不是'info'? –
是的。將@ConfigurationProperties的前綴設置爲info,然後用名爲getBuild()的方法替換getInfo()來更新() –