से नक्शा इंजेक्षन मैं निम्नलिखित application.yml
के साथ एक Spring Boot अनुप्रयोग है - 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
कि (या कुछ इसी तरह) संभव है? जाहिर है, मैं सीधे यम लोड कर सकता हूं, लेकिन सोच रहा था कि वसंत द्वारा पहले से समर्थित कुछ है या नहीं।
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 के साथ इस रनिंग पैदा करता है:
धन्यवाद एंडी - इस उम्मीद के रूप में काम करता है। दिलचस्प है कि यह एक अतिरिक्त कक्षा के बिना काम नहीं करता है - यानी आप कुछ कारणों से 'MapBindingSample' के भीतर 'जानकारी' मानचित्र नहीं डाल सकते हैं (शायद क्योंकि इसका उपयोग 'SpringApplication.run' कॉल' में ऐप चलाने के लिए किया जा रहा है)। –
क्या उप-मानचित्र इंजेक्ट करने का कोई तरीका है? जैसे उपर्युक्त मानचित्र से 'जानकारी' के बजाय 'info.build' इंजेक्ट करें? –
हां। @ कॉन्फ़िगरेशनप्रॉपर्टीज पर उपसर्ग को जानकारी पर सेट करें और फिर getBuild() –