كتاب "جافا في السحابة. Spring Spring، Spring Cloud، Cloud Foundry »

الصورة مرحبا بالجميع! هذا الكتاب مخصص بشكل أساسي لمطوري أجهزة Java و JVM الذين يبحثون عن طرق لإنشاء برامج أفضل في وقت قصير باستخدام Spring Boot و Spring Cloud و Cloud Foundry. إنه لمن سمع بالفعل الضجيج يتصاعد حول الخدمات الصغيرة. ربما تكون قد أدركت بالفعل ما هو ارتفاع الستراتوسفير الذي خلعه Boot Spring ، وأنت متفاجئ من أن الشركات اليوم تستخدم منصة Cloud Foundry. إذا كان الأمر كذلك ، فهذا الكتاب لك.

مقتطفات. 3. نمط تكوين التطبيق مكون من 12 عامل


يناقش هذا الفصل كيفية تنفيذ تكوين التطبيق.

حدد عددًا من مصطلحات المفردات. عندما يتعلق الأمر بالتكوين في Spring ، فأنا أعني غالبًا الدخول إلى بيئة الربيع في التطبيقات المختلفة لسياق التطبيق - ApplicationContext ، مما يساعد الحاوية على فهم كيفية توصيل مكونات الفول. يمكن تمثيل هذا التكوين كملف XML يجب تقديمه في ClassPathXmlApplicationContext ، أو فئات Java المشروحة بطريقة يمكن توفيرها لكائن AnnotationConfigApplicationContext . وبالطبع ، عند دراسة الخيار الأخير ، سنشير إلى تكوين Java.

ولكن في هذا الفصل ، سننظر في التكوين في الشكل الذي يتم تعريفه به في بيان التطبيق المكون من 12 عاملاً . في هذه الحالة ، يتعلق الأمر بالقيم الحرفية التي يمكن أن تتغير من بيئة إلى أخرى: نحن نتحدث عن كلمات المرور والمنافذ وأسماء المضيفين أو عن علامات الخصائص. يتجاهل التكوين الثوابت السحرية المضمنة في التعليمات البرمجية. يتضمن البيان معيارًا ممتازًا للتكوين الصحيح: هل يمكن أن تكون قاعدة التعليمات البرمجية للتطبيق مفتوحة المصدر في أي وقت دون الكشف عن أوراق الاعتماد المهمة والمساومة عليها؟ يشير هذا النوع من التكوين حصريًا إلى القيم التي تختلف من بيئة إلى أخرى ، ولا ينطبق ، على سبيل المثال ، على توصيل حبوب الربيع أو تكوين مسارات روبي.

الدعم في إطار الربيع


في الربيع ، تم دعم نمط تكوين مكون من 12 عاملًا منذ ظهور فئة PropertyPlaceholderConfigurer . بمجرد تحديد مثيله ، فإنه يستبدل القيم الحرفية في تكوين XML بالقيم المستخرجة من الملف بالملحق .properties. في بيئة الربيع ، تم تقديم فئة PropertyPlaceholderConfigurer منذ عام 2003. قدم Spring 2.5 دعمًا لمساحة اسم XML ، وفي الوقت نفسه دعم استبدال الملكية في هذه المساحة. يسمح هذا بالاستبدال في تكوين XML للقيم الحرفية لتعريفات مكونات الفول بالقيم المعينة للمفاتيح في ملف الخصائص الخارجية (في هذه الحالة ، في ملف simple.properties ، الذي يمكن أن يظهر في مسار الفئة أو يكون خارجًا عن التطبيق).

يهدف التكوين بأسلوب 12 عاملاً إلى القضاء على عدم موثوقية الخطوط السحرية الموجودة ، أي القيم مثل عناوين قواعد البيانات والحسابات للاتصال بها ، والموانئ ، وما إلى ذلك ، مشفرة في تطبيق مترجم. إذا تم نقل التكوين خارج التطبيق ، فيمكن استبداله دون اللجوء إلى تجميع التعليمات البرمجية الجديد.

فئة PropertyPlaceholderConfigurer


دعونا نلقي نظرة على مثال لاستخدام فئة PropertyPlaceholderConfigurer ، وتعريفات XML لمكونات فول الربيع ، وملف بالملحق. الخصائص المأخوذة من حدود التطبيق. نحتاج فقط إلى طباعة القيمة المتوفرة في ملف الملكية هذا. سيساعد ذلك على عمل الكود الموضح في المثال 3.1.

