ما الجديد في Spring Data (كلارا دان فون) نيومان

تم إعداد ترجمة المقال استعدادًا لبدء دورة "مطور في إطار الربيع" .



يمكنك معرفة المزيد عن الدورة من خلال الاطلاع على سجل اليوم المفتوح .










Spring Data Neumann هو الإصدار الأول منذ الانتقال إلى دورة إصدار جديدة مدتها ستة أشهر. سيسمح لنا تقليل الوقت بين الإصدارات بإصدار ميزات جديدة في كثير من الأحيان ، وهذا بدوره سيسرعك أيضًا. في هذا الإصدار ، بالإضافة إلى الوظائف الجديدة ، هناك أيضًا تغييرات مهمة من المحتمل أن تكسر التوافق مع الإصدارات السابقة.


تغيير الإصدارات الرئيسية



بالنسبة للمشاريع المدرجة أدناه ، تمت زيادة رقم الإصدار الرئيسي بسبب التغييرات التي تكسر التوافق في واجهات برمجة التطبيقات العامة أو برامج التشغيل:



  • Spring Data JDBC 2.0 (الإصدار السابق 1.1)
  • تم وصف الترحيل من 1.1 إلى 2.0 في هذا المنشور .
  • Spring Data MongoDB 3.0 (الإصدار السابق 2.2)
  • Spring Data لـ Apache Cassandra 3.0 (الإصدار السابق 2.2)
  • Spring Data Couchbase 4.0 (الإصدار السابق 3.2)
  • Spring Data Elasticsearch 4.0 (الإصدار السابق 3.2)
  • لمزيد من التفاصيل حول التغييرات ، انظر هذا المنشور .


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



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



JDBC



كل تخزين SQL له خصائصه الخاصة التي تتطلب نهجًا خاصًا. لتحسين دعمهم ، تم إجراء تغييرات أثرت على الزيادة في الإصدار الرئيسي. الآن ، AbstractJdbcConfigurationبشكل افتراضي ، يحاول تحديد Dialectقواعد البيانات من المعطى DataSourceأو المسجل DialectResolver. بشكل افتراضي ، تأتي وحدة JDBC مع لهجات لـ H2 و HSQLDB و MySQL و Postgres و MariaDB و Microsoft SqlServer و DB2. Spring Data JDBC يتخطى الآن كل أسماء الجداول والأعمدة افتراضيًا. على الرغم من أن هذا قد يتسبب في تغيير تعليقاتك CREATE TABLEأو تعليقاتك التوضيحية @Column، إلا أن هذا سيمنحك مزيدًا من المرونة في تسمية الكائنات.



MongoDB



الجرة المفردة المزودة ببرامج تشغيل لـ MongoDB (mongo-java-driver) مقسمة إلى عدة: -sync و -reactivestreams ، مما يسمح لك باختيار برنامج التشغيل الذي تحتاجه فقط. أي أن كلاً من برامج تشغيل MongoDB المتزامنة والتفاعلية أصبحت الآن تبعيات اختيارية يجب إضافتها يدويًا. مع الترحيل إلى برامج التشغيل الجديدة ، تمت إزالة بعض واجهات برمجة التطبيقات (API) التي تم إيقافها بالفعل بشكل دائم ، مما أثر على فئات التكوين مثل AbstractMongoConfigurationمساحات أسماء XML التي توفرها Spring Data. للحصول على التفاصيل ، راجع قسم الترقية في الوثائق.



أباتشي كاساندرا



لا يقوم التحديث الذي طال انتظاره لبرامج تشغيل Apache Cassandra إلى 4.0 بتحديث الحزمة وهيكل البيانات فحسب ، بل يغير أيضًا السلوك في الكتلة وفي معالجة الجلسة. وقد أدى ذلك إلى تغييرات كبيرة في التكوين تؤثر على تكوين XML وقد تؤثر على التكوين في التعليمات البرمجية لبعض السيناريوهات المعقدة (أصعب من الإعداد الافتراضي البسيط AbstractCassandraConfiguration).



Couchbase



