اليوم في الاستوديو الافتراضي لدينا ، المتحدث الأكثر شهرة في العالم لـ Spring هو Josh Long.
تفتح تقاريره مؤتمرات Java حول العالم. إنه هو الذي يجيب على أسئلة المجتمع ، ولا يفعل نصائح الربيع على YouTube ، وهو "هذا الأسبوع في الربيع" الذي نقرأه كل أسبوع وأكثر من ذلك بكثير.
بالمناسبة ، سمح جوش باستخدام جميع المواد الموجودة في "هذا الأسبوع في جافا" ، لكنه يفعل ذلك بمثل هذا الحجم والعمق لدرجة أن هذه البيانات لم تتمكن أبدًا من ضغطها إلى تنسيق "15 دقيقة من الملخص".
في بعض الأحيان يبدو أنه في جميع المدن في نفس الوقت ، يقرأ التقارير ويكتب المقالات في لحظة واحدة. اليوم سنكتشف كيف يفعل ذلك. نتعرف على "اختصاص القانون" ، وأسباب حيوية الربيع المذهلة وكيف تمكن من العيش لسنوات عديدة دون إعادة كتابة عالمية من الصفر والحيل الأخرى المثيرة للاهتمام.

الأعضاء

جوش لونج ، محامي مطور الربيع في Pivotal