المثال 3.1 ملف الملكية: some.properties

configuration.projectName=Spring Framework 

هذه هي فئة SpringPathXmlApplicationContext ، لذلك نستخدم مساحة اسم XML من سياق الربيع ونشير إلى ملف some.properties. ثم نستخدم الحرف في شكل $ {config.projectName} في تعريفات مكونات الفول ، وسوف يستبدلها الربيع بالقيم من ملف خصائصنا أثناء التنفيذ (المثال 3.2).

مثال 3.2. ملف XML تكوين الربيع

 <context:property-placeholder location="classpath:some.properties"/> (1) <bean class="classic.Application"> <property name="configurationProjectName" value="${configuration.projectName}"/> </bean> 

(1) مسار الفصل الدراسي: الموقع الذي يشير إلى الملف في كتلة التعليمات البرمجية المترجمة الحالية (.jar ، .war ، إلخ). يدعم Spring العديد من البدائل ، بما في ذلك file: و url :، والتي تسمح للملف بالتواجد بعيدًا عن كتلة التعليمات البرمجية.

أخيرًا ، دعنا نلقي نظرة على كيف تبدو فئة Java ، وبفضلها يمكن جمع كل هذا معًا (المثال 3.3).

مثال 3.3 فئة Java التي يجب توصيفها بقيمة الخاصية
حزمة الكلاسيكية.

 import org.apache.commons.logging.LogFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Application { public static void main(String[] args) { new ClassPathXmlApplicationContext("classic.xml"); } public void setConfigurationProjectName(String pn) { LogFactory.getLog(getClass()).info("the configuration project name is " + pn); } } 

يستخدم المثال الأول تنسيق XML لتكوين حبة الربيع. في الربيع 3.0 و 3.1 ، تحسن وضع المطورين الذين يستخدمون تكوين Java بشكل ملحوظ. تم تقديم شرح القيمة وتجريد البيئة في هذه الإصدارات.

البيئة المجردة والقيمة


يمثل تجريد البيئة ، أثناء تنفيذ الكود ، علاقته غير المباشرة بالبيئة التي يعمل فيها ، ويسمح للتطبيق بطرح السؤال ("ما هو فاصل السطر line.separator على هذا النظام الأساسي؟") حول خصائص البيئة. يعمل التجريد بمثابة تعيين من المفاتيح والقيم. بتكوين PropertySource في البيئة ، يمكنك تكوين حيث سيتم قراءة هذه القيم من. بشكل افتراضي ، يقوم Spring بتحميل مفاتيح النظام وقيم البيئة ، مثل line.separator. يمكنك توجيه Spring لتحميل مفاتيح التكوين من ملف بنفس الترتيب الذي يمكن استخدامه في الإصدارات السابقة من حل استبدال خاصية Spring باستخدام التعليق التوضيحيPropertySource.

يوفر التعليق التوضيحي للقيمة طريقة لتضمين قيم البيئة في المُنشِّئين والمستوطنين والحقول وما إلى ذلك. يمكن حساب هذه القيم باستخدام لغة تعبير الربيع أو بناء جملة استبدال الخاصية شريطة تسجيل PropertySourcesPlaceholderConfigurer ، كما في المثال 3.4.

مثال 3.4. تسجيل PropertySourcesPlaceholderConfigurer
حزمة env ؛

 import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.env.Environment; import javax.annotation.PostConstruct; (1) @Configuration @PropertySource("some.properties") public class Application { private final Log log = LogFactory.getLog(getClass()); public static void main(String[] args) throws Throwable { new AnnotationConfigApplicationContext(Application.class); } (2) @Bean static PropertySourcesPlaceholderConfigurer pspc() { return new PropertySourcesPlaceholderConfigurer(); } (3) @Value("${configuration.projectName}") private String fieldValue; (4) @Autowired Application(@Value("${configuration.projectName}") String pn) { log.info("Application constructor: " + pn); } (5) @Value("${configuration.projectName}") void setProjectName(String projectName) { log.info("setProjectName: " + projectName); } (6) @Autowired void setEnvironment(Environment env) { log.info("setEnvironment: " + env.getProperty("configuration.projectName")); } (7) @Bean InitializingBean both(Environment env, @Value("${configuration.projectName}") String projectName) { return () -> { log.info("@Bean with both dependencies (projectName): " + projectName); log.info("@Bean with both dependencies (env): " + env.getProperty("configuration.projectName")); }; } @PostConstruct void afterPropertiesSet() throws Throwable { log.info("fieldValue: " + this.fieldValue); } } 

