ما هو الجديد في ربيع الحذاء 2.2؟

تم إعداد ترجمة المقال خصيصًا لطلاب الدورة التدريبية "Developer on the Spring Framework" .




في 16 أكتوبر 2019 ، تم إصدار Spring Boot 2.2!

ستتعلم في هذا المنشور عن الأشياء الجيدة الجديدة العديدة التي يقدمها لك الإصدار 2.2.

مخضرم


لتبدأ مع Spring Boot 2.2. في التطبيق الخاص بك ، قم بالترقية إلى الإصدار الجديد من starter-parent .

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>your-very-cool-project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>your-very-cool-project</name> <description>Spring Boot 2.2 Project</description> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project> 


إذا كنت تبدأ تشغيل التطبيق من البداية ، فقم بإنشاء مشروع Maven أو Grade في start.spring.io !



تهيئة الفول كسول العالمية


منذ فترة طويلة يتم دعم تهيئة كسول مكونات الفول في إطار الربيع.

يخبر الفاصوليا التي تمت تهيئتها بشكل لاذع حاوية IoC أن تستنسخ الحبة عند الطلب الأول ، وليس عند بدء التشغيل.


الميزة الجديدة المقدمة في Spring Boot 2.2 هي دعم التهيئة البطيئة لمكونات الفول (هذه الميزة معطلة بشكل افتراضي).

ماذا يحدث عند تشغيل تهيئة حبوب الفاصوليا العالمية؟

  • سيتم تأجيل تهيئة كل فاصوليا الربيع وتوابعها إلى أن تكون هناك حاجة إليها.


لتقليل وقت بدء تشغيل التطبيق ، يمكنك الآن تمكين التهيئة البطيئة لفول الربيع في خصائص التكوين باستخدام:

 spring.main.lazy.initialization=true 


أو لتكوين yml:

 spring: main: lazy-initialization: true 


هل هناك أي عيوب لاستخدام التهيئة كسول الفول؟ بالطبع! من المهم للغاية فهم العواقب - يجب ألا تتضمن التهيئة العالمية لمكونات الفول دون التفكير في هذا الحل! هناك بعض المقايضات التي يجب مراعاتها:

  • قد تستغرق معالجة طلبات HTTP وقتًا أطول أثناء حدوث أي تهيئة كسولة. الطلبات التالية لا تتأثر.
  • لن تحدث حالات الفشل التي تحدث عادة عند بدء التشغيل (منذ إنشاء فاصوليا الربيع والتبعيات الخاصة بها عند إنشاء سياق التطبيق) على الفور. وبالتالي ، لن ينتج تطبيقك أعطالًا واضحة عند بدء التشغيل! نتيجة لذلك: قد يكون العميل الخاص بك هو أول من يواجه مشكلة (أسلاك الفول).


إذا كنت لا ترغب في تمكين التهيئة البطيئة للفاصوليا ( spring.main.lazy.initialization = false ) على المستوى العالمي ، يمكنك التفكير في إعداد التهيئة البطيئة لمكون معين باستخدام التعليق التوضيحي @Lazy .

من ناحية أخرى ، من الممكن أيضًا تمكين التهيئة البطيئة لمكونات البقول ( spring.main.lazy.initialization = true ) على المستوى العالمي وتعطيل التهيئة البطيئة لمكون معين بشكل صريح.

دعونا التعميم:





تم تعطيل JMX بشكل افتراضي


بدءًا من Spring Boot 2.2 ، يتم تعطيل JMX افتراضيًا. يساعد هذا في تقليل وقت بدء تشغيل التطبيق وعدم إضاعة قدر كبير من الموارد في وقت التشغيل. إذا كنت لا تزال تعتمد على JMX ، فيمكنك تمكينه مرة أخرى:

 spring.jmx.enabled=true 


أو:

 spring: jmx: enabled: true 


تحسينات لخصائص التكوين


يأتي Spring Boot 2.2 مع بعض التحسينات الرائعة لخصائص التكوين.

  • دعم فحص @ConfigurationProperties لـ @ConfigurationProperties
  • ملزمة غير @ConfigurationProperties للتغيير @ConfigurationProperties


دعم فحص Classpath لـ @ConfigurationProperties


