spring - كيفية ترقية بشكل انتقائي التبعية في التمهيد الربيع؟(عينة الحالة: الربيع البيانات)



maven spring-boot (1)

يمكنني استخدام الربيع جبا البيانات بداية من التمهيد الربيع (1.4.1). أنه يحتوي على بيانات الربيع جبا 1.10.3. ومع ذلك، ولست بحاجة إلى استخدام @DomainEvents التعليقات التوضيحية التي لا توجد حتى الآن في هذا الإصدار الربيع البيانات. عندما أحاول إضافة أحدث إصدار من جبا البيانات الربيع أحصل على أخطاء عند تشغيل التطبيق الخاص بي.

بلدي بوم سبيل المثال:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.1.RELEASE</version>
        <relativePath/>
</parent>

<dependencies>
        ...
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        ...
</dependencies>

عندما أحاول أن أضيف أحدث نسخة من جبا البيانات الربيع مثل ذلك:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.6.RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>

أحصل على إورس عندما أبدأ التطبيق الخاص بي. أخطاء مثل هذا:

Caused by: java.lang.NoSuchMethodException: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.<init>()
  at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_121]
  at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_121]
  at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
  ... 53 common frames omitted

كيف يمكنني استخدام الإصدار الأحدث من جبا البيانات الربيع؟ أحتاج @DomainEvents في بلدي التطبيق. شكر!


هناك طرق متعددة للبشرة القط هنا أن تأتي مع مختلف صعودا وهبوطا:

الخيار 1: الترقية إلى أحدث إصدار من التمهيد

الطريقة الأكثر أمانا عموما هو الترقية إلى إصدار أحدث من التمهيد الربيع. ونحن ننصح عموما أن يكون على أحدث نسخة طفيفة في الجيل الرئيسي الحالي. في حالتك 1.5 هو أصغر قاصر، لذلك نوصي للترقية إلى أن (حاليا 1.5.6). وعادة ما يتحقق ذلك فقط عن طريق تغيير رقم إصدار بوم الأصل الذي تستخدمه.

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.6.RELEASE</version>
</parent>

الايجابيات

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

سلبيات

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

الخيار 2: رفع مستوى التبعيات بشكل فردي

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

<properties>
  <spring-data-releasetrain.version>Ingalls-SR6<spring-data-releasetrain.verion>
</properties>

في حالة البيانات الربيع كنت رفع مستوى القطار الافراج بأكمله في وقت واحد هنا بحيث لا تذهب إلى عدم التوافق بين وحدات البيانات الربيع داخليا إذا كنت مجرد ترقية وحدة واحدة. وهذا هو أحد الأسباب الرئيسية التي يوصى بها هذا "الترقية من قبل الملكية" على إعادة إعلان التبعية في إصدار أحدث صراحة (والتي لا تزال يمكن أن يكون الملاذ الأخير في بعض الحالات).

الايجابيات

  • الترقية هي عملية أكثر انتقائية بكثير. على النقيض من النهج السابق، كنت لا تخاطر بالارتقاء بمشاكل الترقية من تبعيات لا علاقة لها.

سلبيات

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

الخطوات المقترحة

في الممارسة العملية أحاول عادة الخطوات التالية:

  1. استخدم الخيار 1 للترقية بأقل قدر ممكن من التأثير. إذا نجح ذلك: تم.
  2. إذا كان ذلك يسبب مشاكل، تقييم مدى صعوبة استبدال التكوين التلقائي مع التكوين اليدوي (عادة يتطلب قليلا من البصيرة والخبرة مع التمهيد.إذا كان ذلك ناجحا: تم.
  3. استخدم الخيار 2 للترقية إلى إصدار أحدث من التمهيد وتقييم تأثير هذا على رمز التطبيق الخاص بك.

2 و 3 قد تكون قابلة للتبديل بناء على ما تفضله شخصيا أو سياسة ترقية الإعالة التي حددتها لفريقك.

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





dependency-management