(1) يعد التعليق التوضيحيPropertySource اختصارًا مشابهًا للعنصر property-placeholder ، والذي يقوم بإعداد مصدر خاصية من ملف بملحق .properties.

(2) يحتاج PropertySourcesPlaceholderConfigurer إلى التسجيل كحبة فول ثابتة ، حيث إنه عبارة عن تنفيذ لـ BeanFactoryPostProcessor ويجب استدعاؤه في مرحلة مبكرة من دورة حياة التهيئة في حبة الربيع. عند استخدام مكونات الفول في تكوين Spring XML ، لن تكون هذه الفروق الدقيقة مرئية.

(3) يمكنك تزيين الحقول بالتعليق التوضيحي للقيمة (ولكن لا تفعل ذلك ، وإلا لن يجتاز الكود الاختبار!) ...

(4) ... أو يمكن أن تضيف التعليقات التوضيحية للقيمة معلمات المُنشئ ...

(5) ... أو استخدام طرق التثبيت ...

(6) ... أو تضمين كائن Spring Environment وتنفيذ دقة المفتاح يدويًا.

(7) يمكن أيضًا استخدام المعلمات ذات التعليق التوضيحي للقيمة في موفر وسيطة طريقة Bean في تكوين Spring Java.

في هذا المثال ، يتم تحميل القيم من ملف simple.properties ، ثم تحتوي على القيمة config.projectName ، والتي يتم توفيرها بطرق مختلفة.

الملامح


من بين أمور أخرى ، يقدم تجريد البيئة لمحات . يسمح لك ذلك بتعيين تصنيفات (ملفات تعريف) من أجل تجميع مكونات الفول. يجب استخدام الملفات الشخصية لوصف مكونات الفول والرسوم البيانية الفول التي تختلف من بيئة إلى أخرى. يمكن تنشيط العديد من الملفات الشخصية في وقت واحد. يتم دائمًا تنشيط الفاصوليا التي لم يتم تخصيص ملفات تعريف لها. يتم تنشيط الفاصوليا التي لها ملف تعريف افتراضي فقط إذا لم يكن لديها ملفات تعريف نشطة أخرى. يمكن تحديد سمة ملف التعريف في تعريف مكون الحبة في XML أو في فئات العلامات ، أو فئات التكوين ، أو مكونات الحبة الفردية ، أو في طرق موفر الحبة باستخدام ملف التعريف .

تسمح لك الملفات الشخصية بوصف مجموعات من مكونات الفول التي يجب إنشاؤها في بيئة مختلفة إلى حد ما عن بيئة أخرى. في ملف تعريف dev التطوير المحلي ، على سبيل المثال ، يمكنك استخدام مصدر بيانات H2 المدمج javax.sql.DataSource ، وبعد ذلك ، عندما يكون ملف تعريف المنتج نشطًا ، قم بالتبديل إلى مصدر بيانات javax.sql.DataSource الذي تم الحصول عليه باستخدام بحث JNDI أو من خلال قراءة الخصائص من متغير البيئة في Cloud Foundry . في كلتا الحالتين ، ستعمل التعليمات البرمجية الخاصة بك: تحصل على javax.sql.DataSource ، ولكن يتم اتخاذ القرار بشأن المثيل المحدد لاستخدامه عن طريق تنشيط ملف تعريف واحد أو عدة (مثال 3.5).

مثال 3.5 إثبات أن فئات تكوين @ يمكن تحميل ملفات التكوين المختلفة وتوفير حبوب مختلفة بناءً على
ملف تعريف نشط

 package profiles; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.*; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; @Configuration public class Application { private Log log = LogFactory.getLog(getClass()); @Bean static PropertySourcesPlaceholderConfigurer pspc() { return new PropertySourcesPlaceholderConfigurer(); } (1) @Configuration @Profile("prod") @PropertySource("some-prod.properties") public static class ProdConfiguration { @Bean InitializingBean init() { return () -> LogFactory.getLog(getClass()).info("prod InitializingBean"); } } @Configuration @Profile({ "default", "dev" }) (2) @PropertySource("some.properties") public static class DefaultConfiguration { @Bean InitializingBean init() { return () -> LogFactory.getLog(getClass()).info("default InitializingBean"); } } (3) @Bean InitializingBean which(Environment e, @Value("${configuration.projectName}") String projectName) { return () -> { log.info("activeProfiles: '" + StringUtils.arrayToCommaDelimitedString(e.getActiveProfiles()) + "'"); log.info("configuration.projectName: " + projectName); }; } public static void main(String[] args) { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(); ac.getEnvironment().setActiveProfiles("dev"); (4) ac.register(Application.class); ac.refresh(); } } 