سيقوم Spring Boot بإنشاء فاصوليا لكل فئة تكوين مشروح باستخدام @ConfigurationProperties الموجود عند مسح classpath . هذا بديل للاستخدام

  • EnableConfigurationProperties لفئة تربط فئة خاصية
  • أو استخدام التعليق التوضيحي @Component في فئة التكوين لجعله فاصوليا.


ضع في اعتبارك أنه يمكن إنشاء مكونين للفاصوليا لفئة التكوين ، مع إضافة تعليق توضيحي مع كل من @Component و @ConfigurationProperties . في مثل هذه الحالات ، يجب إزالة @Component من فئة التكوين الخاصة بك!

ملزمة غير @ConfigurationProperties للتغيير @ConfigurationProperties


باستخدام ربط الخصائص المستندة إلى المنشئ الآن يدعم فئات خصائص التكوين غير القابلة للتغيير. يمكن تمكين @ConfigurationProperties القائمة على @ConfigurationProperties عن طريق شرح فئة @ConfigurationProperties أو أحد @ConstructorBinding باستخدام @ConstructorBinding .

على سبيل المثال:

 package com.example.immutable.configuration.binding; import lombok.Getter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConstructorBinding; @Getter @ConfigurationProperties("stock.quote.subscription") public class ImmutableStockQuoteSubscriptionProperties { private final String endpoint; private final String apiKey; private final SubscriptionType subscriptionType; private final boolean enabled; @ConstructorBinding public ImmutableStockQuoteSubscriptionProperties(String endpoint, String apiKey, SubscriptionType subscriptionType, boolean enabled) { this.endpoint = endpoint; this.apiKey = apiKey; this.subscriptionType = subscriptionType; this.enabled = enabled; } enum SubscriptionType { /** * Real time stock quotes */ REALTIME, /** * Stock quotes that are delayed by 15 minutes */ DELAYED, } } 


الخصائص في application.yml:

 stock: quote: subscription: endpoint: http://stockgeeks.io/api enabled: true apiKey: secret subscriptionType: realtime 


انظر الوثائق لمزيد من التفاصيل.

مشغل نقطة النهاية التغييرات


غيّرت نقطة النهاية /actuator/health تنسيق JSON الناتج عن طريق إعادة تسمية details إلى components لعناصر المستوى الأول.

تم تغيير نوع وسائط المشغل من: application/vnd.spring-boot.actuator.v2+json إلى application/vnd.spring-boot.actuator.v3+json .

مثال على استجابة نقطة النهاية /actuator/health قبل Spring Boot 2.2 (المشغل V2):

 { "status": "UP", "details": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32597131264, "threshold": 10485760 } }, "ping": { "status": "UP" } } } 


الجواب نقطة النهاية /actuator/health التمهيد الربيع 2.2 (المحرك V3):

 { "status": "UP", "components": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32605003776, "threshold": 10485760 } }, "ping": { "status": "UP" } } } 


قد تعتمد مجموعة الأدوات الخاصة بك على تنسيق المحرك الصحي V2.

Spring Spring 2.2 health متوافق مع تحديد رأس HTTP Accept : مع نوع وسائط V2 و application/vnd.spring-boot.actuator.v2+json

يمكنك القيام بذلك بنفسك باستخدام حليقة:

curl -H "Accept: application/vnd.spring-boot.actuator.v2+json" http://localhost:8080/actuator/health

إلى جانب هذا التغيير ، أصبح من الممكن الآن تنظيم مؤشرات الأداء في مجموعات .

دعم RSocket


RSocket هو بروتوكول اتصال ثنائي يستخدم لنقل تدفقات البايت. يجعل نماذج التفاعل المتماثل ممكن من خلال الرسائل غير المتزامنة عبر قناة واحدة.

جنبا إلى جنب مع بداية جديدة ل RSocket ، تمت إضافة التكوين التلقائي واسعة النطاق.

 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-rsocket</artifactId> </dependency> 


لمزيد من المعلومات ، اقرأ وثائق RSocket Spring Boot .

دعم جافا 13


تم إصدار Java 13 في 17 سبتمبر 2019.

Spring Framework 5.2 و Spring Boot 2.2 يدعمان الآن Java 13.

ستظل إصدارات Java LTS 8 و 11 متوافقة مع Spring Boot 2.2.

Kubernetes Cloud Platform Discovery


