ربيع الحذاء 2: ما الجديد؟

من أحد المترجمين: على الرغم من مرور عام بالفعل ، لا تنتهي الأسئلة حول الجديد الذي أعطانا التمهيد الثاني هناك. إن كتابة مثل هذا المحتوى من الصفر ليست أذكى فكرة. لذلك ، قررنا ترجمة المقال ، والذي يبدو لنا الأكثر إيجازًا وفي الوقت نفسه مكتمل تمامًا.


تم إطلاق Spring Boot 2 في بداية عام 2018 ، والجميع حريصون على النظر إليه قريبًا. كان هذا الإصدار تتويجا لمدة 17 شهرا من العمل وأكثر من 6800 ارتكاب من 215 شخص مختلف. هناك العديد من الميزات الرائعة التي تستحق المناقشة ، لذلك دعونا نتحدث عن الجديد في Spring Boot 2.


في هذه المقالة سننظر في:


  • قصة الربيع الحذاء
  • ما هو الجديد في ربيع الحذاء
  • ربيع التمهيد 2 دليل الترقية

تاريخ الربيع الحذاء


قبل الخوض في الابتكارات ، أود أن أغتنم هذه الفرصة وأتحدث قليلاً عن تاريخ Spring Boot. في منشور نشر في أغسطس 2013 ، أعلن Phil Webb أول إصدار تاريخي لمشروع يسمى Spring Boot على مدونته.


تم إنشاء Spring Boot لجعل إنشاء تطبيقات وخدمات جاهزة للاستخدام على Spring بسيطًا ، دون أي جهد لا مبرر له. Spring Boot هي نظرة ذاتية على منصة Spring ، والتي تتيح لكل من المبتدئين والمستخدمين ذوي الخبرة من Spring العثور على كل ما يحتاجونه. باستخدام Boot ، يمكنك إنشاء تطبيقات قائمة بذاتها تعمل كـ "java-jar" أو يتم توزيعها بتنسيق WAR أكثر تقليدية.


بعد حوالي 9 أشهر ، في أبريل 2014 ، تم إصدار Spring Boot 1.0. منذ ذلك الحين ، كان هناك العديد من الإصدارات الثانوية والميزات المفيدة الجديدة.


Spring Spring 1.1 (يونيو 2014)


  • الربيع التمهيد كاتب الاختبار
  • المقاييس والصحة النهاية
  • التكوين التلقائي للبحث المرن و Apache Solr و Spring Social و Spring Integration
  • دعم القالب (Freemaker ، Groovy ، و Velocity)

Spring Boot 1.2 (مارس 2015)


  • Servlet 3.1 ، Tomcat 8 & Jetty 9
  • الربيع 4.1
  • SpringBootApplication التعليق التوضيحي
  • دعم البريد الإلكتروني

Spring Boot 1.3 (ديسمبر 2016)


  • ترقية Spring Framework إلى الإصدار 4.2
  • ترقية Spring Security إلى الإصدار 4.0
  • أدوات المطور
  • التخزين المؤقت التكوين التلقائي
  • JARs قابلة للتنفيذ بالكامل ودعم الخدمات

سبرنج بوت 1.4 (يناير 2017)


  • الربيع 4.3
  • السبات 5
  • تحسينات الاختبار
  • بداية التكامل
  • دعم Couchbase و Neo4J

Spring Boot 1.5 (فبراير 2017)


  • قطع الاشجار نقطة النهاية
  • اباتشي كافكا الدعم
  • آليات متقدمة لسحاب السحاب
  • دعم LDAP
  • اختبار التحديثات

ما الجديد في الربيع


إذن ما الجديد في برنامج Spring Boot 2؟ إذا تحدثنا عن أكبر ابتكار ، فهذا تحديث لـ Spring Framework إلى الإصدار الخامس. منذ إصدار Spring Framework 5 في سبتمبر 2017 ، ينتظر معظم المطورين (مثلي) إصدار Spring Boot 2. يحتوي Spring Framework 5 على قائمة كبيرة من الميزات الجديدة ، لكن أود التحدث فقط حول بعض الميزات الأكثر أهمية.


ما هو الجديد في ربيع الإطار 5