بعد Couchbase SDK ، قمنا بالترقية من الإصدار 3.x إلى 4.x ، والذي أضاف إدارة تلقائية للفهرس ودعم المعاملات. اقرأ المزيد على مدونة Couchbase .



Elasticsearch



تمت إضافة دعم لواجهة برمجة تطبيقات عميل HTTP و SSL والوكيل. تم إجراء عدد من التغييرات أيضًا ، بما في ذلك تحسين وإزالة واجهة برمجة التطبيقات التي تم إيقافها ، والتي أثرت على التغيير في رقم الإصدار الرئيسي. ويشمل وحدة Elasticsearch الآن الوثيقة، التي تشمل Get-، Index-و Search-Requestsالذي يتيح لك استخدام أنواع مثل SearchHit، SearchHitsو عندما رسم الخرائط SearchPage.



الآن دعنا ننتقل إلى الابتكارات.



مستودعات مع دعم coroutines Kotlin



يستمر إصدار Neumann في البناء على الدعم المقدم من Kotlin coroutines الذي بدأ في إصدار Moore السابق من خلال إضافة دعم لهم في المستودعات.



يتم الحفاظ على Coroutines من خلال مستودعات بيانات الربيع التفاعلية. يمكنك الآن استخدام طرق الاستعلام التفاعلية أو كتابة الوظائف المعلقة الخاصة بك.



interface StudentRepository : CoroutineCrudRepository<Student, String> {
    suspend fun findOne(id: String): User
    fun findByLastname(firstname: String): Flow<Student>
}


@Primary- التسجيلات وكلمة البحث



يعمل هذان التغييران الصغيران على تحسين استرجاع وحدات تخزين المستودعات وتسمية طرق الاستعلام. يتم الآن أخذ التعليق التوضيحي @Primaryعلى مستودعات الواجهة في الاعتبار في تكوين الفول ، مما يساعد الحاوية على حل التبعيات. يمكنك الآن استخدام بادئة لطرق الاستعلام "search"، بالمثل "find". يمكن الآن كتابة طرق "search...By..."، على سبيل المثال searchByFirstname.



على الرغم من أن هذا تم إجراؤه لقواعد البيانات مثل Elasticsearch ، دعنا ننتقل ونرى كيف search...By...يمكنك استخدام R2DBC في Spring Data.



إنشاء استعلامات R2DBC



حتى الآن ، استخدمت Spring Data R2DBC التعليقات التوضيحية لأساليب الاستعلام ، @Queryباستثناء الطرق الافتراضية التي يتم عرضها من خلال الواجهات *.Repository. يعمل الآن إنشاء الطلبات حسب اسم الطريقة بشكل مشابه للوحدات النمطية الأخرى:



interface StudentRepository extends ReactiveCrudRepository<Student, Long> {

	Flux<Student> searchByLastname(String lastname); (1)
}


هذا يعادل:



@Query("select id, firstname, lastname from customer c where c.lastname = :lastname")


إنشاء ترقيم الصفحات والاستعلام لـ JDBC



يدعم Spring Data JDBC 2.0 المزيد من قواعد البيانات العلائقية. نجري الآن اختبارات التكامل على H2 و HSQLDB و MySQL و MariaDB و PostgreSQL و DB2.



بالنسبة لقواعد البيانات هذه ، ندعم إنشاء الاستعلام وتقسيم الصفحات. على سبيل المثال:



interface StudentRepository extends PagingAndSortingRepository<Student, Long> {

	Page<Student> findByLastname(String lastname);
}


في هذا الإصدار ، نواصل أيضًا التحرك نحو NoSQL ، بدءًا بـ MongoDB وطريقة جديدة لتعديل المستندات.



تجميعات تحديث MongoDB



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



AggregationUpdate update = Aggregation.newUpdate()
    .set("average").toValue(ArithmeticOperators.valueOf("tests").avg())
    .set("grade").toValue(ConditionalOperators.switchCases(
        when(valueOf("average").greaterThanEqualToValue(90)).then("A"),
        when(valueOf("average").greaterThanEqualToValue(80)).then("B"),
        when(valueOf("average").greaterThanEqualToValue(70)).then("C"),
        when(valueOf("average").greaterThanEqualToValue(60)).then("D"))
        .defaultTo("F")
    );

