मैं आज भी इसी समस्या में हूं, लेकिन दुर्भाग्य से एंडी का समाधान मेरे लिए कारगर नहीं रहा। स्प्रिंग बूट 1.2.1 में। यह और भी आसान है, लेकिन आपको कुछ चीजों के बारे में पता होना चाहिए।
यहाँ मेरे से दिलचस्प हिस्सा है application.yml
:
oauth:
providers:
google:
api: org.scribe.builder.api.Google2Api
key: api_key
secret: api_secret
callback: http://callback.your.host/oauth/google
providers
मानचित्र में केवल एक मानचित्र प्रविष्टि है, मेरा लक्ष्य अन्य OAuth प्रदाताओं के लिए गतिशील कॉन्फ़िगरेशन प्रदान करना है। मैं इस नक्शे को एक सेवा में इंजेक्ट करना चाहता हूं जो इस yaml फ़ाइल में प्रदान किए गए कॉन्फ़िगरेशन के आधार पर सेवाओं को आरंभ करेगा। मेरा प्रारंभिक कार्यान्वयन था:
@Service
@ConfigurationProperties(prefix = 'oauth')
class OAuth2ProvidersService implements InitializingBean {
private Map<String, Map<String, String>> providers = [:]
@Override
void afterPropertiesSet() throws Exception {
initialize()
}
private void initialize() {
//....
}
}
एप्लिकेशन शुरू करने के बाद, providers
मैप को OAuth2ProvidersService
इनिशियलाइज़ नहीं किया गया था। मैंने एंडी द्वारा सुझाए गए समाधान की कोशिश की, लेकिन यह भी काम नहीं किया। मैं उस एप्लिकेशन में ग्रूवी का उपयोग करता हूं , इसलिए मैंने हटाने का फैसला किया private
और ग्रूवी को गेट्टर और सेटर उत्पन्न करने दिया। तो मेरा कोड इस तरह देखा:
@Service
@ConfigurationProperties(prefix = 'oauth')
class OAuth2ProvidersService implements InitializingBean {
Map<String, Map<String, String>> providers = [:]
@Override
void afterPropertiesSet() throws Exception {
initialize()
}
private void initialize() {
//....
}
}
उस छोटे से बदलाव के बाद सब कुछ काम कर गया।
हालांकि एक बात है जो ध्यान देने योग्य हो सकती है। काम करने के बाद मैंने इस क्षेत्र को बनाने private
और सेटर विधि में सीधे तर्क प्रकार के साथ सेटर प्रदान करने का निर्णय लिया । दुर्भाग्य से यह काम नहीं करेगा। यह org.springframework.beans.NotWritablePropertyException
संदेश के साथ कारण बनता है :
Invalid property 'providers[google]' of bean class [com.zinvoice.user.service.OAuth2ProvidersService]: Cannot access indexed value in property referenced in indexed property path 'providers[google]'; nested exception is org.springframework.beans.NotReadablePropertyException: Invalid property 'providers[google]' of bean class [com.zinvoice.user.service.OAuth2ProvidersService]: Bean property 'providers[google]' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
यदि आप अपने स्प्रिंग बूट एप्लिकेशन में ग्रूवी का उपयोग कर रहे हैं तो इसे ध्यान में रखें।
info
नक्शा नहीं डाल सकते हैंMapBindingSample
(हो सकता है कि इसका उपयोगSpringApplication.run
कॉल में ऐप को चलाने के लिए किया जा रहा हो )।