تم إعداد ترجمة المقال خصيصًا لطلاب الدورة التدريبية "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 { REALTIME, DELAYED, } }
الخصائص في application.yml:
stock: quote: subscription: endpoint: http:
انظر
الوثائق لمزيد من التفاصيل.
مشغل نقطة النهاية التغييرات
غيّرت نقطة النهاية
/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