إيفجيني تريفونوف ، أوليغ شيروخين - محررو مجموعة JUG.ru
يعلم الجميع أنك تسافر كثيرًا ، ولكن سيكون من المثير للاهتمام أن تعطي بعض الإحصاءات - كم عدد المؤتمرات التي حضرتها العام الماضي ، وعدد الرحلات التي قمت بها وما شابه ذلك.
سؤال جيد. لدي جدول يسجل جميع الاجتماعات التي أحضرها لهذا العام. يساعدني مساعدتي ، تاشا ، في تنظيم الجدول الزمني وهذا الجدول. لذا ، دعنا نفتح هذا الجهاز اللوحي على الهاتف ... مائتان وأربعون. في عام 2018 ، في الوقت الحالي ، حضرت 240 حدثًا مختلفًا. تتم بعض هذه الاجتماعات عبر الإنترنت (مثل اجتماعاتنا) ، ولكن يجب علي السفر إلى معظم. خلال هذا العام ، طرت أكثر من نصف مليون ميل. دعني أتحقق من المسافة من الأرض إلى القمر ... وهي 239 ألف ميل ، حتى أتمكن من الطيران إلى القمر والعودة.
"إلى القمر والعودة من الربيع." عنوان جيد لكتاب تولكين.
هل تقدم لك شركات الطيران عروض خاصة لأنك تسافر كثيرًا؟
حسنًا ، أنا لا أشكو من الخدمة. أسافر كثيرًا مع الخطوط الجوية المتحدة ولديهم برنامج الخدمات العالمية. يمكنك الوصول إلى هناك فقط عن طريق تلقي دعوة - لا يمكنك أن تطلبها بنفسك ، وما هي المعايير التي لا تعرفها. كل عام يدعون الناس الذين يسافرون في أغلب الأحيان. في العام الماضي ، قال أحدهم إنه اختار 1٪ من أكثر العملاء تكرارًا حول العالم. أو ربما يقومون بالتصفية حسب مقدار التكاليف. بطريقة أو بأخرى ، يعاملونني بشكل جيد للغاية. هذا جميل. ولكن حتى في هذه الحالة ، أعتقد ، بالنسبة لمعظم الناس ، أن الرحلات الجوية عبء. إنها تهمني بالتأكيد. أنا لا أسافر على متن الرحلات الجوية بأنفسهم ، ولكن لألتقي بأشخاص يستخدمون الربيع. كنت سأنتقل إذا كانت هناك فرصة كهذه. ستكون الحياة أبسط بكثير وأكثر إثارة للاهتمام.
سبب وجيه لانتظار Hyperloop.
نعم ، ولكن هذا سيتعين عليه الانتظار لفترة طويلة.
لنتحدث عن موضوع أقرب إلى الربيع. تتحدث عنه مع الناس حول العالم - هل هناك اختلافات إقليمية في انتشاره؟
لن أقول. كان Spring دائمًا مفتوح المصدر بنسبة 100٪ ، وطالما أن الناس يكتبون برامج تعمل على الإنترنت ، فإن Spring سيظل ناجحًا حول العالم. صحيح أن هناك مشاريع أخرى مفتوحة المصدر تكون الخصوصية الإقليمية ملحوظة فيها. لا يمكنني تأكيد الإحصاءات الآن ، ولكن يبدو لي أن GridGain شائع جدًا في روسيا.
نعم هذا صحيح.
وفي الصين ، تحظى MyBatis بشعبية كبيرة. في الولايات المتحدة وأوروبا ، لم أرها منذ 10 سنوات ، وفي الصين شائعة مثل الربيع. وفي الواقع ، لا يوجد خطأ في MyBatis ، فهو سريع وقوي - فلماذا لا تستخدمه؟
لقد قمنا بمشروع يعمل فيه MyBatis مع GridGain ، فهو موجود في الداخل.
(يضحك) إذن أنت تستخدمهما - عظيم! أنا أحب كل من هذه التقنيات. لم يكن هناك دعم طبيعي لـ MyBatis ، وسألت باستمرار العديد من الشركات الضخمة في الصين التي تقوم بأشياء مذهلة - لماذا احتاجوا إلى MyBatis مع Spring؟ هناك العديد من الخيارات الأخرى ، يعمل Hibernate بشكل جيد للغاية ، ولا يتم استخدام MyBatis عمليًا في الغرب. ونتيجة لذلك ، قررت أنه بمجرد استخدام البرنامج ، فمن الضروري ضمان تشغيله العادي. إذا ألقيت نظرة على مصادر Spring Boot Starter لـ MyBatis الآن ، فسترى اسمي هناك. أردت أن يكون أولئك الذين يحتاجون إلى هذا البرنامج في الشرق قادرين على العمل بشكل طبيعي معه. بشكل عام ، ينبع جزء كبير من عملي من نوع الاكتشافات التي أجريها في بلدان مختلفة أثناء رحلاتي.
أنت محامي مطور محوري لمشاريع الربيع. ماذا يعني هذا عمليًا؟ ماذا تفعل بالضبط؟
سؤال صعب. انتشر مفهوم Developer Advocate بفضل Apple ، وعلى وجه الخصوص ، Microsoft. بدأ الأمر قبل حوالي 30 عامًا ، عندما أدركت شركة مايكروسوفت أن المطورين هم الذين لديهم القوة الحقيقية. إذا كنت تريد أن يكون النظام الأساسي الخاص بك ناجحًا ومفيدًا ، فأنت بحاجة إلى مطورين لإنشاء أشياء قيمة جديدة على هذا النظام الأساسي. وفقًا لذلك ، يجب عليك إقناعهم بفوائد منصتك. بدأت Microsoft في محاولة تحفيز المطورين بعدد من الطرق المختلفة. لقد جعلوا Visual Studio رخيصًا جدًا ، أي أنهم قدموا أدوات بأسعار معقولة. لقد قاموا بإنشاء الكثير من واجهات برمجة التطبيقات المثيرة للاهتمام والتي يمكنك العمل معها تحت Windows. بشكل عام ، أدركت Microsoft أنه من الضروري التعاون مع المجتمع. الناس لا يثقون في البرمجيات ، ولكن الآخرين. الناس ليس لديهم ارتباط عاطفي بالبرنامج. يمكنك أن تتخيل بقدر ما تريد أن تصبح مشهورًا ببساطة عن طريق كتابة برنامج في عزلة في غرفتك بالفندق ، وأي شخص يحتاج إليه سيجد الوثائق بنفسه. ولكن في الواقع هذا لا يحدث عادة. جزء كبير من مسؤولياتي هو التواصل مع الناس من المجتمع. أستمع إلى ما يقوله الناس وأحضره إلى المطورين ، ثم أنقل إلى المجتمع ما يقوله المطورون. وبعبارة أخرى ، أنا نوع من المركبات.
فريق الربيع غريب وجميل. إنها بالفعل أكثر من عقد ونصف. في البداية ، كانت صغيرة جدًا ، وشارك المطورون أنفسهم في الاستشارات. لقد عملوا باستمرار مع فرق أخرى ، ومساعدتهم على إنشاء برامجهم الخاصة ، أي أنهم حلوا مشاكل حقيقية ، ولم يجلسوا مغلقين في برج عاجي. لم يتظاهروا بأنهم يعرفون مسبقًا ما هو البرنامج المطلوب ، لكنهم كتبوا ما يحتاجه الآخرون حقًا ، وكانت فائدتهم دائمًا معيارهم الرئيسي. شاركوا مع عملائهم معاناتهم في حل المشاكل. نحن لا نخلق أشياء عديمة الفائدة. وهذا ، كما تعلم ، غالبًا ما يمثل مشكلة عند إنشاء البرامج. في الواقع ، كان فريق الربيع الأول يتألف بالفعل من Developer Advocates. لم تكن مشابهة لما يمثله المبرمجون عادة. نعم ، لقد كانوا مطورين موهوبين ، لكنهم في نفس الوقت ناقشوا بفارغ الصبر أفكارهم مع أشخاص آخرين ، وحضروا العروض التقديمية ، والتعرف على أشخاص ، وأجروا معارف ، وأجروا حوارات. وبفضل هذا ، اكتسب Spring بسرعة شعبية كبيرة.
المشكلة هي أن هذا النهج لا يتطور بشكل جيد. من المستحيل على جميع المطورين قضاء نصف وقتهم في السفر والدردشة والاجتماع. في الوقت الذي انضممت فيه إلى الفريق ، كنت بالفعل أكتب رمزًا لـ Spring ، لأنه مشروع مفتوح المصدر. بالإضافة إلى ذلك ، سبق لي أن نشرت كتبًا ، وكتبت مقالات وقدمت عروضًا تقديمية. لذلك حاولت بالفعل تقديم Spring إلى المجتمع بأفضل طريقة ممكنة وإعطاء أكبر عدد ممكن من الناس الفرصة للتعرف عليه. لذلك ، دعاني فريق الربيع للقيام بنفس الشيء ، ولكن على أساس مستمر وللمال. أعتقد أنني 80٪ Developer Advocate و 20٪ مبرمج ، في حين أن بقية فريق Developer Advocate هم 20٪ و 80٪ مبرمجين.
بشكل عام ، وظيفتي هي البقاء على اتصال مع المجتمع ، وهناك العديد من الطرق المختلفة للقيام بذلك. أنا أكتب كتابي السادس ، يسمى كتاب الربيع التفاعلي. تم نشر ملفي السابق بواسطة O'Reilly يسمى Cloud Native Java. لقد صنعت الكثير من دروس الفيديو التي يمكنك مشاهدتها على Safari Books Online ، كل منها يستغرق 4-5 ساعات. بالإضافة إلى ذلك ، كل يوم أربعاء أنشر مقاطع فيديو نصائح الربيع على YouTube ، كل منها مخصص لجانب ضيق محدد من النظام البيئي. عادة ما تستمر من 45 دقيقة إلى ساعة ، كل عام أقوم به موسمان على الأقل ، وأحيانًا ثلاثة. وهكذا ، من سنة إلى أخرى ، أقوم كل أسبوعين بإعداد مادة كافية لتقرير كامل في المؤتمر. بدءًا من كانون الثاني (يناير) 2011 ، كل يوم ثلاثاء ، دون استثناء ، أقوم بإجراء إدخال جديد للمدونة ، "هذا الأسبوع في الربيع" ، حيث أقوم بمراجعة كل ما هو مثير للاهتمام في النظام البيئي. لدي أيضًا مدونات أخرى ، في الأمسيتين الأخيرتين كنت أقوم بذلك بالضبط. بالإضافة إلى ذلك ، أكتب أيضًا التعليمات البرمجية وأتحدث في المؤتمرات. لذا فإن عملي يشمل الحد الأقصى لمجموعة متنوعة من الأنشطة - ولكن يمكنني أن أقصر نفسي على شيء واحد فقط. هناك أشخاص يقومون فقط بالتدوين أو إنشاء مقاطع فيديو ، وهم يقومون بذلك بشكل جيد للغاية. البعض لا يسافرون ، لكنهم يعقدون ندوات عبر الإنترنت. نهجي يختلف عن الآخرين ، ولكن في النهاية ، كل هذا النشاط يسعى إلى نفس الهدف.
بالمناسبة ، تشمل مسؤولياتي أيضًا إنشاء برامج تعليمية ، وتدوين ، وما إلى ذلك. بالنسبة لي ، الأمر صعب للغاية ويمكن أن يستغرق وقتًا تعسفيًا. كم هو صعب عليك؟ دعنا نقول كم من الوقت يستغرق لإعداد فيديو نصائح الربيع؟
نسيت أن أقول - لقد حصلت على بودكاست جديد ، لم يخرج منه شيء بعد ، ولكن تم إعداد سبع مقابلات بالفعل :-) أما بالنسبة لوقت التحضير ، فإنه يحدث بطرق مختلفة. إذا كنت بالفعل على دراية بالموضوع الذي قررت أن أتناوله ، فعندئذ يتعين علي فقط الجلوس وتسجيل كل شيء مرتين أو ثلاث مرات - دائمًا ما أرتكب الكثير من الأخطاء. يستغرق حوالي أربع ساعات مرة واحدة في الأسبوع ، أي قليلاً. ولكن في حالات أخرى هذا لا يكفي. في بعض الأحيان أقوم بدراسة مشكلة وأقوم بتدوين الملاحظات عليها لعدة شهور ، ثم أقرر أنه نظرًا لأن هذا العمل قد تم بالفعل ، فلماذا لا تنشئ مقطع فيديو لهذه الملاحظات. أنا أتعلم باستمرار ، كما أنت على الأرجح. لكن الحالات التي أحتاج فيها إلى تعلم شيء محدد للفيديو نادرة. الجزء الأصعب هنا هو تحديد ما تحتاجه للجلوس والخوض في الموضوع ، وليس عملية الدراسة نفسها.
في بعض الأحيان ، يطلق المبرمجون من فريقنا شيئًا لم يبتكره أحد من قبل. في هذه الحالة ، سيكون لدى الناس بالطبع أسئلة وستسقط هذه الأسئلة افتراضيًا على المبرمجين. ويمكنني إنشاء مقطع فيديو حيث سيتم شرح كل شيء ، وتحميله مسبقًا على الشبكة حتى يتمكن الناس من التعرف على بعضهم البعض. من الواضح ، في هذه الحالة ، يجب أن أتعلم أيضًا - نظرًا لأننا نتحدث عن شيء جديد تمامًا.
كم عدد المشاريع الموجودة حاليا في الربيع؟
سؤال جيد. أعتقد بضع عشرات. هناك وحدات متخصصة للغاية ، تم تطوير بعضها من قبل المجتمع ، وبعضها بواسطة فريق الربيع في Pivotal ، أو الشركات الكبيرة الأخرى. تم تقديم كل دعم Google GCP في Google ، ودعم Microsoft Azure - في Microsoft. ولكن يتم تطوير الكثير - مثل MyBatis ، على سبيل المثال - من قبل المجتمع. بالإضافة إلى ذلك ، لدينا وحدات منفصلة ، على سبيل المثال ، Spring Data Neo4j ، وهي وحدة لقاعدة بيانات الرسم البياني Neo4j. إنه جزء من مشروع Spring Data ، ولكن تم ذلك بالتعاون مع Neo4j ، قاموا بالعمل الرئيسي في هذا المشروع ، لقد عاش للتو في مستودع git الخاص بنا. هناك العديد من هذه الأمثلة.
بالنسبة إلى Boot Boot ، لدينا آلية رائعة تعمل معها تسمى التكوين التلقائي. إنه يوفر للناس طريقة مناسبة لتجميع ما سيعملون عليه. يقوم الشخص ببساطة بتنزيل ملف JAR في مسار صفه ، وتتم إضافته تلقائيًا إلى تطبيق Spring Boot App قيد التشغيل. هناك الكثير من عمليات التهيئة التلقائية في النظام البيئي ، لا أعرف جزءًا مهمًا. يعملون مثل الإضافات.
وكيف نفهم المستخدمين في كل هذه المشاريع المتنوعة؟ هل هناك بنية أو فكرة عامة؟
على الأرجح ، لن تحتاج إلى جميع المشاريع. حدد هدفك ، وحدد المشروع المطلوب بناءً على ذلك. لا يعجبني عندما يحاول الناس "تعلم الربيع" - هذا تمرين لا معنى له. يجب طرح السؤال على النحو التالي: أحتاج إلى كتابة REST API. خطوتي الأولى هي التوجه إلى spring.io/guides ، حيث يمكنك العثور على دليل بسيط وبأسعار معقولة يستغرق 10-15 دقيقة. سيكون لديك كل ما تحتاج إلى معرفته: ما هو الرمز الذي تكتبه ، في أي مجلد ، وكيفية القيام بذلك في IntelliJ أو في Eclipse أو في أي شيء آخر. نحاول شرح كل شيء بتفصيل كبير ولا نتجاهل أي شيء ، لأننا نريد أن تكون هذه الأدلة متاحة للجميع. مهما فعلت - JMS ، Neo4j ، الأمن ، قواطع الدائرة ، كافكا - لدينا دليل منفصل لكل موضوع. حدد مهمتك وحدد الدليل المناسب. لا تحتاج إلى التفكير في Spring ، ولكن في ما ستدمج به نظامك - Spring هو مجرد أداة تسمح بهذا التكامل. لذلك ، ليس هناك جدوى من "تعلم الربيع" - تحتاج إلى استخدامه إذا كان بإمكانه تبسيط مهمتك المحددة.
ما هي أكثر المشاريع الواعدة في الربيع برأيك؟ أم الأكثر استخفافًا؟
تحظى مكتبة Spring Retry بشعبية كبيرة. تم تطويره في الأصل في Spring Batch. لا أعرف ما إذا كنت قد استخدمت Spring Batch من أي وقت مضى ، فهو يسمح لك بمعالجة كميات كبيرة من البيانات المنقولة بالتسلسل ، على سبيل المثال ، المستندات من نظام الملفات ، ملفات XML ، CSP وما إلى ذلك. في حالة استخدام واحدة لهذه الأداة ، تقرأ سجلاً ثم تكتبه - على سبيل المثال ، من خدمة ويب إلى قائمة انتظار الرسائل. قد تستغرق معالجة هذه البيانات ساعات ، وسيكون من غير المرغوب فيه للغاية إذا قام النظام ، بسبب خطأ واحد في النهاية ، بالتراجع عن كل العمل المنجز أثناء الليل. لا يمكنك فعل ذلك. يعمل Spring Batch مع حزم البيانات ؛ ولا يعالج السجلات ليس واحدًا ، بل عشرة أو ألف. حتى إذا فقدت معالجة آلاف السجلات ، سيتم حفظ كل ما تبقى. بالإضافة إلى ذلك ، عند كتابة أنظمة الحزم ، عليك أن تضع في اعتبارك أنك بحاجة إلى الوصول إلى خدمات أخرى قد تفشل. هناك Spring Retry لهذا. تتيح لك هذه المكتبة إجراء مكالمات متكررة للخدمات. بالإضافة إلى ذلك ، يمكنك استخدام سرعة الغالق الأسي. بالإضافة إلى Spring Batch ، يتم استخدام Spring Retry أيضًا في Spring Integration و Spring Cloud Stream و Spring Cloud Data Flow. في الأخيرين ، ندعم Spring Retry بسبب ارتباطه ببعض الأشياء الأخرى. وبالتالي ، يتم استخدام هذه المكتبة في العديد من مشاريع الربيع ، ولست متأكدًا من أن الجميع يعرفها. Spring Retry هي مكتبة شائعة الاستخدام يتم تجاهلها ببساطة في بعض الأحيان. بشكل عام ، لدينا العديد من الأشياء التفاعلية. هم عادة الأكثر إثارة للاهتمام.
لماذا رد الفعل بالضبط؟
لدينا تفاعل في كل مكان. ميزة Spring هي أنه يمكنك بدء المشروع وإنهائه. أعلنا هذا الأسبوع أننا سندعم مشروع Facebook RSocket . هذا تناظري تفاعلي تمامًا لـ gRPC ، ولكنه أكثر مرونة بشكل ملحوظ. يمكن استخدامه للناشر / الفرعية ، دفق البيانات ، طلب / استجابة العميل - بشكل عام ، مع ذلك يمكنك تنفيذ العديد من أنماط المراسلة المختلفة. ويتم استخدامه على Facebook. هناك حزمتان ، واحدة في C ++ ، والأخرى في Java. مكتوب في Java باستخدام Reactor ، مكتبتنا التفاعلية. تستخدم Salesforce. بالطبع ، هناك خيارات أخرى. هل سمعت عن gRPC من Google؟ إنها ذات جودة عالية ومثيرة للاهتمام ، ولكنها ليست تفاعلية ، بشكل افتراضي لا تعمل بشكل جيد مع الأنواع التفاعلية. لا يوجد هذا العيب في Salesforce gRPC. لديه مترجم يقوم بإنشاء الخدمات على أساس مفاعل الربيع. لذلك تمكن كل من Facebook و Salesforce من توسيع نطاق المفاعل وفقًا لاحتياجاتهم.
المفاعل نفسه هو واحد من أكثر مشاريعنا إثارة للاهتمام. ظهر RxJava في وقت سابق ، لكن Reactor كان أول من قدم دعم الخيط التفاعلي. حدث هذا إلى حد كبير لأن المبرمج الرائع ديفيد كارنوك ، مدير مشروع RxJava ، عمل معنا في المفاعل. لذلك جزء كبير من كل الأشياء الجديدة والمثيرة للاهتمام التي حدثت في نظامنا البيئي لمست المفاعل بطريقة أو بأخرى. وبفضل هذا ، أصبح المشروع جذابًا للغاية للشركات التي تنشئ أنظمة كبيرة. يكمن المفاعل أيضًا في إطار Spring WebFlux. أيضًا ، استنادًا إلى Reactor ، قدمنا دعمًا للرسائل التفاعلية ، ومآخذ الويب التفاعلية ، و Stream Cloud Stream ، وقواطع الدوائر التفاعلية ، وما إلى ذلك - يمكن دمج جميع هذه المكونات في التطبيقات التفاعلية. يمكنك بالطبع استخدام Spring فقط ، لكنني أفضل استخدام النظام البيئي بأكمله مع هذه الأنواع التفاعلية.
بالإضافة إلى ذلك ، قمنا مؤخرًا بالإعلان عن R2DBC - API الخاصة بنا للوصول إلى البيانات المستندة إلى SQL لمحركات الأقراص التفاعلية. رد الفعل JDBC غير موجود حتى الآن. المشكلة هي أنه إذا كنت تستخدم رمزًا تفاعليًا ، فلا يمكنك استخدام القفل. إذا تم استخدام القفل ، فيجب زيادة هذا التفاعل ، مما يزيد من عدد الخيوط. وهذا يتناقض مع الهدف الأصلي ، لأننا نريد فقط تجنب التوسع من خلال زيادة عدد الخيوط - وهذا مكلف للغاية. لذلك ، يوفر R2DBC تجريدًا يوفر الوصول إلى البيانات التفاعلية. هناك برامج تشغيل لقاعدة البيانات تكون تفاعلية في البداية - على سبيل المثال ، Postgres. لذلك يمكنك استخدام R2DBC ، من بين أمور أخرى ، مع Postgres والعمل مع SQL التفاعلية دون استخدام القفل ، حيث لا يوجد لديك سلاسل. هذا الموضوع كله يبدو مثيرا للاهتمام بالنسبة لي.
ربما يمكنك الإجابة عن بعض الأسئلة الفنية المتداولة؟ إحدى المشاكل هي أنه عند استخدام العديد من مشاريع الربيع ، تحدث العديد من التعليقات التوضيحية في وقت واحد. يصبح من الصعب معرفة ما يفعله كل منهم - لا يمكنك النقر عليه أثناء الضغط على Ctrl والانتقال إلى التعريف. كيف تتصرف في مثل هذه الحالة؟
يجب تشغيله باستخدام خيار "- تصحيح". معظم النظام البيئي الربيعي موجود الآن كتكوين تلقائي. بعض الأجزاء يشبه التكوين المستورد ، إذا نقرت في هذه الحالة على التعليق التوضيحي ، سترى النقش `@ Import` ، والذي سيشير بعد ذلك إلى فئته. إذا قمت بالنقر فوق ذلك ، سترى تلك الكائنات التي تم إنشاؤها لك. ولكن في بعض الأحيان يعمل الربيع من خلال آلية التكوين التلقائي - في هذه الحالة لا يتم إنشاء تعليقات توضيحية. لا يوجد سوى مكتبة ومسار للصف. ثم من الصعب معرفة ما يحدث ولماذا. لكننا نريد أن نجعل من السهل على الناس معرفة ذلك. لهذا ، هناك المعلمة "- تصحيح" ، والتي يجب إدخالها عند بدء تشغيل التطبيق. ثم سترى تقريرًا سيتم فيه وصف جميع الخطوات التي نفذها التطبيق عند بدء التشغيل. يتحقق التطبيق من وجود بعض الحقول أو الفئات ، وبناءً على ذلك ، يقرر ما إذا كان سيتم إنشاء بعض الكائنات له أم لا. يوضح لك التقرير الشروط التي تم استيفائها ، والتي لم يتم استيفائها ، والتكوينات التي لا تعتمد على أي عمليات تحقق. لذا ، دعنا نقول ، إذا لم تستطع فهم سبب عدم نجاح اتصالك بكافكا ، يمكنك إلقاء نظرة على الحالة المقابلة - ربما لم يكن لديك الفصل المطلوب في مسار الفصل الدراسي.
الآن سيكون هناك القليل من سؤال التصيد. غالبًا ما يدعي معارضو Spring أنه السبب في العمارة منخفضة الجودة ، لأنه يمكنك ببساطة استخدام @Autowired
أي مكان وفي كل مكان. هل توافق على هذا الرأي؟ قبل عشر سنوات ، تم إنشاء الهندسة المعمارية في ثلاث طبقات ، وتم نقل القيم من المنشئ إلى المنشئ ، وتم إنشاء DTOs. مع الربيع ، يمكنك التخلص من كل هذا. هل هي جيدة ام سيئة؟
الربيع أداة. يتيح مزيدًا من الأشخاص إنشاء برامج تتعلق بالإنتاج وتعمل بشكل صحيح ، لذلك لا أعتقد أنها ضارة. في السنوات الأخيرة ، أنشأ الملايين من الأشخاص التطبيقات التي تستخدمها ، وكل شيء يعمل بشكل جيد بالنسبة لهم. إن اعتبار أن الربيع ككل ضار أمر سخيف ، فلا يمكن تسمية هذا الرأي بأنه جاهل.
في الربيع ، يمكنك إنشاء أسلاك صريحة تمامًا. إذا كنت قلقًا من أنه لن يكون من الواضح من أين جاء الشيء المحدد ، يمكنك ربطه بنفسك. يمكنك إنشاء تكوين جافا حيث ستقوم إحدى الطرق باستدعاء طريقة أخرى ، وستكون قيمة الإخراج للطريقة التي تم استدعاؤها هي سلة - سوف يعتني بها الربيع. حتى عندما تقوم باستدعاء نفس الحاوية بشكل متكرر أو آلاف المرات ، فلن يكون لديك أكثر من رابط واحد إذا كان هذا الكائن عبارة عن وحدة فردية. تريد أن يكون كل شيء واضحًا - يمكن القيام بذلك. إذا كنت ترغب في ذلك ، يمكنك اللجوء إلى خيار ممل أكثر - XML. خلاصة القول هي أنه إذا كنت لا ترغب في استخدام `@ Autowired` ، فيمكن تجنب ذلك تمامًا.
إذا كنت تستخدم Spring Boot بالطريقة الأكثر شيوعًا ، فستحصل على حبة واحدة فقط. أنت تعلم أنك بحاجة إلى حبة من نوع `ConnectionFactory` - في هذه الحالة لا توجد مشكلة في إجراء الحقن حسب النوع. لا يزال لديك كائن واحد فقط ، ولن يكون لديك اثنان من 'ConnectionFactory` مقابل واحد` Connection`. لن يكون لديك جلستان إسبات ، لذلك لا شيء يمنعك من حقن `HibernateSession` - لا يزال موجودًا في حالة واحدة. إذا كنت تريد أن يكون كل شيء واضحًا ، فيمكنك استخدام التعليق التوضيحي `@ Qualifier`. مع ذلك ، يمكنك وضع علامة على ما تقوم بحقنه حسب النوع. سيجعل هذا من الممكن التمييز بين عمليات تنفيذ السلة المختلفة عن بعضها البعض. لنفترض أن لديك خدمة يمكن للتطبيقات من خلالها التواصل مع iTunes ، وفي مكان آخر - مع Amazon ، في المركز الثالث - مع متجر Android Play. سيكون هناك ثلاث حبوب مختلفة من نوع مختلف ، ولكن لكل منها التعليق التوضيحي `@ Qualifier`. علاوة على ذلك ، يمكن فرض هذا التعليق التوضيحي على تعليق توضيحي آخر ، وبالتالي ضمان سلامة النوع. ستقوم بربط هذا النوع ، وسيكون لديك تعليق توضيحي فوقه ، وعندما يتم إنشاء الفول ، فسيتم وضع تعليق توضيحي `@ Qualifier` ، بما في ذلك على موقع المستهلك. وبالتالي ، ستوفر لك هذه التعليقات التوضيحية روابط ، وحتى إذا كان لديك ثلاث عمليات تنفيذ أثناء تشغيل البرنامج ، فلا يزال بإمكانك العثور على ما تحتاجه.
أي ، بشكل عام ، في رأيك ، المرونة هي سمة إيجابية. هل تلتزم أنت وفريق الربيع ببعض المبادئ الأساسية مثل Zen Zen؟
نعم ، الالتزام. بالمناسبة ، كنت أبرمج في Python منذ أواخر التسعينيات ، وأنا مؤيد كبير لـ Python Zen ، لديه فكرة عامة صحيحة جدًا. بالنسبة لسؤالك ، هنا تحتاج إلى التحدث عن Jürgen Höller ، المؤسس المشارك لـ Spring والمطور الثاني الذي عمل في المشروع. إنه رجل عزيز ، هادئ للغاية ، واحد من أفضل الأشخاص الذين كان علي التواصل معهم. من السهل جدًا التحدث إليه إذا التقيت به مثلاً في أحد المؤتمرات. في الوقت نفسه ، لديه فكر قوي ، ومن الصعب المبالغة في مساهمته في الربيع. مؤتمر JAX - مهم جدًا ، على الرغم من أنه بالطبع لا يصل إلى الجوكر :) - منحه جائزة خاصة عن العمل الذي لم يتلقه أي شخص آخر من قبل. عادة ما يتم منح الجوائز في بعض الفئات الخاصة ، ولكن هذه الفئة لا تنتمي إلى فئة ولا تنتمي إلا إلى Jürgen. الربيع هو المشروع الوحيد في نظام جافا البيئي الذي لم تتم إعادة كتابته منذ 15 عامًا - لأنه لا توجد حاجة. لدى Jürgen فكرة واضحة جدًا عن كيفية كتابة الوحدات النمطية ، وكيفية التعبير عن الأنواع ، بشكل عام - كيفية إنشاء قاعدة من التعليمات البرمجية عالية الجودة يمكن أن تعيش لعقود والتغيير بسهولة إذا لزم الأمر. لا توجد مشاريع أخرى من هذا القبيل في نظام جافا البيئي. لم يعد جزء كبير من المشاريع موجودًا ، وحتى من بين تلك التي أعيدت كتابتها من الصفر ، فإن القليل جدًا منها عاش 15 عامًا.
دون إعادة الكتابة ، استمر الربيع فقط 15 عامًا ، لأنه تمت كتابته بشكل نظيف للغاية منذ البداية. علمتنا Jürgen بعض المبادئ الأساسية التي نتبعها: كيفية إنشاء الوحدات النمطية ، وكيفية عمل حزم التنفيذ (على عكس الجزء العام) ، وكيفية وصف المستوى السطحي لواجهة برمجة التطبيقات وأنواع التصميم لها ، والأنماط التي يجب استخدامها. باستخدام الربيع ، لا مفر من التعرف على أنماط التصميم ، وكان الأمر كذلك دائمًا. يتبادر إلى الذهن مثال على نمط النمط. يقدم لكم Spring Integration أنماط التكامل للمؤسسات ، ويقدم Spring MVC MVC. كل هذه الأنماط هي جزء من الإطار ، ونحن نستخدمها بناءً على الممارسات المثبتة. زن لدينا هو المبادئ التي علمنا إياها يورغن. في هذا الصدد ، نحن جميعًا طلابه. يورغن معروف بنهجه الغريب بعض الشيء في كيفية كتابة التعليمات البرمجية - بسبب أسلوبه حتى ظهر مصطلح خاص ، "jurgenize". فريقنا لديه الكثير من الأشخاص الأذكياء حقًا ولديهم خبرة رائعة ، وبعضهم لديه بالفعل درجات وبقع صلعاء. ومع ذلك ، يُجري يورغن تغييراته الخاصة على رمزهم. في بعض الأحيان تكون الأشياء الصغيرة مثل إضافة المساحات والتنظيف وما إلى ذلك ، ولكنها في بعض الأحيان تعيد كتابة الرمز من الصفر بشكل أفضل ألف مرة ، وفي الوقت نفسه لا تغير من تأليف الرمز ، أي أنه يتم تنفيذه باسم المؤلف الأصلي. في هذه الحالات ، قيل أن القانون "تم تصديقه" ، أي أنه أصلحه. بفضل Jürgen ، كودنا نظيف للغاية. بالنسبة لأدوات تحليل الكود ، تعتبر علامة عالية الجودة للعثور على نوع من العطل على الأقل في الربيع ، لأن هناك كود نظيف للغاية. بشكل عام ، لا يمكنني تحديد مبادئنا بالتفصيل الآن ، لكنها موجودة ، وضعها يورجن ، وتتبعها جميع مشاريع الربيع. أما بالنسبة لـ Boot Boot ، فلدينا قواعد دقيقة للغاية لإنشاء وحدات ، والتي نسميها مبتدئين.
حسنا شكرا على الاجابة سؤالي الأخير سيكون عن الأداء وجافا 11. على حد علمي ، يولد الربيع دائمًا السياق في وقت التشغيل. قد يستغرق ذلك من دقائق إلى عدة ساعات في بعض البرامج المصرفية القديمة.
هيا؟ لا أصدق ذلك.
بصراحة ، انظر بأم عيني.
لكن لا يمكن أن يكون الربيع. على الأرجح ، يتم عمل شيء رهيب هناك مع السبات. يمكن توليد الفاصوليا بالملايين ، ويمكن تجميع الفول الفارغ وتشغيله بسرعة كبيرة. يستغرق تحميل المعلومات من قاعدة البيانات والتحقق منها وما إلى ذلك بعض الوقت ، مما قد يتسبب في تأخير الربيع. لكن الربيع نفسه سريع جدا.
نعم ، أعتقد أنه كان هناك بالفعل نوع من الرعب مع السبات. ومع ذلك ، يبدأ الربيع 30 ثانية ، وأحيانًا دقيقة أو دقيقتين - لا يزال الوقت طويلًا ، ألا تعتقد ذلك؟ إذا قلنا ، على سبيل المثال ، قمنا بتشغيله في Docker ، فإننا نحتاج إلى الحاوية لتبدأ على الفور. هل من الممكن تقليل وقت بدء الربيع؟
يستغرق بدء الربيع أقل من ثانيتين. ومع وظيفة الربيع السحابية ، يمكن تقليل هذه المرة إلى نصف ثانية أو أقل. لدينا مشاريع تعمل دون مشاكل في نصف ثانية - على سبيل المثال ، Spring Boot in Spring Cloud Function. لذا ، مرة أخرى ، المشكلة ليست في الربيع ، ولكن في ما تفعله بهم ، ما يحدث في الخلفية - هل يمكنك الوصول إلى مصدر بيانات آخر على الإنترنت ، هل تقوم بتنزيل الملفات من الإنترنت ، هل تقوم بتحميل البيانات إلى الشبكة . إذا كان كل ما تفعله هو خدمات صغيرة ، فيجب أن يعمل نظامك بسرعة كبيرة. إذا تم تشغيل التطبيق الخاص بك لفترة طويلة جدًا ، فهناك خطأ في ذلك.
فهمت. بالمناسبة ، هل سمعت عن GraalVM و AOT؟
نعم سأخبركم أكثر: لدينا مشروع Spring Fu. إنه تجريبي ، لقد صورت مقطع فيديو من سلسلة Spring Tips عنه. كتبناها على Kotlin ، ولديها الآن واجهة برمجة تطبيقات Java. تم إنشاء هذا المشروع لبيئات مثل GraalVM. لا يستخدم Spring Fu الخوادم الوكيلة التي تم إنشاؤها ديناميكيًا أو `@ Configuration`. يحتاج مولد الصور الأصلي في GraalVM إلى معرفة الفئات التي سيتم تحميلها. ولكن إذا كان لديك تحميل ديناميكي باستخدام cglib أو Byte Buddy ، فهذا يجعل استخدام GraalVM صعبًا. السبات ، والربيع ، وجميع المكتبات الأخرى التي تستخدم الوكلاء المولدين ديناميكيًا غير مناسبة تمامًا لإنشاء صورة أصلية. لذلك ، لا يوجد شيء مثل هذا في Spring Fu ، ويذكر هذا مباشرة. لا يزال يستخدم الربيع ، ولكن نهج بناء التطبيقات مختلف. ومن مزايا Spring Fu أنه يعمل بشكل جيد مع GraalVM. والآن يبدأ التطبيق على الفور. أعني ، بشكل عام على الفور: بمجرد أن تكون في الذاكرة تمامًا! يجب أن نتذكر أن مولد الصور الأصلي في GraalVM لا يزال في مرحلة مبكرة جدًا من التطور. لهذا السبب ، تنشأ أحيانًا صعوبات ، لأنه يبدو للناس أن التطبيق الذي أطلقته GraalVM سيبدأ التحميل على الفور بسرعة كبيرة ، وفي وقت التشغيل ستكون السرعة كما كانت من قبل. ولكن هذا لا يحدث على هذا النحو ، لأنه في وقت تشغيل GraalVM لم تعد تستخدم JVM ، سيكون سلوك النظام مختلفًا. لذا اختبر هذا المشروع من أجل الصحة ، لكن تذكر أنه ليس تسريعًا مجانيًا للإطلاق. ومع ذلك ، أنا سعيد مع GraalVM ، بذل فريقهم الكثير من الجهد لجعله يعمل بشكل أفضل مع الأطر.
سؤالي الأخير ، بالطبع ، سيكون حول Java 11.
نعم إنها جميلة.
ما هو مفيد للربيع فيه؟
بالنسبة لمطوري Spring ، هناك معياران رئيسيان نختار من خلالهما هذه التكنولوجيا أو تلك: 1. ما إذا كانت مناسبة لاحتياجات الأعمال ، 2. سواء كانت مناسبة لنا كمبرمجين. أما بالنسبة للمعيار الأول ، ما إذا كانت هذه التقنية توفر سرعة أعلى واستقرارًا ، وما إذا كانت تتمتع بدعم طويل الأمد. كل هذا موجود في Java 11. سينتهي دعم Java 8 قريبًا ، لذلك من المنطقي الترقية إلى الإصدار التالي بدعم طويل الأمد. بالمناسبة ، يا أصدقائي ، إذا قمت بالترقية إلى الإصدار التالي ، خذ تجميع OpenJDK - إنه ممتاز في كل شيء. من السهل جدًا الحصول على الإصدار الصحيح ، لقد كتبت بالفعل عن ذلك على Twitter. يعمل هذا الإصدار بشكل جيد جدًا مع Spring - إنه مستقر. يمكنك الآن الانتقال إلى https://start.spring.io على الأقل ، وإنشاء مشروع جديد ، وتحديد Java 11 ، وسيعمل. يتوفر دعم Java 11 في كل من IntelliJ و Eclipse.
أما بالنسبة للمعيار الثاني ، فلا توجد تغييرات كبيرة لمطوري Spring في Java 11. من الجميل أن يظهر `var` وعميل HTTP ، ولكن لدى Spring بالفعل WebClient تفاعلي ، لذلك لست متأكدًا من أننا سنستفيد من عميل HTTP. تمت إضافة بعض الأشياء المريحة في Java 10 و Java 9. بالإضافة إلى ذلك ، أصبح من الممكن تشغيل برنامج Java كنص برمجي - وهذا ليس سيئًا. لست متأكدًا من أنه من المنطقي القيام بذلك مع Spring - على الرغم من ناحية أخرى ، لماذا لا. كيف ستبدو ، لا أعرف.
هل كان من الصعب على Spring التحول إلى Java 11؟
لا. في قلب الربيع توجد مكتبات عالية الجودة والنظام البيئي. ضع في اعتبارك أن إطار عمل الربيع نفسه يدعم كلاً من مسار الفصل والممر المعياري ، لكني شخصياً لا أوصي باستخدام modulepath. لاستخدامه بشكل صحيح ، يجب أن يدعم كل شيء آخر modulepath. وهذا غير ممكن حتى الآن ، يوجد الآن عدد قليل جدًا من الأشخاص الذين يقدمون الدعم المعياري في المكتبات. يعمل وضع classpath بشكل جيد. كانت لدينا مشاكل قياسية مع CGLib و AspectJ ومكتبات JAXB XML التي واجهها الجميع عند التبديل إلى Java 9. تم حل جميع هذه المشاكل في العام الماضي تقريبًا ، لذلك كان الانتقال إلى Java 11 أمرًا سهلاً بالنسبة لنا.
بالمناسبة ، نحن نخطط لكثير من الأشياء المثيرة للاهتمام للإصدارات المستقبلية من Java ، على سبيل المثال ، مشروع Loom هو ألياف لـ Java.
هل سيكون في Java 12؟
على الأرجح لا ، سيفعلون ذلك لبعض الوقت.
يستخدم Kotlin أيضًا coroutines ، لذلك هذا المشروع مثير للاهتمام للغاية بالنسبة لنا. كلما خرج ، سيكون ذا فائدة كبيرة. القدرة على التعبير عن خطوط الأنابيب التفاعلية دون إنشاء رمز تفاعلي أمر مهم للغاية. أنا شخصياً أتطلع إلى ظهور سلسلة متعددة الخطوط. ربما هذه ليست أفضل طريقة للشهادة بالنسبة لي - لدي الكثير من التعليمات البرمجية التي تتطلب عددًا كبيرًا من الصفوف ، على سبيل المثال ، استعلامات SQL وما شابه.
هذا لأن لديك جزء كبير من الكود المحسن لعرض الشرائح. في الشرائح أثناء التقارير ، سيكون من الملائم عرض السلسلة بأكملها على الشاشة.
نعم ، وإلا يصبح من الصعب قراءتها. في IDE ، ستبدو أفضل بكثير. مرة أخرى ، Python ، Kotlin ، Scala ، Groovy - قدمت أي لغة في السنوات العشرين الماضية دعم سلسلة متعددة الأسطر. في رأيي ، هذا أمر طبيعي.
ربما ترغب في ترك بعض النصائح لقرائنا؟ يمكن أن يتعلق الأمر بـ Spring أو Pivotal ، ويمكن أن يتعلق بـ Java ككل.
كما هو الحال مع أي تقنية ، فإن أفضل جزء من Spring هو مجتمعها. من الناحية الفنية ، تعتبر Spring مجموعة مثيرة للغاية من المشاريع ، ولكن سر طول عمرها هو مجتمع رائع. لا أحد يحتاج إلى برامجك الرائعة إذا كنت بحاجة إلى التواصل مع أشخاص لا يطاق من أجله. لذلك ، نحاول أن نكون ودودين قدر الإمكان. يجيب مطورونا ، بما في ذلك مديرو المشاريع ، على الأسئلة حول Stack Overflow ويتبعون علامات مختلفة هناك. لدينا غرف دردشة على Gitter ، وكل غرفة دردشة تتوافق مع مستودع على GitHub. على سبيل المثال ، https://gitter.im/spring-projects/spring-boot . هناك يمكنك العثور على مطوري Spring وطرح تلك الأسئلة التي تهمك.
غالبًا ما يسألني الناس عن كيفية مساعدة المشروع ، وكيفية البدء في كتابة التعليمات البرمجية لـ Spring. لدينا الكثير من المشكلات المتعلقة بعلامات مثل "مثالية للمساهمة" على GitHub. نحن سعداء للجميع ، ولكن ليس كل المشاريع تناسب الجميع ، بعض الأخطاء أكثر تعقيدًا من غيرها. لذلك إذا كنت ترغب في العمل معنا ، فابحث عن هذه العلامات وساعد في حل المشكلات. هذه هي الطريقة التي يحدث بها تجديد مجتمعنا. نحن نقدر عمل كل من يساعد في تحسين نظامنا البيئي.
دقيقة من الدعاية. يصل Josh Long إلى مؤتمر Joker 2018 مع حديث الربيع التفاعلي . يمكن شراء التذاكر على الموقع الرسمي للمؤتمر .