
//// لا تقم بتحرير هذا الملف. لقد تم إنشاؤه تلقائيًا. سيتم فقدان التغييرات اليدوية على هذا الملف عند إنشائه مرة أخرى. قم بتحرير الملفات في دليل 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 Server التكوين للعملاء البعيدين من مصادر مختلفة. المثال التالي يحصل على التكوين من مستودع git (يجب توفيره)، كما هو موضح في المثال التالي:
المصادر الأخرى هي أي قاعدة بيانات متوافقة مع JDBC، وSubversion، وHashicorp Vault، وCredhub، وأنظمة الملفات المحلية.
=== الاستخدام من جانب العميل
لاستخدام هذه الميزات في تطبيق، يمكنك بناؤه كتطبيق Spring Boot يعتمد على spring-cloud-config-client (على سبيل المثال، راجع حالات الاختبار الخاصة بـ config-client أو التطبيق النموذجي).
الطريقة الأكثر ملاءمة لإضافة التبعية هي باستخدام Spring Boot starter وهو 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 ولكن لمرحلة bootstrap في سياق التطبيق)، كما هو موضح في المثال التالي:
افتراضيًا، إذا لم يتم تعيين اسم تطبيق، سيتم استخدام application. لتعديل الاسم، يمكن إضافة الخاصية التالية إلى ملف bootstrap.properties:
NOTE: عند تعيين الخاصية ${spring.application.name} لا تسبق اسم تطبيقك بالكلمة المحجوزة application- لمنع حدوث مشكلات في حل مصدر الخصائص الصحيح.
تظهر خصائص bootstrap في نقطة نهاية /env كمصدر خصائص عالي الأولوية، كما هو موضح في المثال التالي.
مصدر خصائص يُسمى ```configService:<URL المستودع البعيد>/<اسم الملف>يحتوي على خاصية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 الأولية (pre-release).
NOTE: انتبه إلى أنك قد تحتاج إلى زيادة مقدار الذاكرة
المتاحة لـ Maven عن طريق تعيين متغير بيئة MAVEN_OPTS بقيمة
مثل -Xmx512m -XX:MaxPermSize=128m. نحاول تغطية ذلك في
تكوين .mvn، لذا إذا وجدت أنه يتعين عليك القيام بذلك لإنجاح
البناء، فيرجى رفع تذكرة لإضافة الإعدادات إلى
التحكم في المصدر (source control).
للحصول على تلميحات حول كيفية بناء المشروع، انظر في .travis.yml إذا كان
موجودًا. يجب أن يكون هناك أمر "script" وربما أمر "install". انظر أيضًا
إلى قسم "services" لمعرفة ما إذا كانت هناك أي خدمات تحتاج إلى التشغيل محليًا
(مثل mongo أو rabbit). تجاهل الأجزاء المتعلقة بـ git التي قد تجدها
في "before_install" لأنها متعلقة بإعداد بيانات اعتماد git ولديك بالفعل.
المشاريع التي تتطلب middleware تتضمن عمومًا ملف
docker-compose.yml، لذا فكّر في استخدام
https://docs.docker.com/compose/[Docker Compose] لتشغيل خوادم middleware
في حاويات 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) وادفع التغيير.
=== العمل مع الكود إذا لم يكن لديك تفضيل لبيئة تطوير متكاملة (IDE)، فننصحك باستخدام 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".
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 Files. راجع الروابط التالية لمزيد من المعلومات:
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. إذا كنت ترغب في المساهمة حتى بشيء بسيط، فلا تتردد، ولكن اتبع الإرشادات أدناه.
=== توقيع اتفاقية ترخيص المساهم قبل أن نقبل تصحيحًا (patch) أو طلب سحب غير بسيط، سنحتاج منك توقيع https://cla.pivotal.io/sign/spring[اتفاقية ترخيص المساهم]. توقيع اتفاقية المساهم لا يمنح أي شخص حقوق تسجيل (commit) في المستودع الرئيسي، ولكنه يعني أننا نستطيع قبول مساهماتك، وستحصل على إشادة كمؤلف إذا قمنا بذلك. قد يُطلب من المساهمين النشطين الانضمام إلى الفريق الأساسي، مع منحهم القدرة على دمج طلبات السحب.
=== مدونة قواعد السلوك يلتزم هذا المشروع بميثاق المساهمين https://github.com/spring-cloud/spring-cloud-build/blob/master/docs/src/main/asciidoc/code-of-conduct.adoc[مدونة قواعد السلوك]. من خلال المشاركة، يُتوقع منك الالتزام بهذه المدونة. يرجى الإبلاغ عن السلوك غير المقبول إلى [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]
لاستيراد نفس الملف..java الجديدة تحتوي على تعليق Javadoc بسيط للفئة مع وسم
@author واحد على الأقل يحدد هويتك، ويفضل أن يكون هناك فقرة واحدة على الأقل حول الغرض من الفئة..java الجديدة (انسخ من الملفات الموجودة
في المشروع)@author في ملفات .java التي تعدلها بشكل جوهري (أكثر من
تغييرات تجميلية).Fixes gh-XXXX في نهاية رسالة التسجيل
(حيث 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
=== إعداد IDE
==== 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[Code style]
انتقل إلى `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[Code style]
انتقل إلى `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-tools/src/main/resources/checkstyle-header.txt` الخاص بـ Spring Cloud Build، إما في مستودعك المستنسخ أو عبر رابط `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-tools/src/checkstyle/checkstyle-suppressions.xml` الخاص بـ Spring Cloud Build، إما في مستودعك المستنسخ أو عبر رابط `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