template.update(Student.class)
    .apply(update)
    .all();


كما ستستفيد Spring Data MongoDB بلا شك من الدعم المضاف مؤخرًا للكائنات المضمنة في الوحدات النمطية الأخرى.



دعم الأنواع المضمنة في Apache Cassandra



يدعم Apache Cassandra الآن تعيين النوع المدمج ، والذي كان متاحًا منذ فترة طويلة في Spring Data JDBC . في نموذج المجال ، يتم استخدام الكائنات المضمنة لكائنات القيمة التي يتم تخزين خصائصها في جدول واحد. في المثال التالي، Student.nameهناك الشرح فوق الحقل @Embedded، والذي يسبب كافة المجالات الفئة ل Nameيتم تخزينها في جدول Studentيتكون من ثلاثة أعمدة ( student_id، firstnameو lastname):



public class Student {

    @PrimaryKey("student_id")
    private String studentId;

    @Embedded(onEmpty = USE_NULL)
    Name name;
}

public class Name {
    private String firstname;
    private String lastname;
}


تدقيق Elasticsearch



نظرًا لأن الوجود في ElasticSearch idليس معيارًا كافيًا لتحديد ما إذا كان الكائن جديدًا ، فمن الضروري Persistableتوفير معلومات إضافية أثناء التنفيذ باستخدام الطريقة isNew():



@Document(indexName = "person")
public class Person implements Persistable<Long> {

    @Id private Long id;
    private String lastName;
    private String firstName;

    @Field(type = Date)
    private Instant createdDate;
    private String createdBy

    @Field(type = Date)
    private Instant lastModifiedDate;
    private String lastModifiedBy;

    @Override
    public boolean isNew() {
        return id == null || (createdDate == null && createdBy == null);
    }
}


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



Neo4j



يدعم Spring Data Neo4j الآن بناء جملة استعلام Neo4j 4.0 مع المعلمات. تم إهمال بنية العنصر النائب سابقًا وتمت إزالتها بالكامل الآن. تعتمد الوحدة الآن على أحدث برامج تشغيل Java Neo4j-OGM و Neo4j لتحسين إمكانية التشغيل البيني مع أحدث Neo4j.



هناك أيضًا عمل نشط لدعم التفاعل لقواعد بيانات الرسم البياني ودمجها في Spring Data مع Neo4j RX (على الرغم من أن هذا لم يتم تضمينه في الإصدار الحالي ، إلا أنه جاهز بالفعل للتضمين في الإصدار التالي).



أباتشي جيود / في إم وير تانزو جيمفاير



يتم دمج وحدات Spring Data لـ Apache Geode و VMware Tanzania GemFire ​​( spring-data-geodeو spring-data-gemfire) في مشروع واحد تحت عنوان SDG. تم تحديث Apache Geode إلى 1.12.0 و GemFire ​​إلى 9.10.0 ، والذي يعتمد بدوره على Apache Geode 1.12. بالإضافة إلى ذلك ، تقوم SDG بتجميع وتشغيل إصدارات JDK من 8 إلى 14.



تدعم SDG الآن نشر أحداث التحويل التلقائي ، والتي تعين حدث Cache TransactionEvent من GemFire ​​/ Geode Cache إلى ApplicationEvent المناسب في السياق.



من الممكن الآن أيضًا إيقاف إرسال الأحداث مؤقتًا على AEQ الذي تم تكوينه باستخدام SDG. أيضًا ، عند إنشاء تطبيقات تستند إلى GemFire ​​/ Geode Locator باستخدام شرح SDG ، @LocatorApplicationيمكنك التخصيصمحدد موقع للاتصال بالمحددات الأخرى ، وبالتالي إنشاء مجموعة مرنة للغاية ومتوفرة.






تعلم المزيد عن الدورة.






اقرأ أكثر






All Articles