(1) سيتم حساب فئة التكوين هذه وجميع تعريفات فول الواردة فيها فقط إذا كان ملف تعريف المنتج نشطًا.

(2) سيتم حساب فئة التكوين هذه وجميع تعريفات Bean الواردة فيه فقط إذا كان ملف تعريف dev نشطًا أو لم يكن هناك ملف تعريف نشط ، بما في ذلك dev.

(3) يقوم مكون InitializingBean هذا ببساطة بتسجيل ملف التعريف النشط حاليًا وإدخال القيمة التي تم إدخالها في النهاية في ملف الخصائص.

(4) يعد تنشيط ملف تعريف (أو ملفات تعريف) برمجيًا أمرًا بسيطًا للغاية.

يستجيب Spring للعديد من طرق تنشيط الملف الشخصي الأخرى باستخدام رمز spring_profiles_active أو spring.profiles.active. يمكن تعيين ملف تعريف باستخدام متغير بيئة (على سبيل المثال ، SPRING_PROFILES_ACTIVE) ، أو خاصية JVM (‑Dspring.profiles.active = ...) ، أو معلمة تهيئة تطبيق servlet ، أو برمجيًا.

التكوين الغني


يحسن Spring Boot الوضع بشكل ملحوظ. ستقوم البيئة في البداية بتحميل الخصائص تلقائيًا من التسلسل الهرمي للمواقع المحددة مسبقًا. تتجاوز وسيطات سطر الأوامر قيم الخصائص المشتقة من JNDI ، والتي تتجاوز الخصائص التي تم الحصول عليها من System.getProperties () ، إلخ.

- الحجج سطر الأوامر.
- سمات JNDI من جافا: comp / env.
- خصائص System.getProperties ().
- متغيرات بيئة نظام التشغيل.
- ملفات الخصائص الخارجية في نظام الملفات: (config /)؟ Application. (Yml.properties).
- ملفات الخصائص الداخلية في الأرشيف (config /)؟ Application. (Yml.properties).
- تعليق توضيحيPropertySource في فئات التكوين.
- خصائص المصدر من SpringApplication.getDefaultProperties ().

إذا كان الملف الشخصي نشطًا ، فسيتم تلقائيًا قراءة البيانات من ملفات التكوين المستندة إلى اسم الملف الشخصي ، على سبيل المثال ، من ملف مثل src / main / resources / application-foo.properties ، حيث foo هو ملف التعريف الحالي.

إذا كانت مكتبة SnakeYAML مذكورة في مسارات الفصل الدراسي ، فسيتم أيضًا تحميل ملفات YAML تلقائيًا ، باتباع نفس الاصطلاح.

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

يتم عرض محتويات ملف بامتداد .yml في المثال 3.6.

مثال 3.6 ملف خصائص Application.yml. يتم عرض البيانات بترتيب هرمي.

 configuration: projectName : Spring Boot management: security: enabled: false 

بالإضافة إلى ذلك ، تسهل بيئة Spring Boot الحصول على النتيجة الصحيحة في الحالات العامة. يتحول وسيطات -D إلى متغيرات بيئة العمل والجافا المتاحة كخصائص. حتى أنها تنفذ تطبيعها ، حيث يكون متغير البيئة $ CONFIGURATION_PROJECTNAME (PROJECT_NAME CONFIGURATION) أو الوسيطة -D في النموذج –Dconfiguration.projectName (config.project_name) متاحة باستخدام مفتاح config.projectName (config.project_name) تمامًا كما كان من قبل الرمز المميز spring_profiles_active متاح.

