
//// لا تقم بتحرير هذا الملف. لقد تم توليده. سيتم فقدان التغييرات اليدوية على هذا الملف عند توليده مرة أخرى. قم بتحرير الملفات في دليل src/main/asciidoc/ بدلاً من ذلك. ////
image::https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-config/tree/master"] image::https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master/graph/badge.svg["Codecov", link="https://codecov.io/gh/spring-cloud/spring-cloud-config/branch/master"] image::https://api.codacy.com/project/badge/Grade/f064024a072c477e97dca6ed5a70fccd?branch=master["Codacy code quality", link="https://www.codacy.com/app/Spring-Cloud/spring-cloud-config?branch=master&utm_source=github.com&utm_medium=referral&utm_content=spring-cloud/spring-cloud-config&utm_campaign=Badge_Grade"]
يوفر Spring Cloud Config دعماً من جانب الخادم ومن جانب العميل للتهيئة الخارجية في النظام الموزع. باستخدام Config Server، لديك مكان مركزي لإدارة الخصائص الخارجية للتطبيقات عبر جميع البيئات.
تتقابل المفاهيم على كل من جانب العميل والخادم تماماً مع تجريدي Spring Environment وPropertySource، لذا فهي تتوافق بشكل كبير مع تطبيقات Spring، ويمكن استخدامها مع أي تطبيق يعمل بأي لغة.
عندما ينتقل التطبيق عبر خط أنابيب النشر من التطوير إلى الاختبار ثم إلى الإنتاج، يمكنك إدارة الإعداد بين تلك البيئات وتكون متأكداً من أن التطبيقات لديها كل ما تحتاجه للتشغيل عند ترحيلها.
يستخدم التنفيذ الافتراضي للطرف الخلفي لتخزين الخادم نظام git، لذا فهو يدعم بسهولة الإصدارات الموسومة لبيئات الإعداد، فضلاً عن كونه متاحاً لمجموعة واسعة من الأدوات لإدارة المحتوى.
من السهل إضافة تطبيقات بديلة وربطها من خلال إعدادات Spring.
== الميزات
=== خادم Spring Cloud Config
يقدم خادم Spring Cloud Config الفوائد التالية:
@EnableConfigServer=== عميل Spring Cloud Config
خاص بتطبيقات Spring، يتيح لك عميل Spring Cloud Config:
Environment بمصادر خصائص عن بُعد.@RefreshScope لـ Spring @Beans التي تريد إعادة تهيئتها عند تغيّر الإعداد./env لتحديث Environment وإعادة ربط @ConfigurationProperties ومستويات السجل.
** /refresh لتحديث حبوب @RefreshScope.
** /restart لإعادة تشغيل سياق Spring (معطّل افتراضياً).
** /pause و/resume لاستدعاء أساليب Lifecycle (stop() وstart() على ).== بدء سريع
يتناول هذا الدليل السريع استخدام كل من الخادم والعميل في Spring Cloud Config Server.
أولاً، شغّل الخادم كما يلي:
الخادم هو تطبيق Spring Boot، لذا يمكنك تشغيله من بيئة التطوير المتكاملة (IDE) الخاصة بك إذا كنت تفضل ذلك (الفئة الرئيسية هي ConfigServerApplication).
بعد ذلك جرّب عميلاً كما يلي:
الاستراتيجية الافتراضية لتحديد مواقع مصادر الخصائص هي استنساخ مستودع git (على spring.cloud.config.server.git.uri) واستخدامه لتهيئة SpringApplication مصغّر.
يُستخدم Environment الخاص بالتطبيق المصغّر لتعداد مصادر الخصائص ونشرها في نقطة نهاية JSON.
توفّر خدمة HTTP موارد بالشكل التالي:
حيث يتم حقن application كـ spring.config.name في SpringApplication (وهو ما يكون عادةً application في تطبيق Spring Boot عادي)، وprofile هو ملف تعريف نشط (أو قائمة خصائص مفصولة بفواصل)، وlabel هو وسم git اختياري (الافتراضي هو master).
يسحب خادم Spring Cloud Config الإعداد للعملاء البعيدين من مصادر مختلفة. المثال التالي يجلب الإعداد من مستودع git (يجب توفيره)، كما يوضح المثال التالي:
المصادر الأخرى هي أي قاعدة بيانات متوافقة مع JDBC، وSubversion، وHashicorp Vault، وCredhub، وأنظمة الملفات المحلية.
=== الاستخدام من جانب العميل
لاستخدام هذه الميزات في تطبيق، يمكنك بناؤه كتطبيق Spring Boot يعتمد على spring-cloud-config-client (للاطلاع على مثال، راجع حالات الاختبار الخاصة بـ config-client أو التطبيق النموذجي).
الطريقة الأكثر ملاءمة لإضافة التبعية هي باستخدام مُشغّل Spring Boot org.springframework.cloud:spring-cloud-starter-config.
يتوفر أيضاً pom أصلي وBOM (spring-cloud-starter-parent) لمستخدمي Maven وملف خصائص لإدارة إصدارات Spring IO لمستخدمي Gradle وSpring CLI. يوضح المثال التالي إعداد Maven نموذجياً:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>{spring-boot-docs-version}</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>{spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- repositories also needed for snapshots and milestones -->
يمكنك الآن إنشاء تطبيق Spring Boot قياسي، مثل خادم HTTP التالي:
@SpringBootApplication @RestController public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
عند تشغيل خادم HTTP هذا، يقوم بالتقاط الإعداد الخارجي من خادم الإعداد المحلي الافتراضي (إذا كان يعمل) على المنفذ 8888.
لتعديل سلوك الإقلاع، يمكنك تغيير موقع خادم الإعداد باستخدام bootstrap.properties (مشابه لـ application.properties لكنه مخصص لمرحلة التمهيد في سياق التطبيق)، كما يوضح المثال التالي:
افتراضياً، إذا لم يتم تعيين اسم تطبيق، سيتم استخدام application. لتعديل الاسم، يمكن إضافة الخاصية التالية إلى ملف bootstrap.properties:
NOTE: عند تعيين الخاصية ${spring.application.name} لا تضع البادئة المحجوزة application- أمام اسم تطبيقك لتجنب مشاكل في تحديد مصدر الخاصية الصحيح.
تظهر خصائص التمهيد في نقطة النهاية /env كمصدر خصائص ذي أولوية عالية، كما يوضح المثال التالي.
مصدر الخصائص المسمى ```configService:/يحتوي على خاصيةfooبقيمةbar` وله الأولوية القصوى.
NOTE: عنوان URL في اسم مصدر الخصائص هو مستودع git، وليس عنوان URL الخاص بخادم الإعداد.
=== التطبيق النموذجي
يمكنك العثور على تطبيق نموذجي https://github.com/spring-cloud/spring-cloud-config/tree/master/spring-cloud-config-sample[هنا].
إنه تطبيق Spring Boot، لذا يمكنك تشغيله باستخدام الآليات المعتادة (على سبيل المثال، mvn spring-boot:run).
عند تشغيله، يبحث عن خادم الإعداد على http://localhost:8888 (الافتراضي القابل للتكوين)، لذا يمكنك تشغيل الخادم أيضاً لرؤية كل شيء يعمل معاً.
يحتوي النموذج على حالة اختبار يتم فيها أيضاً تشغيل خادم الإعداد داخل نفس JVM (بمنفذ مختلف)، ويؤكد الاختبار أن
خاصية بيئة من مستودع إعداد git موجودة.
لتغيير موقع خادم الإعداد، يمكنك تعيين spring.cloud.config.uri في bootstrap.yml (أو في خصائص النظام وأماكن أخرى).
تحتوي حالة الاختبار على أسلوب main() يشغّل الخادم بنفس الطريقة (راقب السجلات لمعرفة منفذه)، لذا يمكنك تشغيل النظام بأكمله في عملية واحدة والتلاعب به (على سبيل المثال، يمكنك تشغيل أسلوب main() في بيئة التطوير المتكاملة الخاصة بك).
يستخدم أسلوب main() دليل target/config كدليل عمل لمستودع git، لذا يمكنك إجراء تغييرات محلية هناك ورؤيتها تنعكس على التطبيق قيد التشغيل. يوضح المثال التالي جلسة تجريب على حالة الاختبار:
يُبلغ نقطة نهاية التحديث أن خاصية "sample" قد تغيّرت.
== البناء
:jdkversion: 1.7
=== الترجمة والاختبار الأساسيان
لبناء المصدر، ستحتاج إلى تثبيت JDK {jdkversion}.
يستخدم Spring Cloud أداة Maven لمعظم الأنشطة المتعلقة بالبناء، ويجب أن تتمكن من الانطلاق بسرعة كبيرة عن طريق استنساخ المشروع الذي يهمك وكتابة
NOTE: يمكنك أيضاً تثبيت Maven (>=3.3.3) بنفسك وتشغيل الأمر mvn
بدلاً من ./mvnw في الأمثلة أدناه. إذا قمت بذلك، فقد
تحتاج أيضاً إلى إضافة -P spring إذا كانت إعدادات Maven المحلية لديك لا
تحتوي على تعريفات مستودعات لملفات spring الأولية للإصدار.
NOTE: انتبه إلى أنك قد تحتاج إلى زيادة مقدار الذاكرة
المتاحة لـ Maven عن طريق تعيين متغير بيئة MAVEN_OPTS بقيمة
مثل -Xmx512m -XX:MaxPermSize=128m. نحاول تغطية ذلك في
إعداد .mvn، لذا إذا وجدت أنه يتعين عليك القيام بذلك لإنجاح
البناء، فيرجى فتح تذكرة لإضافة الإعدادات إلى
التحكم بالمصدر.
للحصول على تلميحات حول كيفية بناء المشروع، اطلع على .travis.yml إذا كان
موجوداً. يجب أن يكون هناك أمر "script" وربما أمر "install". انظر أيضاً
إلى قسم "services" لمعرفة ما إذا كانت هناك أي خدمات تحتاج إلى
التشغيل محلياً (مثل mongo أو rabbit). تجاهل الأجزاء المتعلقة بـ git
التي قد تجدها في "before_install" لأنها مرتبطة بتعيين بيانات اعتماد git
وأنت تمتلكها بالفعل.
تتضمن المشاريع التي تتطلب برمجيات وسيطة عادةً ملف
docker-compose.yml، لذا فكّر في استخدام
https://docs.docker.com/compose/[Docker Compose] لتشغيل خوادم البرمجيات الوسيطة
في حاويات Docker. راجع ملف README في
https://github.com/spring-cloud-samples/scripts[مستودع scripts التجريبي]
للحصول على تعليمات محددة حول الحالات الشائعة لـ mongo وrabbit وredis.
NOTE: إذا فشل كل شيء آخر، قم بالبناء باستخدام الأمر من .travis.yml (عادةً
./mvnw install).
=== التوثيق
تحتوي وحدة spring-cloud-build على ملف تعريف "docs"، وإذا قمت
بتفعيله، فسيحاول بناء مصادر asciidoc من
src/main/asciidoc. وكجزء من هذه العملية، سيبحث عن ملف
README.adoc ويعالجه عن طريق تحميل جميع ملفات التضمين، دون
تحليلها أو عرضها، فقط ينسخه إلى ${main.basedir}
(الافتراضي هو ${basedir}، أي جذر المشروع). إذا كانت هناك
أي تغييرات في ملف README، فستظهر بعد بناء Maven كملف معدَّل
في المكان الصحيح. فقط قم بعمل commit وادفع التغيير.
=== العمل مع الكود إذا لم يكن لديك تفضيل لبيئة تطوير متكاملة معينة، ننصحك باستخدام https://www.springsource.com/developer/sts[Spring Tools Suite] أو https://eclipse.org[Eclipse] عند العمل مع الكود. نستخدم إضافة https://eclipse.org/m2e/[m2eclipse] eclipse لدعم Maven. يجب أن تعمل بيئات التطوير والأدوات الأخرى أيضاً دون مشاكل طالما أنها تستخدم Maven 3.3.3 أو أحدث.
==== الاستيراد إلى eclipse باستخدام m2eclipse نوصي بإضافة eclipse https://eclipse.org/m2e/[m2eclipse] عند العمل مع eclipse. إذا لم يكن m2eclipse مثبتاً لديك بالفعل، فهو متوفر من "eclipse marketplace".
NOTE: لا تدعم الإصدارات الأقدم من m2e Maven 3.3، لذا بمجرد
استيراد المشاريع إلى Eclipse، ستحتاج أيضاً إلى إخبار
m2eclipse باستخدام ملف التعريف الصحيح للمشاريع. إذا رأيت
العديد من الأخطاء المختلفة المتعلقة بملفات POM في المشاريع، فتأكد
من أن لديك تثبيتاً محدثاً. إذا لم تستطع ترقية m2e،
أضف ملف التعريف "spring" إلى settings.xml الخاص بك. بدلاً من ذلك يمكنك
نسخ إعدادات المستودع من ملف التعريف "spring" في pom الأصلي
إلى settings.xml الخاص بك.
==== الاستيراد إلى eclipse بدون m2eclipse إذا كنت تفضل عدم استخدام m2eclipse، يمكنك توليد بيانات تعريف مشروع eclipse باستخدام الأمر التالي:
$ ./mvnw eclipse:eclipse
يمكن استيراد مشاريع eclipse المولدة عن طريق تحديد import existing projects
من قائمة file.
=== JCE
إذا حصلت على استثناء بسبب "Illegal key size" وكنت تستخدم JDK من Sun، فستحتاج إلى تثبيت ملفات Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy. راجع الروابط التالية للحصول على مزيد من المعلومات:
https://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html[Java 6 JCE]
https://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html[Java 7 JCE]
https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html[Java 8 JCE]
استخرج ملفات JCE إلى مجلد JDK/jre/lib/security لأي إصدار من JRE/JDK x64/x86 تستخدمه.
== المساهمة
:spring-cloud-build-branch: master
يتم إصدار Spring Cloud بموجب ترخيص Apache 2.0 غير التقييدي، ويتبع عملية تطوير Github قياسية للغاية، باستخدام متتبع Github للمشكلات ودمج طلبات السحب في master. إذا كنت تريد المساهمة حتى بشيء بسيط، فلا تتردد، ولكن اتبع الإرشادات أدناه.
=== التوقيع على اتفاقية ترخيص المساهم قبل قبول تصحيح أو طلب سحب غير بسيط، سنحتاج منك التوقيع على https://cla.pivotal.io/sign/spring[اتفاقية ترخيص المساهم]. لا يمنح التوقيع على اتفاقية المساهم أي شخص حقوق الالتزام في المستودع الرئيسي، ولكنه يعني أننا نستطيع قبول مساهماتك، وستحصل على إشادة ككاتب إذا قبلناها. قد يُطلب من المساهمين النشطين الانضمام إلى الفريق الأساسي، ومنحهم القدرة على دمج طلبات السحب.
=== مدونة قواعد السلوك يلتزم هذا المشروع بمدونة قواعد السلوك الخاصة بـ Contributor Covenant https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[code of conduct]. بالمشاركة، يُتوقع منك الالتزام بهذه المدونة. يرجى الإبلاغ عن السلوك غير المقبول إلى [email protected].
=== اصطلاحات الكود والأعمال المنزلية لا شيء من هذه الأمور ضروري لطلب السحب، لكنها جميعاً ستساعد. يمكن أيضاً إضافتها بعد طلب السحب الأصلي وقبل الدمج.
eclipse-code-formatter.xml من مشروع
https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring
Cloud Build]. إذا كنت تستخدم IntelliJ، يمكنك استخدام
https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
Plugin] لاستيراد نفس الملف..java الجديدة تحتوي على تعليق Javadoc بسيط للفئة يتضمن على الأقل وسم
@author يعرّفك، ويفضل أن يتضمن فقرة على الأقل حول الغرض من الفئة..java الجديدة (انسخ من الملفات الموجودة
في المشروع).@author في ملفات .java التي تعدّلها بشكل جوهري (أكثر
من تغييرات تجميلية).Fixes gh-XXXX في نهاية رسالة commit
(حيث XXXX هو رقم المشكلة).=== Checkstyle
يأتي Spring Cloud Build مع مجموعة من قواعد checkstyle. يمكنك العثور عليها في وحدة spring-cloud-build-tools. أبرز الملفات ضمن الوحدة هي:
<1> قواعد Checkstyle الافتراضية <2> إعداد رأس الملف <3> قواعد الكبت الافتراضية
==== إعداد Checkstyle
قواعد Checkstyle معطّلة افتراضياً. لإضافة checkstyle إلى مشروعك، ما عليك سوى تعريف الخصائص والإضافات التالية.
<reporting>
<plugins>
<plugin> <5>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
</plugin>
</plugins>
</reporting>
${project.root}/src/checkstyle/checkstyle-suppressions.xml مع حالات الكبت الخاصة بك. مثال:.projectRoot/src/checkstyle/checkstyle-suppresions.xmlيُفضَّل نسخ ${spring-cloud-build.rootFolder}/.editorconfig و${spring-cloud-build.rootFolder}/.springformat إلى مشروعك. وبهذه الطريقة، سيتم تطبيق بعض قواعد التنسيق الافتراضية. يمكنك القيام بذلك عن طريق تشغيل هذا السكربت:```bash
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/.editorconfig -o .editorconfig
$ touch .springformat
=== إعداد بيئة التطوير
==== Intellij IDEA
من أجل إعداد Intellij، يجب عليك استيراد اصطلاحات الترميز الخاصة بنا وملفات تعريف الفحص وإعداد إضافة Checkstyle. يمكن العثور على الملفات التالية في مشروع https://github.com/spring-cloud/spring-cloud-build/tree/master/spring-cloud-build-tools[Spring Cloud Build].
.spring-cloud-build-tools/
----
└── src
├── checkstyle
│ └── checkstyle-suppressions.xml <3>
└── main
└── resources
├── checkstyle-header.txt <2>
├── checkstyle.xml <1>
└── intellij
├── Intellij_Project_Defaults.xml <4>
└── Intellij_Spring_Boot_Java_Conventions.xml <5>
----
<1> قواعد Checkstyle الافتراضية
<2> إعداد رأس الملف
<3> قواعد الاستثناء الافتراضية
<4> الإعدادات الافتراضية لمشروع Intellij التي تطبّق معظم قواعد Checkstyle
<5> اصطلاحات أسلوب مشروع Intellij التي تطبّق معظم قواعد Checkstyle
.أسلوب الكود
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-code-style.png[أسلوب الكود]
انتقل إلى `File` -> `Settings` -> `Editor` -> `Code style`. ثم انقر على الأيقونة بجوار قسم `Scheme`. بعد ذلك، انقر على قيمة `Import Scheme` واختر خيار `Intellij IDEA code style XML`. استورد الملف `spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml`.
.ملفات تعريف الفحص
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-inspections.png[أسلوب الكود]
انتقل إلى `File` -> `Settings` -> `Editor` -> `Inspections`. ثم انقر على الأيقونة بجوار قسم `Profile`. بعد ذلك، انقر على `Import Profile` واستورد الملف `spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml`.
.Checkstyle
لكي يعمل Intellij مع Checkstyle، يجب تثبيت إضافة `Checkstyle`. من المستحسن أيضًا تثبيت `Assertions2Assertj` لتحويل تأكيدات JUnit تلقائيًا.
image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring-cloud-build-branch}/docs/src/main/asciidoc/images/intellij-checkstyle.png[Checkstyle]
انتقل إلى `File` -> `Settings` -> `Other settings` -> `Checkstyle`. ثم انقر على أيقونة `+` في قسم `Configuration file`. بعد ذلك، ستحتاج إلى تحديد مصدر قواعد Checkstyle. في الصورة أعلاه، اخترنا القواعد من مستودع Spring Cloud Build المستنسخ. ومع ذلك، يمكنك الإشارة إلى مستودع Spring Cloud Build على GitHub (على سبيل المثال، بالنسبة إلى `checkstyle.xml`: `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml`). نحتاج إلى توفير المتغيرات التالية:
- `checkstyle.header.file` - يرجى توجيهه إلى ملف Spring Cloud Build، `spring-cloud-build-tools/src/main/resources/checkstyle-header.txt` سواء في مستودعك المستنسخ أو عبر عنوان URL `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt`.
- `checkstyle.suppressions.file` - الاستثناءات الافتراضية. يرجى توجيهه إلى ملف Spring Cloud Build، `spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml` سواء في مستودعك المستنسخ أو عبر عنوان URL `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml`.
- `checkstyle.additional.suppressions.file` - يتوافق هذا المتغير مع الاستثناءات في مشروعك المحلي. على سبيل المثال، إذا كنت تعمل على `spring-cloud-contract`. ثم وجّه إلى مجلد `project-root/src/checkstyle/checkstyle-suppressions.xml`. مثال لمشروع `spring-cloud-contract` سيكون: `/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml`.
هام: تذكر ضبط `Scan Scope` على `All sources` لأننا نطبّق قواعد Checkstyle على مصادر الإنتاج والاختبار.
ApplicationContext