আমি আজ একই সমস্যায় পড়েছি, তবে দুর্ভাগ্যক্রমে অ্যান্ডির সমাধান আমার পক্ষে কার্যকর হয়নি। স্প্রিং বুটে 1.2.1. নিঃসন্দেহে এটি আরও সহজ, তবে আপনাকে কয়েকটি বিষয় সম্পর্কে সচেতন হতে হবে।
আমার থেকে আকর্ষণীয় অংশটি এখানে application.yml
:
oauth:
providers:
google:
api: org.scribe.builder.api.Google2Api
key: api_key
secret: api_secret
callback: http:
providers
মানচিত্রে কেবলমাত্র একটি মানচিত্রের প্রবেশ রয়েছে, আমার লক্ষ্য অন্যান্য OAuth সরবরাহকারীদের জন্য ডায়নামিক কনফিগারেশন সরবরাহ করা। আমি এই মানচিত্রটিকে এমন পরিষেবাতে ইনজেকশন করতে চাই যা এই ইয়ামল ফাইলে প্রদত্ত কনফিগারেশনের উপর ভিত্তি করে পরিষেবাগুলি সূচনা করবে। আমার প্রাথমিক বাস্তবায়নটি ছিল:
@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
কল চালানোর জন্য ব্যবহৃত হচ্ছে )।