قيم التكوين هي سلاسل ، وإذا كانت كافية ، يمكن أن تصبح غير قابلة للقراءة عند محاولة التأكد من أن هذه المفاتيح لا تصبح نفسها سلاسل سحرية في التعليمات البرمجية. يقدم Spring Boot نوع المكونConfigurationProperties. عند التعليق على POJO - كائن Java قديم عادي - باستخدامConfigurationProperties وتحديد البادئة ، سيحاول Spring تعيين جميع الخصائص بدءًا من هذا البادئة إلى خصائص POJO. في المثال أدناه ، سيتم تعيين قيمة config.projectName لمثيل POJO ، والذي يمكن لكل الشفرة بعد ذلك إدخاله والتعرف عليه لقراءة القيم الآمنة للنوع. ونتيجة لذلك ، سيكون لديك تعيين فقط من مفتاح (سلسلة) في مكان واحد (مثال 3.7).

مثال 3.7. حل الخصائص تلقائيًا من src / main / resources / application.yml
حزمة التمهيد ؛

 import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Component; (1) @EnableConfigurationProperties @SpringBootApplication public class Application { private final Log log = LogFactory.getLog(getClass()); public static void main(String[] args) { SpringApplication.run(Application.class); } @Autowired public Application(ConfigurationProjectProperties cp) { log.info("configurationProjectProperties.projectName = " + cp.getProjectName()); } } (2) @Component @ConfigurationProperties("configuration") class ConfigurationProjectProperties { private String projectName; (3) public String getProjectName() { return projectName; } public void setProjectName(String projectName) { this.projectName = projectName; } } 

(1) يشير التعليق التوضيحيEnableConfigurationProperties إلى Spring لتعيين الخصائص إلى POJOs المشروحة بـConfigurationProperties.

(2) يوضح التعليق التوضيحيConfigurationProperties الربيع أنه يجب استخدام هذا الحبة كجذر لجميع الخصائص التي تبدأ بالتكوين. ، متبوعًا بالرموز المميزة التي تتطابق مع خصائص الكائن.

(3) سيحتوي حقل اسم المشروع في النهاية على القيمة المعينة لمفتاح خاصية config.projectName.

يستخدم Spring Boot بنشاط آليةConfigurationProperties لمنح المستخدمين القدرة على تجاوز المكونات الأولية للنظام. قد تلاحظ أن مفاتيح الخصائص تسمح لك بإجراء تغييرات ، على سبيل المثال ، عن طريق إضافة تبعية org.springframework.boot: spring-boot-starter-actuator إلى تطبيق Spring Boot على الويب ، ثم زيارة الصفحة 127.0.0.1 : 8080 / configprops.

ستتم مناقشة نقاط نهاية المشغل بمزيد من التفصيل في الفصل 13. وهي مقفلة وتتطلب اسم مستخدم وكلمة مرور افتراضيين. يمكن تعطيل إجراءات الأمان (ولكن فقط لإلقاء نظرة على هذه النقاط) من خلال تحديد management.security.enabled = false في ملف application.properties (أو في application.yml).

ستحصل على قائمة بخصائص التهيئة المدعومة استنادًا إلى الأنواع المقدمة في مسارات الفصل في وقت التشغيل. مع نمو عدد أنواع أحذية الربيع ، سيتم عرض خصائص إضافية. ستعرض نقطة النهاية هذه أيضًا الخصائص التي تم تصديرها بواسطة POJOs التي تحتوي على التعليق التوضيحيConfigurationProperties.

تكوين مسجل مركزي باستخدام Spring Configuration Server


كل شيء على ما يرام حتى الآن ، لكن الأمور تحتاج إلى أن تكون أكثر نجاحًا. ما زلنا لم نجب على الأسئلة المتعلقة بحالات الاستخدام الشائعة:

  • بعد التغييرات التي تم إجراؤها على تكوين التطبيق ، يلزم إعادة التشغيل ؛
  • لا إمكانية للتتبع: كيفية تحديد التغييرات التي تم تنفيذها ، وإذا لزم الأمر ، قم بإعادتها؟
  • التكوين لامركزي ؛ ليس من الواضح على الفور أين يجب إجراء التغييرات من أجل تغيير جانب أو آخر ؛
  • لا يوجد دعم التثبيت للترميز وفك التشفير لأغراض أمنية.

خادم تهيئة سحابة الربيع