يحدد ConditionalOnCloudPlatform الآن ما إذا كان تطبيق Spring Boot قيد التشغيل في Kubernetes.

 package nl.jtim.spring.boot; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.cloud.CloudPlatform; import org.springframework.stereotype.Service; @Service @ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) public class MyVeryCoolService { } 


لافتات


يأتي Spring Boot مع شعار افتراضي يظهر في وحدة التحكم فور بدء تشغيل التطبيق.



هذه هي ميزة العبقري غريب الأطوار جميلة ، ولكن يدعم Spring Boot بالفعل الشعارات المخصصة (المتحركة).

بدءًا من Spring Boot 2.2 ، يمكنك جعل شعارك أكثر جمالًا:

  • يمكن الآن لملفات شعار ASCII استخدام أحرف التحكم في الألوان ANSI 256 باستخدام {AnsiColor.NNN} (حيث NNN هو رمز اللون ).
  • الآن بالنسبة لافتات الرسوم البيانية (المتحركة) ، يمكنك ضبط خاصية spring.banner.image.bitdepth على 8 . spring.banner.image.pixelmode في block لاستخدام أحرف ASCII كتلة.


النتيجة تبدو شيء مثل هذا:



المصدر: https://github.com/spring-projects/spring-boot/wiki/images/animated-ascii-art-256.gif

للحصول على مثال بسيط عن شعار Spring Boot 2.2 المتحرك المحسن ، انظر مثالي على Github .

الترحيل من Java EE إلى Jakarta EE


حيثما أمكن ، تم تبديل أمر Spring (Boot) من تبعيات Java EE باستخدام معرف مجموعة من javax . تبعيات جاكرتا EE المكافئة بمعرف مجموعة jakarta في البداية لـ Spring Boot.

بالإضافة إلى ذلك ، تمت إضافة إدارة التبعية لواجهة API التابعة لجاكرتا EE جنبًا إلى جنب مع إدارة التبعية الحالية لواجهة برمجة تطبيقات التبعية Java EE.

ضع في اعتبارك أنه سيتم إزالة إدارة التبعية Java EE API في الإصدارات المستقبلية من Spring Boot ، ومن المستحسن أن تبدأ في استخدام تبعيات Jakarta EE API.

التغييرات مفتاح التكوين


يقدم Spring Boot 2.2 العديد من مفاتيح التكوين الجديدة. هناك أيضا مفاتيح التي عفا عليها الزمن وحذفها. هناك الكثير من التغييرات التي يجب تغطيتها جميعها ، ولكن إليك بعض التغييرات المهمة:

logging.file إعادة تسميته إلى logging.file.name
logging.path إعادة تسميته إلى logging.file.path

للحصول على نظرة عامة كاملة على جميع التغييرات ، راجع سجل تغيير تكوين Spring Boot 2.2!

عتيق الطراز


تحقق من ملاحظات الإصدار للحصول على قائمة كاملة من الفئات والخصائص المهملة .

بعض التغييرات التي يجب ملاحظتها:

  • دعم وقت java.time لصالح java.time
  • يتم إهمال عميل النقل Elasticsearch والعميل Jest لصالح خيارات أخرى مثل RestHighLevelClient و ReactiveElasticsearchClient ، راجع الوثائق لمزيد من التفاصيل.


تحديثات التبعية


Spring Boot 2.2 يأتي مع العديد من التبعيات المحدثة.

تحديثات تبعية الربيع:



أهم التحديثات للتبعيات الأخرى:



اختبار تحديث التبعية:



الترقية إلى Spring Spring 2.2


منذ 1 أغسطس 2019 ، أكملت Spring Boot 1.x دورة حياتها . إذا كنت لا تزال تستخدم تطبيقات Spring Boot 1.x ، فقد حان الوقت للترقية!

تذكر أنه قد تمت إزالة الفئات والأساليب والخصائص التي تم إهمالها في Spring Boot 2.1 في Spring Boot 2.2. تأكد من عدم استدعاء الأساليب المهملة قبل الترقية. تحقق من ملاحظات الإصدار لإهمالها في Spring Boot 2.1.

يمكنك العثور على مزيد من المعلومات على الروابط التالية:



انقر فوق + إذا وجدت هذه المقالة مفيدة!

أي أسئلة أو ردود الفعل؟
البحث في تويتر: @TimvanBaarsen

Source: https://habr.com/ru/post/ar475384/


All Articles