اختتام مؤتمر JPrime 2024 بنجاح!!
بذل منظمو JPrime 2024 مرة أخرى جهودًا كبيرة لتقديم مجموعة متنوعة من المواضيع، مما يضمن وجود شيء للجميع.
ومع ذلك، فإن مقالة اليوم لم يتم تحفيزها بواسطة إحدى محاضرات مايكل سيمونز حول "تطور اختبار التكامل في Spring وQuarkus" على الرغم من أنها كانت ثاقبة للغاية. استكشف استراتيجيات اختبار التكامل، مع التركيز على الإعداد في Spring Boot.
أكد المؤلف بوضوح على أن المشكلات التي أبرزها يتم معالجتها بشكل فعال في Quarkus من خلال استخدام خدمات التطوير (الشكل 1). وهذا يسلط الضوء على سبب آخر يجعلني أنظر إلى Spring Boot بعين الشك تجاه بعض التطبيقات - حيث تتناقض تعقيداته بشكل صارخ مع الحلول المبسطة في Quarkus، لا سيما مع استخدام خدمات Dev.
الشكل 1 - جي برايم 2024
لقد كان من الرائع أن نشهد الدهشة التي أثارتها خدمات التطوير بين الحاضرين الجدد. ومع ذلك، من المهم ملاحظة أن Dev Services ليست ميزة حديثة في Quarkus؛ لقد كان جزءًا لا يتجزأ من الإطار لبعض الوقت. دعونا نتعمق أكثر في خدمات Quarkus Dev ونستكشف فوائدها الدائمة.
في Quarkus، تعمل خدمات Dev على تسهيل التزويد التلقائي للخدمات غير المكونة في كل من وضعي التطوير والاختبار. بشكل أساسي، إذا قمت بتضمين ملحق دون تكوينه، فسيقوم Quarkus تلقائيًا ببدء الخدمة ذات الصلة - غالبًا باستخدام Testcontainers في الخلفية - وتهيئة تطبيقك لاستخدام هذه الخدمة بكفاءة.
الكشف التلقائي عن الخدمة وتشغيلها
تقوم Quarkus Dev Services بأتمتة الكشف عن الخدمات الضرورية وإطلاقها مثل قواعد البيانات ووسطاء الرسائل والخدمات الخلفية الأخرى. تستفيد هذه الوظيفة من تبعيات التطبيق المحددة في pom.xml أو build.gradle. على سبيل المثال، تؤدي إضافة برنامج تشغيل قاعدة البيانات تلقائيًا إلى تشغيل Dev Services لتدوير مثيل حاوية مماثل لقاعدة البيانات هذه إذا لم تكن قيد التشغيل بالفعل. تتضمن التكنولوجيا المستخدمة هنا في المقام الأول حاويات الاختبار، والتي تسمح بإنشاء مثيلات خفيفة الوزن وسهلة الاستخدام لقواعد البيانات الشائعة أو متصفحات الويب السيلينيوم أو أي شيء آخر يمكن تشغيله في حاوية Docker.
حقن التكوين الديناميكي
بمجرد إنشاء مثيل للخدمات المطلوبة، تقوم Quarkus Dev Services ديناميكيًا بإدخال تفاصيل اتصال الخدمة ذات الصلة في تكوين التطبيق في وقت التشغيل. ويتم ذلك دون أي تدخل يدوي، باستخدام ميزة تُعرف باسم الاختبار المستمر التي تعيد توجيه قاعدة البيانات القياسية، أو عناوين URL الأخرى للخدمة، إلى حاويات الاختبار التي يتم توفيرها تلقائيًا. يتم تعيين خصائص التكوين مثل عناوين URL وبيانات اعتماد المستخدم والمعلمات التشغيلية الأخرى بسلاسة، مما يسمح للتطبيق بالتفاعل مع هذه الخدمات كما لو تم تكوينها يدويًا.
السلوكيات الخاصة بالخدمة
تم تصميم خدمات التطوير لأنواع مختلفة من الخدمات:
التعامل مع الشبكة وعزل الخدمة
تعمل كل خدمة تقدمها Quarkus Dev Services في بيئتها المعزولة. يعد هذا أمرًا بالغ الأهمية لضمان عدم وجود تعارضات في المنافذ أو بقايا بيانات أو مشكلات أمنية بين اختبارات التطوير المختلفة. على الرغم من هذا العزل، يتم ربط الخدمات بالشبكة بشكل مناسب باستخدام Docker، مما يضمن قدرتها على التواصل مع بعضها البعض حسب الحاجة، ومحاكاة بيئة النشر في العالم الحقيقي.
إدارة دورة الحياة
يدير Quarkus دورة الحياة الكاملة لهذه الخدمات المقدمة ديناميكيًا. عند بدء تشغيل التطبيق الخاص بك في وضع التطوير، يتم تشغيل الخدمات الضرورية تلقائيًا. عند إيقاف تطبيق Quarkus، يتم إنهاء هذه الخدمات أيضًا. تتضمن هذه الإدارة التعامل مع استمرارية البيانات كما هو مطلوب، مما يسمح للمطورين بالمتابعة من حيث توقفوا دون أي تأخير في الإعداد.
ضع في اعتبارك أنك تستخدم قاعدة بيانات PostgreSQL مع Quarkus. إذا لم يتم اكتشاف تكوين PostgreSQL موجود، فسيقوم Quarkus ببدء تشغيل حاوية PostgreSQL Docker وتوصيل تطبيقك تلقائيًا.
يتم تمكين هذه الخدمات افتراضيًا في أوضاع التطوير والاختبار ولكن يمكن تعطيلها إذا لزم الأمر عبر التطبيق.خصائص:
quarkus.datasource.devservices.enabled=false
دعنا نتوسع في السيناريو حيث يستخدم Quarkus قاعدة بيانات PostgreSQL وكيف تسهل خدمات التطوير ذلك بأقل قدر من الضجة.
إذا اكتشف Quarkus أنه لا يوجد تكوين نشط لـ PostgreSQL (لا يعمل أو لم يتم تكوينه بشكل صريح)، فسيبدأ تشغيل حاوية PostgreSQL تلقائيًا باستخدام Docker. يتم إعداد هذا خلف الكواليس من خلال خدمات التطوير.
للتفاعل مع قاعدة البيانات من خلال طبقة ORM، فكر في استخدام Quarkus Panache، الذي يبسط عمليات Hibernate ORM. إليك كيفية إعداد بيئتك:
إضافة التبعيات
أولاً، قم بتضمين التبعيات الضرورية في pom.xml الخاص بك:
io.quarkus quarkus-hibernate-orm-panache io.quarkus quarkus-jdbc-postgresql
تعريف الكيان
بعد ذلك، حدد الكيان الخاص بك، مثل CityEntity:
@Entity @Table(name = "cities") public class CityEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @Column(name = "public_id") private String publicId; @OneToOne private StateEntity state; @Column(nullable = false, name = "created_at") private Instant createdAt; @Column(nullable = false, name = "last_modified") private Instant lastModified; @PrePersist protected void onCreate() { createdAt = Instant.now(); lastModified = createdAt; } @PreUpdate protected void onUpdate() { lastModified = Instant.now(); } }
إنشاء المستودع
تنفيذ المستودع الذي سيتفاعل مباشرة مع قاعدة البيانات:
@ApplicationScoped public class CityRepository implements PanacheRepository{ }
طبقة الخدمة
تحديد طبقة الخدمة التي تستخدم المستودع:
@ApplicationScoped public class CityServiceImpl implements CityService { @Inject CityRepository cityRepository; @Override public long countCities() { return cityRepository.count(); } } public interface CityService { long countCities(); }
نقطة نهاية المورد
@Path("/cities") @Tag(name = "City Resource", description = "City APIs") public class CityResource { @Inject CityService cityService; @GET @Path("/count") @Operation(summary = "Get the total number of cities", description = "Returns the total count of cities in the system.") @APIResponse(responseCode = "200", description = "Successful response", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Long.class))) public long count() { return cityService.countCities(); } }
عند تشغيل تطبيق Quarkus الخاص بك (mvn quarkus:dev)، لاحظ بدء التشغيل التلقائي لحاوية PostgreSQL (الشكل 2). يجسد هذا التكامل السلس قوة Quarkus Dev Services، مما يجعل التطوير والاختبار أكثر بساطة من خلال أتمتة التكوين وإعداد الاتصال بالخدمات الخارجية اللازمة لتطبيقك.
الشكل 2 – سجلات التطبيق
تعمل خدمات Quarkus Dev على تبسيط مراحل التطوير والاختبار من خلال التعامل مع تكوين وإدارة الخدمات المتنوعة، مما يسمح للمطورين بالتركيز بشكل أكبر على التطبيق الفعلي. يدعم Quarkus مجموعة واسعة من خدمات التطوير، بما في ذلك:
تمثل Quarkus Dev Services نقلة نوعية في كيفية تعامل المطورين مع إعداد الخدمات الخارجية ودمجها أثناء مرحلتي التطوير والاختبار. لا تعمل أتمتة إعداد البيئة على تسريع عملية التطوير فحسب، بل تقلل أيضًا من احتمالية حدوث أخطاء في التكوين، مما يسهل على الفرق التركيز على إنشاء تطبيقات قوية وغنية بالميزات.
إحدى المزايا البارزة لخدمات Quarkus Dev هي التركيز على إنتاجية المطورين. ومن خلال إزالة الحاجة إلى إدارة تبعيات الخدمة يدويًا، يمكن للمطورين البدء فورًا في العمل على ميزات التطبيق ومنطق الأعمال. يُعد سير العمل المبسط هذا مفيدًا بشكل خاص في تصميمات الخدمات الصغيرة حيث قد تتطلب الخدمات المتعددة التطوير والتكامل المتزامنين
في الختام، يمكن أن يؤثر تبني خدمات Quarkus Dev بشكل كبير على فعالية فريق التطوير لديك ونتائج المشروع. بساطة وقوة Quarkus تشجع على التجريب،
تكرارات أسرع، وفي النهاية دورة تطوير أسرع. هذا النوع من النفوذ التكنولوجي هو ما تحتاجه الشركات الحديثة لتزدهر في العصر الرقمي.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3