दोहराए जाने वाले स्प्रिंग बीन पंजीकरण से थक गए हैं? आप अकेले नहीं हैं!
क्या आपने कभी स्प्रिंग बूट में बार-बार बीन परिभाषाओं से परेशानी महसूस की है? आप अकेले नहीं हैं! अलग-अलग कॉन्फ़िगरेशन के साथ एक ही कक्षा के कई बीन्स को प्रबंधित करना थकाऊ और अव्यवस्थित हो सकता है। मान लीजिए कि आपको कुछ इस तरह की आवश्यकता है:
@Bean MyService beanA() { // Set Configuration for bean A Configuration a = new... a.setUrl(.....) return new MyService(a); } @Bean MyService beanB() { // Set Configuration for bean A Configuration b = new... b.setUrl(.....) return new MyService(b); }
यह कोड जटिल नहीं है, लेकिन यह जल्दी ही दोहराव वाला हो जाता है, खासकर जब एक ही प्रकार के कई बीन्स के साथ काम कर रहा हो। आदर्श रूप से, आपके पास अनावश्यक कोड के बिना अलग-अलग सेटिंग्स के साथ कई उदाहरणों को पंजीकृत करने का एक तरीका होगा।
यह इंटरफ़ेस के प्रत्येक कार्यान्वयन के लिए अद्वितीय बीन्स होने से भिन्न है। इसके बजाय, हम विविधताओं के साथ एक कक्षा स्थापित करने के बारे में बात कर रहे हैं। उदाहरण के लिए, एक ऐसे ऐप के बारे में सोचें जो कई डेटाबेस (जैसे, ग्राहक, रिपोर्टिंग और बैकअप) से जुड़ता है। प्रत्येक कनेक्शन को अपने स्वयं के कॉन्फ़िगरेशन की आवश्यकता होती है, जिससे इसे बिना किसी अव्यवस्था के प्रबंधित करना चुनौतीपूर्ण हो जाता है। हो सकता है कि आप कुछ इस तरह लिखें:
@Bean DatabaseService primaryDatabaseService() { return new DatabaseService("db-url-primary"); } @Bean DatabaseService reportDatabaseService() { return new DatabaseService("db-url-report"); }
सरल समाधान होने से आपका कॉन्फ़िगरेशन काफी सुव्यवस्थित हो सकता है और आप एप्लिकेशन लॉजिक पर अधिक ध्यान केंद्रित कर सकते हैं। मल्टीबीनकॉन्फिग दर्ज करें - एक छोटी लाइब्रेरी जिसे मैंने एक ही स्प्रिंग बीन के लिए कई कॉन्फ़िगरेशन प्रबंधित करने में सहायता के लिए बनाया था।
मल्टीबीनकॉन्फिग अलग-अलग कॉन्फ़िगरेशन के साथ एक बीन के कई उदाहरणों के सेटअप को सरल बनाता है। इसके साथ, आप यह कर सकते हैं:
अपने pom.xml में निर्भरता शामिल करें:
io.github.olufemithompson multibeanconfig 0.0.3
अपनी कक्षा को कई उदाहरणों के लिए योग्य बनाने के लिए उसे @MultiBean से चिह्नित करें:
@MultiBean public class DatabaseService { // Your service logic }
अपनी संपत्तियों या YAML फ़ाइल में अद्वितीय संस्करण परिभाषित करें:
multibean: primary-database-service: class: DatabaseService report-database-service: class: DatabaseService
यह प्राथमिक डेटाबेस सेवा और रिपोर्ट डेटाबेस सेवा बीन्स को डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ पंजीकृत करता है। मल्टीबीनकॉन्फिग स्वचालित रूप से कबाब-केस से कैमलकेस में नामों का अनुवाद करता है।
अलग-अलग सेटिंग्स निर्दिष्ट करने के लिए, प्रत्येक बीन के कॉन्फ़िगरेशन में सीधे गुण जोड़ें। यहां एक उदाहरण दिया गया है जहां प्रत्येक उदाहरण एक अलग डेटाबेस से जुड़ता है:
@MultiBean public class DatabaseService { @Value("${database-config.connection-url}") private String connectionUrl; }
प्रत्येक इंस्टेंस को application.yml में कॉन्फ़िगर करें:
database-config: connection-url: 'jdbc:h2:default-url' multibean: primary-database-service: class: DatabaseService database-config: connection-url: 'jdbc:mysql:primary-db-url' report-database-service: class: DatabaseService database-config: connection-url: 'jdbc:postgresql:report-db-url'
यह सेटअप प्रत्येक बीन को एक अद्वितीय कनेक्शन यूआरएल देता है। साझा सेटिंग्स को एक सामान्य अनुभाग में भी परिभाषित किया जा सकता है, जिससे कॉन्फ़िगरेशन कुशल हो जाता है और अतिरेक कम हो जाता है।
आपको कॉन्फ़िगरेशन इंजेक्ट करने के लिए केवल @Value पर निर्भर रहने की ज़रूरत नहीं है। स्प्रिंग की @ConfigurationProperties कॉन्फ़िगरेशन क्लास में संपत्तियों को एनकैप्सुलेट करने की अनुमति देती है:
@ConfigurationProperties("database-config") @Configuration public class DatabaseConfig { private String connectionUrl; private int connectionTimeout; // Getters and Setters }
फिर, सीधे DatabaseConfig इंजेक्ट करें:
@MultiBean public class DatabaseService { private final DatabaseConfig databaseConfig; public DatabaseService(DatabaseConfig databaseConfig) { this.databaseConfig = databaseConfig; } }
मल्टीबीनकॉन्फिग के साथ, अपने विशिष्ट रूप से कॉन्फ़िगर किए गए बीन्स को इंजेक्ट करें जैसा कि आप किसी भी स्प्रिंग निर्भरता के साथ करेंगे:
@Service public class ApplicationService { private final DatabaseService primaryDatabaseService; private final DatabaseService reportDatabaseService; public ApplicationService(DatabaseService primaryDatabaseService, DatabaseService reportDatabaseService) { this.primaryDatabaseService = primaryDatabaseService; this.reportDatabaseService = reportDatabaseService; } }
मल्टीबीनकॉन्फ़िग स्प्रिंग बूट अनुप्रयोगों में बीन प्रबंधन को सुव्यवस्थित करता है, विशेष रूप से फीचर फ़्लैग, डेटा स्रोत या विशिष्ट एपीआई कनेक्शन को संभालते समय। यह अतिरेक को कम करता है, आपके कोड को साफ रखता है, और रखरखाव को बढ़ाता है। इसे आज़माएं, और मुझे बताएं कि यह आपके प्रोजेक्ट्स के लिए कैसे काम करता है!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3