يمكن حل مشكلة مركزة التكوين عن طريق حفظ التكوين في دليل واحد وتوجيه جميع التطبيقات إليه. يمكنك أيضًا تثبيت التحكم في إصدار هذا الدليل باستخدام Git أو Subversion. ثم سيتم تلقي الدعم اللازم للتحقق والتسجيل. لكن المتطلبين الأخيرين لن يتم استيفاؤهما بعد ، لذا هناك حاجة إلى شيء أكثر تعقيدًا. انتقل إلى خادم تهيئة Spring Cloud . يقدم نظام Spring Cloud الأساسي خادم تكوين وعميلًا لهذا الخادم.

خادم Spring Cloud Config عبارة عن واجهة برمجة تطبيقات REST سيتصل بها عملاؤنا لاسترداد تكوينهم. يقوم الخادم أيضًا بإدارة مستودع تكوين تحكم الإصدار. إنه وسيط بين عملائنا ومستودع التكوين ، وبالتالي فهو في وضع ملائم لتطبيق أدوات الأمان لربط الاتصالات من العملاء بالخدمة والاتصالات من الخدمة إلى مستودع التكوين مع التحكم في الإصدار. يوفر عميل Spring Cloud Config لتطبيقات العميل نطاقًا جديدًا ، وتحديثًا ، مما يسمح لك بتكوين مكونات Spring مرة أخرى دون الحاجة إلى إعادة تشغيل التطبيق.

تلعب تقنيات مثل خادم Spring Cloud Config دورًا مهمًا ، ولكنها تتطلب نفقات إضافية. من الناحية المثالية ، يجب نقل هذه المسؤولية إلى النظام الأساسي وأتمتة. عند استخدام Cloud Foundry ، يمكنك العثور على خدمة Config Server في كتالوج الخدمة ، والتي تعتمد إجراءاتها على استخدام خادم Spring Cloud Config.

فكر في مثال بسيط. أولاً ، قم بتهيئة خادم Spring Cloud Config. يمكن الوصول إلى هذه الخدمة من خلال العديد من تطبيقات Spring Boot في وقت واحد. تحتاج إلى جعلها تعمل في مكان ما وبطريقة ما. ثم يبقى فقط لإخطار جميع خدماتنا حول مكان العثور على خدمة التكوين. يعمل كنوع من الوسيط لمفاتيح وقيم التكوين التي يقرأها من تخزين Git عبر الشبكة أو من القرص. أضف السلسلة org.springframework.cloud: spring-cloud-config-server إلى تجميع تطبيق Spring Boot للدخول إلى خادم Spring Cloud Config (مثال 3.8).

مثال 3.8. لتضمين خادم تكوين في التجميع ، استخدم التعليق التوضيحيEnableConfigServer

 package demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; (1) @SpringBootApplication @EnableConfigServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

(1) يؤدي استخدام التعليق التوضيحيEnableConfigServer إلى تثبيت خادم Spring Cloud Config.

يوضح المثال 3.9 التكوين لخدمة التكوين.

مثال 3.9. تكوين خادم التكوين src / main / resources / application.yml

server.port = 8888
spring.cloud.config.server.git.uri = \
github.com/cloud-native-java/config-server-configuration-repository (1)

(1) إشارة إلى مستودع Git عامل محلي في طبيعته أو يمكن الوصول إليه عبر الشبكة (على سبيل المثال ، على GitHub (https://github.com/)) ويستخدمه خادم Spring Cloud Config.

هنا ، يتم توجيه خدمة تهيئة Spring Cloud للبحث عن ملفات التكوين للعملاء الفرديين في مستودع Git على GitHub. أشرنا إلى هذا المستودع ، ولكن الرابط لأي Git URI صالح سيفعل. بالطبع ، ليس عليه حتى التقدم بطلب إلى نظام Git ، يمكنك استخدام التخريب أو حتى الأدلة غير المُدارة (على الرغم من أننا نوصي بشدة بعدم القيام بذلك). في هذه الحالة ، يكون URI للتخزين مشفرًا ، ولكن لا يوجد شيء يمنع استلامه من الوسيطة -D أو الوسيطة أو من متغير بيئة.

»يمكن العثور على مزيد من المعلومات حول الكتاب على موقع الناشر على الويب
» المحتويات
» مقتطفات

خصم 20٪ على قسيمة Java Fermenters - Java

Source: https://habr.com/ru/post/ar425109/


All Articles