دعم إصدار Java 8+


إذا كنت لا تزال ترغب في إنشاء تطبيقات على Spring Framework ، فأنت بحاجة إلى العمل مع إصدار Java 8+. ربما كنت تعتقد أن هذا تغيير مهم للغاية بالنسبة لنا جميعًا ، ولكن بالنسبة لفريق Spring ، فإنه أكثر أهمية. سمح هذا بتحديث قاعدة الكود المصدري إلى Java 8 بكل ميزاته الجديدة مثل تعبيرات lambda أو التدفقات. هذا لا يجعل الكود أكثر قابلية للقراءة فحسب ، بل يحسن أداء النواة.


دعم جافا 9


إذا كنت ترغب في استخدام Java 9 ، فأنت بحاجة إلى الترقية إلى Spring Framework 5 وأيضًا إلى Spring Boot 2. أعرف أن العديد منهم لا يزالون لا يستخدمون أحدث إصدارات Java في الإنتاج ، وهذه فرصة رائعة لتجربة "ألعاب" رائعة جديدة. يجب أن يعمل كل شيء دون مشاكل عند استخدام classpath القياسي ، لكنني قرأت عن بعض الصعوبات عند التبديل إلى وحدات Java 9.


ربيع mvc


على الرغم من أن Spring MVC ليس في مركز القصة في هذه المقالة ، إلا أنه يجدر القول أنه كانت هناك عدة ترقيات لطيفة. لن أتطرق إليهم ؛ لمزيد من التفاصيل ، راجع وثائق Spring Framework 5 .


الربيع webflux


تعد تدفقات البيانات غير المتزامنة أساسية في قصة Spring Framework 5. وهذا نوع مختلف تمامًا من التفكير ، ولكن لحسن الحظ بالنسبة لنا ، ليست هناك حاجة لإعادة تعلم كيفية كتابة التطبيقات بطريقة جديدة تمامًا. Spring WebFlux هو إطار غير متزامن وغير مانع تمامًا ، تم بناؤه من نقطة الصفر ، مما يتيح لك التعامل مع عدد كبير من الاتصالات المتوازية. على الرغم من أن هذه ثورة في النموذج ، فلن يكون من الصعب للغاية البدء.


Webflux


Kotlin الدعم


تمت إضافة دعم Kotlin مرة أخرى في http://start.spring.io ، ولكن Spring Framework 5 لديه دعم متخصص لهذه اللغة التي توفر ميزات مفيدة ، يمكنك أن تقرأ عنها هنا .


تحسينات الاختبار


أكبر تغيير في نظام الاختبار هو الدعم الكامل لـ JUnit 5 Jupiter. سأتحدث عن هذا لاحقًا ، لكن عندما تقوم بتشغيل تطبيق جديد على Spring Boot 2 ، فإنك لا تزال تستخدم JUnit 4 افتراضيًا ، ومع ذلك ، فإن التبديل إلى JUnit 5 هو مهمة تافهة.


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


تحديثات مكتبة الطرف الثالث


مع كل إصدار جديد من Spring Boot ، يتمتع فريق Spring بفرصة تحديث مختلف التبعيات.


  • زعتر 3 *
  • رصيف 9.4
  • Tomcat 8.5
  • السبات 5.2
  • ممر 5
  • الدرج 4

* بداية Thymeleaf لديها الآن المدمج في thymeleaf-extras-java8time.


الأمن والبيانات التفاعلية الربيع


مع الانتقال إلى Spring WebFlux ، أضاف Spring Data دعمًا للتطبيقات ذات تدفقات البيانات غير المتزامنة. يوجد حاليًا دعم غير متزامن لواجهة برمجة تطبيقات Cassandra و MongoDB و Couchbase و Redis. يحتوي Spring Boot على مشغلات POM لجميعهم ، مما يسهل البدء.


هناك أيضًا فرصة لاستخدام Spring Security 5.0 في تطبيقاتنا التفاعلية.


المحرك


