مقدمة
ستركز هذه المقالة على شرح استخدام التعليق التوضيحي لـ propertysource في الربيع وكيفية تحميل ملف التكوين المحدد من خلال شرح PropertySource. كما أنه يستخدم شرح PropertySource وشروط @ConfigurationProperties. لن أقول الكثير أدناه ، دعنا نتعلم وندرس المحرر.
1.1. يقوم توضيح PropertySource بتحميل ملف الخصائص المحدد
يوفر Framework Spring PropertySource تعليقًا ، بغرض تحميل ملف الخصائص المحدد. بعد ذلك ، دعونا نلقي نظرة على كيفية استخدام هذا التعليق التوضيحي. أولاً ، نحدد فئة التكوين وإضافة تعليقات PropertySource إلى الفصل على النحو التالي:
@component@propertySource (value = {"classpath: config/jdbc-bainuo-dev.properties"} ، ignoreresourcenotfound = false ، charding = "utf-8" ، name = "url url url ؛ السلسلة العامة geturl () {return url ؛ } public void seturl (url url) {this.url = url ؛ } Override public string toString () {return "customerDatasourCeConfig {" + "url = '" + url +'/' +'} '؛ }} الغرض من الكود أعلاه هو تحميل jdbc-bainuo-dev.properties في ملف التكوين في مسار classpath. عند استخدام الترميز لتحديد الترميز المستخدم لقراءة ملف الخصائص ، عادة ما نستخدم UTF-8 ؛ تعني IgnorerEsourCenotFound ما إذا كان تم الإبلاغ عن خطأ عند عدم وجود ملف التكوين المحدد ، والافتراضي ضئيل ؛ على سبيل المثال ، ملف خاصية التحميل المحدد أعلاه هو jdbc-bainuo-dev.properties . إذا لم يكن الملف موجودًا ، فلن يقوم البرنامج بالإبلاغ عن خطأ عندما يكون straderResourCenotFound صحيحًا. إذا كان IgnorerEsourcenotFound خطأ ، فسيقوم البرنامج بالإبلاغ عن خطأ مباشرة. في تطوير المشروع الفعلي ، من الأفضل ضبط straderesourcenotfound على False. القيمة الافتراضية لهذه المعلمة خاطئة.
قيمة القيمة هي تعيين ملف السمة المراد تحميله ، ويمكن تحميل خصائص متعددة في وقت واحد. قيمة الاسم التي قمنا بتعيينها هي jdbc-bainuo-dev.properties . يجب أن تكون هذه القيمة فريدة من نوعها في بيئة Springboot ، إن لم تكن محددة ، القيمة هي: " class path resource [config/jdbc-bainuo-dev.properties] ".
قد يتساءل كثير من الناس عن سبب كونه " class path resource [config/jdbc-bainuo-dev.properties] "؟ يتضمن ذلك مورد فئة التغليف في فصل الربيع لملفات الموارد. القيمة التي قمنا بتكوينها أعلاه هي " classpath:config/jdbc-bainuo-dev.properties " ، لذلك وجد الربيع أنه يبدأ بـ classpath ، وبالتالي فإن النهاية تستخدم الفئة الفرعية ClassPathResource. إذا بدأ ملف ، فإن الفصل الذي تنتهي استخدامه هو FileSystemResource.
بعد فهم فئة الموارد الموصوفة أعلاه. دعنا نوضح مرة أخرى أنه إذا لم يتم تعيين قيمة الاسم في propertysource ، فإن قاعدة توليد قيمة اسم الاسم هي: ابحث عن الفئة الفرعية المورد النهائية المغلفة استنادًا إلى قيمة القيمة ، ثم استدعاء طريقة GetDescription في كائن مثيل الفئة الفرعية المحددة للموارد. قيمة الإرجاع لطريقة getDescription هي قيمة الاسم النهائي.
على سبيل المثال ، يتم تنفيذ طريقة getDescription في فئة ClassPathResource على النحو التالي:
السلسلة العامة getDescription () {StringBuilder Builder = new StringBuilder ("Class Path Resource [") ؛ سلسلة pathtouse = المسار ؛ if (this.clazz! = null &&! pathtouse.startswith ("/")) {builder.append (classutils.classpackageasourcepath (this.clazz)) ؛ builder.append ('/') ؛ } if (pathtouse.startswith ("/")) {pathtouse = pathtouse.substring (1) ؛ } builder.append (pathtouse) ؛ builder.append (']') ؛ إرجاع builder.tostring () ؛} يمكن إعجاب منطق معالجة الاسم أعلاه مؤقتًا ، وسيتم تتبع رمز المصدر بالتفصيل للتفسير في المستقبل.
1.2. يقوم توضيح PropertySource بتحميل اختبار ملف الخصائص المحدد
في ما سبق ، قمنا بإعداد شرح PropertySource لتحميل ملف "classpath:config/jdbc-bainuo-dev.properties" . يظهر هيكل دليل هذا الملف في الشكل أدناه:
محتوى ملف JDBC-Bainuo-dev.properties هو كما يلي:
spring.datasource.shareniu.url = shareniu
محتويات ملف Application.Properties هي كما يلي:
spring.profiles.active = dev
في ملف التكوين أعلاه ، فإن الخاصية spring.profiles.active تكوين البيئة الحالية المستخدمة هي Dev. spring.datasource.shareniu.url هي مجرد خاصية عادية وليس لها معنى خاص في حد ذاته.
لنبدأ في كتابة فصل بدء التشغيل في Springboot على النحو التالي:
springbootapplicationpublicpublicpublication demoapplication {public static void main (string [] args) {SpringApplication springapplication = new SpringApplication (demoapplication.class) ؛ configurableApplicationContext configurableApplicationContext = springapplication.run (args) ؛ CustomerDatasourCeConfig1 CustomerDataSourCeConfig = configurableApplicationContext .getBean (CustomerDatasourCeConfig1.class) ؛ System.out.print (CustomerDatasourCeConfig) ؛}} قم بتشغيل الرمز أعلاه وإخراج البرنامج كما يلي:
CustomerDatasourCeConfig {url = 'null'} غريب ، لماذا عنوان URL فارغ؟ ألم يكن شرح PropertySource تحميل ملف jdbc-bainuo-dev.properties في البيئة الحالية؟ قد نحاول أيضًا معرفة ما إذا كان يمكن الحصول على spring.datasource.shareniu.url في jdbc-bainuo-dev.properties ، ثم التحقق من الجانب من أن توضيح Propertysource قام بتحميل ملف jdbc-bainuo-dev.properties إلى البيئة الحالية.
قم بتعديل رمز فئة بدء التشغيل أعلاه على النحو التالي:
springbootapplicationpublicpublicpublication demoapplication {public static void main (string [] args) {SpringApplication springapplication = new SpringApplication (demoapplication.class) ؛ configurableApplicationContext configurableApplicationContext = springapplication.run (args) ؛ customerDatasourCeConfig1 customerDataSourCeConfig = configurableApplicationContext.getBean (CustomerDataSourCeConfig1.class) ؛ property string = configurableApplicationContext.getenVironment (). getProperty ("spring.datasource.shareniu.url") ؛ System.out.println (Property) ؛ System.out.print (CustomerDatasourCeConfig) ؛}} قم بتشغيل الرمز أعلاه وإخراج البرنامج كما يلي:
Shareniu
من الكود أعلاه ، يمكننا أن نرى أن PropertySource فعال بالفعل. فكيف يمكننا تلقائيًا حقن spring.datasource.shareniu.url .
1.3. يقرأ شرح PropertySource الملف المحدد ويحقق الخصائص في فئة التكوين
يوفر SPRINGER @Value تعليقًا على قيم السمة في ملف التكوين وتعيينها في السمات المقابلة. نحن هنا نتعلم كيفية استخدام @Value annotation. وينطبق الشيء نفسه على الفئتين في النص أعلاه كأمثلة للتفسيرات التفصيلية. أولاً ، تحتاج إلى تعديل فئة CustomerDataSourCeConfig1. جزء التعديل كما يلي:
@component@propertySource (name = "jdbc-bainuo-dev.properties" ، value = {"classpath: config/jdbc-bainuo-dev.properties"} ، ignoreresourcenotfound = false ، enchoding = "utf-8") clientdatasourconfig1 { value ("$ {spring.datasource.shareniu.url}") url url ؛} في الفئة أعلاه ، تتم إضافة توضيح Value إلى حقل عنوان URL ويتم تحديد تعبير SPEL على أنه ${spring.datasource.shareniu.url} . قم بتشغيل فئة Boot Springboot مرة أخرى وإخراج وحدة التحكم هو Shareniu. إنه يشير إلى أن حقن قيم السمة يمكن أن يتم بالفعل من خلال Value. ومع ذلك ، فإن أحد الجوانب الأقل ودية لاستخدام طريقة التعليقات التوضيحية Value هو أنه عندما يكون هناك عدد كبير من الخصائص في المشروع للتكوين ، نحتاج إلى إضافة توضيح قيمة إلى حقول الفصل واحدة تلو الأخرى ، وهو أمر صعب حقًا ، ولكن يمكننا حل هذه المشكلة من خلال عملية التكوين المتراكمة التي توفرها SPROOT.
1.4. ConfigurationProperties استخدام التعليق التوضيحي
ConfigurationProperties هو شرح توضيحي على مستوى الفصل ، والاستخدام المحدد هو كما يلي:
@component @configurationProperties (prefix = "spring.datasource.shareniu") propertysource (name = "jdbc-bainuo-dev.properties" ، value = {"classpath: config/jdbc-bainuo-dev.properties"} ، charveryrotsound = falpt ، customerDatasourCeConfig1 {private string url ؛ } في الكود أعلاه ، تتم إضافة توضيح ConfigurationProperties إلى فئة CustomerDatasourCeConfig1 ، وتبادلة الخاصية هي spring.datasource.shareniu . وبهذه الطريقة ، عند معالجة Springboot ، ستقوم بمسح جميع الحقول في الفئة الحالية والبحث وتجميع الخصائص. على سبيل المثال ، إذا قمنا بتكوين prefix = "spring.datasource.shareniu" ، فهناك حقل عنوان URL في فئة CustomerDatasourCeConfig1 ، فإن السمة التي يحتاجها حقل عنوان URL هو مطابقة هو prefix+ field = spring.datasource.shareniu.url .
هذا ليس مجرد سؤال؟ ماذا لو لم يجد الحقل المحدد السمة؟ يمكن تكوين هذا على النحو التالي:
@configurationProperties (prefix = "spring.datasource.shareniu" ، تجاهل Fields = true ، truleinvalidfields = true)
تجاهل Fields: تجاهل حقول غير معروفة.
تجاهل Faldfields: ما إذا كان لتجاهل الحقول التي فشلت في التحقق. كيف تفهم هذا؟ على سبيل المثال ، إذا قمنا بتكوين متغير من نوع السلسلة في ملف التكوين ، والحقول في الفصل هي من النوع int ، فستبلغ بالتأكيد عن خطأ. إذا حدث هذا ، يمكننا أن نتسامح مع أن قيمة الخصائص يجب تكوينها إلى TRUE. هذه المعلمة القيمة الافتراضية إلى false.
هذا المقال سوف يشرح هنا. في المقالة اللاحقة ، سنشرح كيف يمكن لشرح التعليقات التوضيحية لـ propertysource إدراك قراءة ملفات التكوين في بيئات مختلفة. يتم تبديل الملفات في بيئات مختلفة ديناميكيًا إلى القراءة. لا يتم دعم PropertySource افتراضيًا ، لذلك نحتاج إلى توسيع رمز المصدر المقابل لهذا التعليق التوضيحي.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.