
خادم تكوين مركزي للأنظمة الموزعة مع واجهة برمجة تطبيقات HTTP، وتخزين قائم على Git، وتشفير/فك تشفير الخصائص، والتكامل مع Vault وJDBC وأنظمة الملفات المحلية.
//// لا تقم بتحرير هذا الملف. لقد تم إنشاؤه تلقائيًا. سيتم فقدان التغييرات اليدوية على هذا الملف عند إنشائه مرة أخرى. قم بتحرير الملفات في دليل 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() على ApplicationContext).== البدء السريع
يستعرض هذا الدليل السريع استخدام كل من الخادم والعميل الخاصين بـ 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 لخادم التكوين.
=== تطبيق نموذجي