لا يعد The Spring Boot Actuator شيئًا جديدًا ، ولكن تمت إعادة كتابته من البداية. إذا لم تكن معتادًا بالفعل على "المشغل" ، فإليك ما تفعله: يعرض نقاط النهاية تلقائيًا للحصول على معلومات حول حالة التطبيق. تم كتابة المشغل في Spring Boot 1.x أعلى servlets ، ومع النهج التفاعلية الجديدة ، احتاج فريق Spring إلى حل يدعم كلا من النهج القديم والتفاعلي. بالإضافة إلى ذلك ، تم إجراء التغييرات التالية على المحرك:


  • إعادة تصميم لدعم servlets والتفاعلية
  • الحالة والتحقق من صحة مفصلة تصبح منفصلة
  • نموذج الأمن المبسط
  • التبديل إلى Micrometer (يشبه SLF4J ، فقط للمقاييس)
  • تحسين هيكل بيانات JSON
  • عملية مبسطة لإنشاء نقاط نهاية مخصصة.
  • نقطة النهاية
  • تضمين التغريدة
  • تضمين التغريدة

من المحتمل أن تكون هناك صعوبات في الترقية بسبب التغييرات في نموذج الأمان ، والتي سنتحدث عنها لاحقًا. بشكل افتراضي ، يمكن الوصول إلى جميع نقاط نهاية الويب عبر مسار /actuator بعنوان URL للنموذج /actuator/{id} . يمكن تغيير مسار / actuator في إعدادات management.endpoints.web.base-path .


هناك كتلة وثائق منفصلة مفصلة لنقاط نهاية API لنهائيات Boot Spring Actuator ، ومن الجدير البدء في مقدمة هذه الأداة.


المساعد الدرج


لقد أحببت دائمًا Gradle ، ويسعدني أن الفريق قرر إعادة كتابة المكون الإضافي لـ Gradle.
يسمح لك المكون الإضافي Spring Boot Gradle بتنفيذ دعم Spring Boot في Gradle ويسمح لك بتعبئة أرشيفات الجر أو الحرب القابلة للتنفيذ ، وتشغيل التطبيقات على Spring Boot وإدارة التبعيات من خلال تبعيات spring-boot. يتطلب المكوّن الإضافي Gradle في Spring Boot إصدار Gradle 4.0 وأحدث.


الابتداء


