هل سئمت من التسجيلات المتكررة لفاصوليا الربيع؟ أنت لست وحدك!
هل شعرت يومًا بالتعثر في تعريفات الفول المتكررة في Spring Boot؟ أنت لست وحدك! يمكن أن تصبح إدارة وحدات حبوب متعددة من نفس الفئة بتكوينات مختلفة أمرًا مملاً ومزدحمًا. لنفترض أنك بحاجة إلى شيء مثل هذا:
@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"); }
يمكن أن يؤدي الحصول على حل أبسط إلى تبسيط التكوين بشكل كبير ويتيح لك التركيز بشكل أكبر على منطق التطبيق. أدخل MultiBeanConfig - مكتبة صغيرة قمت بإنشائها للمساعدة في إدارة تكوينات متعددة لنفس حبة الربيع.
يعمل MultiBeanConfig على تبسيط عملية إعداد مثيلات متعددة للفاصوليا بتكوينات منفصلة. من خلاله يمكنك:
قم بتضمين التبعية في 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
يؤدي هذا إلى تسجيل وحدات PrimaryDatabaseService وreportDatabaseService بالتكوينات الافتراضية. يقوم MultiBeanConfig تلقائيًا بترجمة الأسماء من حالة الكباب إلى حالة الجمل.
لتعيين إعدادات منفصلة، أضف خصائص مباشرة إلى تكوين كل حبة. فيما يلي مثال حيث يتصل كل مثيل بقاعدة بيانات مختلفة:
@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'
يمنح هذا الإعداد كل حبة عنوان URL فريدًا للاتصال. يمكن أيضًا تعريف الإعدادات المشتركة في قسم عام، مما يجعل التكوينات فعالة ويقلل التكرار.
ليس عليك الاعتماد فقط على @Value لإدخال التكوينات. يسمح @ConfigurationProperties الخاص بـ Spring بتغليف الخصائص في فئة التكوين:
@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; } }
باستخدام MultiBeanConfig، أدخل حبوب الفول التي تم تكوينها بشكل فريد كما تفعل مع أي تبعية Spring:
@Service public class ApplicationService { private final DatabaseService primaryDatabaseService; private final DatabaseService reportDatabaseService; public ApplicationService(DatabaseService primaryDatabaseService, DatabaseService reportDatabaseService) { this.primaryDatabaseService = primaryDatabaseService; this.reportDatabaseService = reportDatabaseService; } }
يعمل MultiBeanConfig على تبسيط إدارة الفول في تطبيقات Spring Boot، خاصة عند التعامل مع إشارات الميزات أو مصادر البيانات أو اتصالات API المميزة. فهو يقلل من التكرار، ويحافظ على نظافة التعليمات البرمجية الخاصة بك، ويعزز إمكانية الصيانة. جربه وأخبرني كيف يعمل مع مشاريعك!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3