لبدء العمل مع المكون الإضافي ، تحتاج إلى تحميله على المشروع.


 buildscript { repositories { maven { url 'https://repo.spring.io/libs-milestone' } } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.RC1' } } apply plugin: 'org.springframework.boot' 

إنشاء جرة قابلة للتنفيذ ومحفوظات الحرب


تم استبدال مهمة bootRepackage بـ bootJar و bootWar لإنشاء ملفات jar و war ، على التوالي. كلا المهمتين لهما وظائف أكثر من أمر Gradle مماثل ، مما يتيح الوصول إلى جميع الإعدادات والمنطق.


إدارة التبعية


لم يعد المكون الإضافي Spring Boot Gradle يسحب المكون الإضافي لإدارة التبعية تلقائيًا. بدلاً من ذلك ، يرى المكون الإضافي Gradle Spring Boot أن المكون الإضافي لإدارة التبعية متصل ويستورد الإصدار الصحيح من BOM. يتيح لك ذلك التحكم بشكل أفضل في مكان وكيفية تكوين إدارة التبعية. بالنسبة لمعظم التطبيقات ، فإن إضافة مكون إضافي لإدارة التبعية يكفي:


 apply plugin: 'io.spring.dependency-management' 

يحتوي المكون الإضافي Gradle على الوثائق الخاصة به ، والتي تحتوي على معلومات مفيدة للغاية. أوصي بأن يتبع أي شخص يريد بدء العمل مع Gradle هذا الرابط.


أمان مبسط


أحد الأهداف الرئيسية في Spring Boot 2.x هو تبسيط تكوين الأمان وتسهيل إضافة إعدادات الأمان المخصصة. بشكل افتراضي ، يتم حماية جميع البيانات ، بما في ذلك الموارد الثابتة ونقاط النهاية للمشغل. إذا كان Spring Security في classpath ، فسوف يقوم Spring Boot بإضافة تعليق توضيحي @EnableWebSecurity ، وما آلية المصادقة المحددة التي سيتم استخدامها ستحدد آلية التفاوض على المحتوى من Spring Security.


عندما يقوم المستخدم بتكوين قواعد الأمان الخاصة به ، سيتوقف تكوين أمان Spring Boot القياسي عن العمل. في هذه المرحلة ، سيحتاج المستخدم إلى توضيح جميع قواعد السلامة بأكبر قدر ممكن من الدقة. هذا يعني أن جميع إعدادات الأمان يتم جمعها في مكان واحد ولا توجد مشاكل في ترتيب أوامر المعالجة مع WebSecurityConfigurerAdapters الحالي.


مثال على إعدادات الأمان الفردية:


 http .authorizeRequests() // 1 .requestMatchers(EndpointRequest.to("status", "info")) .permitAll() // 2 .requestMatchers(EndpointRequest.toAnyEndpoint()) .hasRole("ACTUATOR") // 3 .requestMatchers(StaticResourceRequest.toCommonLocations()) .permitAll() // 4 .antMatchers("/**") .hasRole("USER") .and() ... // additional configuration 

  1. /status و /info لا تتطلب إذنًا.
  2. جميع المحركات الأخرى محمية باستخدام دور ACTUATOR .
  3. موقع الموارد الثابتة المشتركة متاح للجميع.
  4. جميع نقاط النهاية للتطبيق الأخرى محمية بواسطة دور USER .

الأمن المحرك


بالنظر إلى إصلاح نقاط النهاية للمشغل ، يجب تمكين نقاط النهاية أو استبعادها ، اعتمادًا على النقاط التي تحتاج إليها. فيما يلي الإعدادات التي تتحكم في هذا ، لقد تغيرت منذ الإصدار 1.x.


 # ENDPOINTS WEB CONFIGURATION (WebEndpointProperties) management.endpoints.web.exposure.include=info,health # Endpoint IDs that should be included or '*' for all. management.endpoints.web.exposure.exclude= # Endpoint IDs that should be excluded. management.endpoints.web.base-path=/actuator # Base path for Web endpoints. Relative to server.servlet.context path or management.server.servlet.context-path if management.server.port is configured. management.endpoints.web.path-mapping= # Mapping between endpoint IDs and the path that should expose them. 

إذا لم تكن متأكدًا من كيفية تكوين هذه الإعدادات ، فقم بوضع إشارة مرجعية على الوثائق الخاصة بإعدادات التطبيق العامة .


دعم HTTP / 2


بشكل لا يصدق ، تم إصدار مواصفات HTTP 1.1 بالفعل في عام 1996. أفترض أنك لا تحتاج إلى تذكير أن الشبكة الحديثة تختلف من جميع النواحي. إذا كنت تريد تطبيق دعم HTTP / 2 في تطبيق ما على Spring MVC أو WebFlux ، فاستخدم المعلمة التالية.


 server.http2.enabled=true 

يعتمد دعم HTTP / 2 على خادم الويب المحدد وبيئة التطبيق ، حيث أن هذا البروتوكول غير معتمد في JDK8. اقرأ المزيد عن هذا في الوثائق .


خيارات التكوين


في Spring Boot 1.x ، تم دعم الربط المسمى الاسترخاء ، بمعنى آخر ، يمكنك تحديد اسم المعلمة بعدة طرق (حالة الجمل ، الشرطة السفلية ، الواصلة) ، وفي النهاية ، تم تعيين القيمة لنفس الخاصية.


يعمل الربط المريح بنفس الطريقة ، وقد تغيرت الطريقة التي تقرأ بها المتغيرات في الكود:


قراءة البيانات


24. التكوين الخارجي


يتيح لك Spring Boot وضع خارج التكوين الخاص بك بحيث يمكنك العمل باستخدام نفس رمز التطبيق في مختلف ... docs.spring.io


متري


تم استبدال متري Spring Boot المخصص بـ Micrometer. تم تطويره من قبل فريق Pivotal ويتكيف بسرعة مع مشاريع Pivotal.


يوفر Spring Boot Actuator التكوين التلقائي لـ Micrometer ، وهي واجهة مترية للتطبيق تدعم العديد من أنواع المراقبة ، بما في ذلك:



ميكرومتر


مزيد من المعلومات حول Micrometer في https://micrometer.io/ .


قد تكون الترقية بسبب ذلك مؤلمة بالنسبة لأولئك الذين يسجلون أطنانًا من المقاييس المخصصة.


جدولة الكوارتز


يحتوي Spring Boot 2 على دعم لمكتبة تنفيذ مهمة كوارتز المجدولة ، والتي يسهل إضافتها باستخدام مشغل spring-boot-starter-quartz. العمل المدعوم على ذاكرة الوصول العشوائي وعلى JDBC.


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

تجمع اتصال HikariCP


تم تغيير تجمع الاتصال القياسي من Tomcat إلى HikariCP. إذا كنت تستخدم spring.datasource.type للحصول على Hikari للعمل في تطبيق Tomcat ، فيمكنك إزالته. وبالمثل ، إذا كنت ترغب في متابعة استخدام تجمع Tomcat ، فقم ببساطة بإضافة التالي إلى التكوين الخاص بك:


 spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource 

أدوات المطور


بشكل افتراضي ، في كل مرة يتم فيها إعادة تشغيل التطبيق ، يتم تسجيل تقرير عن الفرق في التكوينات. بمعنى آخر ، يعرض التقرير التغييرات في التكوين التلقائي للتطبيق التي تحدث عند إجراء تغييرات مثل حذف / إضافة فاصوليا وإعداد معلمات التكوين.


لتعطيل تسجيل هذا التقرير ، قم بتكوين المعلمة التالية:


 spring.devtools.restart.log-condition-evaluation-delta=false 

Kotlin الدعم


في وقت سابق من هذا المقال ، تم ذكر دعم Kotlin الرسمي. هناك أيضًا مجموعة متخصصة من الوثائق لـ Kotlin .


يونيو 5


كما ذكر أعلاه ، لا يزال JUnit 4 يستخدم افتراضيًا في تطبيقات Spring Boot ، وإذا كنت ترغب في الترقية إلى JUnit 5 ، فأنت بحاجة إلى استبعاد JUnit 4 من اختبار spring-boot-starter وإضافة التبعيات اللازمة. ستحتاج أيضًا إلى مكونات إضافية من القائمة أدناه.


 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>${junit-platform.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> 

ربيع التمهيد 2 دليل الترقية


أعتقد أنه لا يمكنك التحدث عن مثل هذه الحقيقة الواضحة وهي أنه مع مثل هذا الإصدار الكبير ، فإن مجرد تغيير رقم الإصدار في الإنتاج ليس هو أفضل طريقة للترقية. بادئ ذي بدء ، أوصي بقراءة دليل الترحيل لـ Spring Boot 2.0 . شخصيا ، وجدت حلا لمعظم مشاكلي في نموذج الأمان المبسط وتغيير المعلمات. يحتوي هذا الدليل على بعض النصائح الرائعة حول ترحيل ملفات المعلمات.


في Spring Boot 2.0 ، تمت إعادة تسمية / حذف العديد من معلمات التكوين ، ويحتاج المطورون إلى تحديث application.properties / application.yml لعكس هذه التغييرات. لتسهيل هذه المهمة ، قدم Spring Boot وحدة نمطية جديدة spring-boot-properties-migrator . عند إضافتك إلى مشروعك على أنه تبعية ، فلن يحلل بيئة التطبيق ويعرض نتائج التشخيص عند بدء التشغيل فحسب ، بل سينتقل أيضًا المعلمات مؤقتًا في وقت التشغيل. هذه خطوة ضرورية عند ترحيل تطبيق:


 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> </dependency> 

لا أعرف ما هو رأيك حول ذلك ، لكنني بالتأكيد سأبدأ في المراسلة باستخدام Spring Boot 2 وأعمل على ترحيل الرمز إلى هذا الإصدار ، ولكن عادةً مع أي إصدار رئيسي ، أنتظر إصدار الإصدار الثانوي التالي. هذا لا ينطبق فقط على Spring ، ولكن أيضًا على العلامات التجارية الأخرى من Apple إلى Pivotal وحتى Angry Birds!

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


All Articles