1. الخلفية
في الآونة الأخيرة ، أثناء عملية تطوير المشروع ، واجهت المشكلة التي كنت بحاجة لتحديد بعض المتغيرات المخصصة في ملف الخصائص للقراءة الديناميكية وتغيير متغيرات برامج Java ، ولم تعد هناك حاجة لتعديل الكود. انتهزت هذه الفرصة لفرز وتحليل محتوى ملف الخصائص في مشروع التطوير المتكامل لـ Spring+SpringMVC+MyBatis من خلال برامج Java ، ومشاركته معك أولاً.
2. مقدمة بيئة المشروع
ثلاث أو خمس طرق لتنفيذها
الطريقة 1.
<سياق: property-placeholder location = "classpath: jdbc.properties" تجاهل غير قابلة للحل = "true"/>
التكوين أعلاه يعادل التكوين التالي ، وهو تبسيط للتكوين التالي
<bean id = "propertyConfigurer"> <property name = "reghoreUnResolvablePlaceholers" value = "true"/> <property name = "sortations"> <list> <value> classpath: jdbc.properties </value> </list> </sprement> </ban>
ملاحظة: بهذه الطريقة ، إذا كان لديك التكوين التالي في ملف Spring-MVC.XML ، فيجب ألا تفتقد الجزء الأحمر التالي ، حول وظيفته ومبدأه.
<!-تكوين المسح الضوئي للمكونات ، يتم مسح تعليقات مراقبة وحدة التحكم فقط في حاوية springmvc-> <السياق: مكون المستحضر الأساسي = "com.hafiz.www" use-default-filters = "false"> <contex
الطريقة 2. الحقن باستخدام التعليقات التوضيحية ، بشكل أساسي حقن القيمة المقابلة في ملف الخصائص باستخدام التعليقات التوضيحية في رمز Java.
<bean id = "prop"> <!- هذه هي فئة PropertiesFactoryBean. كما أن لديها خاصية مواقع ، والتي تتلقى أيضًا صفيفًا ، تمامًا مثل ما سبق-> <name = "المواقع"> <Sray> <value> classpath: jdbc.properties </value> </array> </property> </bean>
الطريقة 3. استخدم علامة UTIL: خصائص لفضح المحتويات في ملف الخصائص
<util: خصائص id = "propertiesReader" location = "classpath: jdbc.properties"/>
ملاحظة: باستخدام تكوين السطر أعلاه ، تحتاج إلى إعلان الجزء الأحمر التالي في رأس ملف spring-dao.xml
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" Xmlns: Context = "http://www.springframework.org/schema/context" xmlns: util = "http://www.springframework.org/schema/util http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context-ctpring-ctpr http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd ">
الطريقة 4. فضح الخصائص لخصائص الفئة الفرعية المخصصة لاستخدامها في البرنامج عند تحميل السياق من خلال PropertyPlacehloderConfigurer
<bean id = "propertyConfigurer"> <property name = "reghoreUnresolvablePlesholers" value = "true"/> <property name = "ignoreresourcenotfound" value = "true"/> <spertar
إن إعلان PropertyConfigurer المخصص للفئة المخصصة هو على النحو التالي:
package com.hafiz.www.util ؛ استيراد org.springframework.beans.beansexception ؛ استيراد org.springframework. java.util.properties ؛/*** DESC: فئة قراءة ملف الخصائص* تم إنشاؤها بواسطة Hafiz.zhang في 2016/9/14. */Public Class PropertyConfigurer يمتد propertyholderConfigurer {Private Properties Props ؛ // Access the Properties Configuration File-value-value-value result ordride processproperties (configurableListableBeanfactory BeanfactoryToprocess ، Properties Props) يرمي BeanSexception {super.processproperties (BeanfactoryToPricess ، Props) ؛ this.props = الدعائم ؛ } السلسلة العامة getProperty (مفتاح السلسلة) {return this.props.getProperty (key) ؛ } السلسلة العامة getProperty (مفتاح السلسلة ، السلسلة defaultValue) {return this.props.getProperty (مفتاح ، defaultValue) ؛ } الكائنات العامة setProperty (مفتاح السلسلة ، قيمة السلسلة) {إرجاع this.props.setProperty (المفتاح ، القيمة) ؛ }}كيفية الاستخدام: ما عليك سوى استخدام حقن التعليقات التوضيحية Autowired في الفصل الذي تحتاج إلى استخدامه.
الطريقة 5. تخصيص PropertyUtil ، وقراءة محتوى ملف الخصائص في كتلة التعليمات البرمجية الثابتة للفئة وحفظها في الخاصية الثابتة لاستخدامها من قبل البرامج الأخرى.
حزمة com.hafiz.www.util ؛ استيراد org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ استيراد java.io. */public class propertyUtil {private static final logger = loggerfactory.getLogger (propertyUtil.class) ؛ الخصائص الثابتة الخاصة. ثابت {loadProps () ؛ } متزامن الثابتة private void loadprops () {logger.info ("بدء تحميل خصائص ملفات الملف ......") ؛ الدعائم = خصائص جديدة () ؛ inputStream في = null ؛ جرب {<!-النوع الأول ، الحصول على دفق ملف الخصائص من خلال تحميل الفئة-> في = propertyUtil.class.getClassLoader (). getResourCeasStream ("jdbc.properties") ؛ <!-النوع الثاني ، الحصول على دفق ملف الخصائص من خلال الفئة-> // في = propertyUtil.class.getResourCeasStream ("/jdbc.properties") ؛ props.load (in) ؛ } catch (FileNotfoundException e) {logger.error ("ملف jdbc.properties غير موجود") ؛ } catch (ioException e) {logger.error ("يظهر ioException") ؛ } أخيرًا {try {if (null! = in) {in.close () ؛ }} catch (ioException e) {logger.error ("استثناء مغلق مع تدفق ملف JDBC.Properties مغلق") ؛ }} logger.info ("تحميل محتوى ملف الخصائص .........") ؛ logger.info ("محتوى ملف الخصائص:" + الدعائم) ؛ } سلسلة ثابتة getProperty (مفتاح السلسلة) {if (null == props) {loadProps () ؛ } return props.getProperty (key) ؛ } السلسلة الثابتة العامة getProperty (مفتاح السلسلة ، السلسلة defaultValue) {if (null == props) {loadProps () ؛ } return props.getProperty (المفتاح ، defaultValue) ؛ }}ملاحظة: وبهذه الطريقة ، عند تحميل الفصل ، سيتم قراءة محتوى ملف التكوين تلقائيًا في الموقع المحدد وحفظه على خصائص ثابتة ، وهو فعال ومريح ، ويمكن تحميله في وقت واحد واستخدامه عدة مرات.
4. الاحتياطات والاقتراحات
الطرق الثلاثة الأولى صلبة في الطرق الخمسة أعلاه. وإذا كنت ترغب في استخدامها في فول مع شرح Controller ، فأنت بحاجة إلى إعلانها في ملف تكوين SpringMVC spring-mvc.xml. إذا كنت ترغب في استخدامها في الفول مع Service و @Dersepository ، وما إلى ذلك ، فأنت بحاجة إلى إعلانها في spring.xml في ملف تكوين الربيع.
أنا شخصياً أوصي بطرق التكوين الرابعة والخامسة. الخامس هو الأفضل. لا تحتاج حتى إلى حقنها في كائن يشبه الأداة ، ويدعو مباشرة الطريقة الثابتة للاستحواذ ، ولا يتم تحميله إلا مرة واحدة ، وهو أيضًا فعال للغاية. علاوة على ذلك ، فإن الأساليب الثلاثة الأولى ليست مرنة للغاية ، وتتطلب القيمة الرئيسية لـ Value.
5. اختبار للتحقق مما إذا كان متاحًا
1. أولاً نخلق propertiesservice
حزمة com.hafiz.www.service ؛/** * DESC: يحصل برنامج Java على خدمة محتوى ملف الخصائص * الذي تم إنشاؤه بواسطة Hafiz.zhang في 2016/9/16. */الواجهة العامة propertiesservice {/** * تحصل طريقة التنفيذ الأولى على قيمة المفتاح المحدد في ملف الخصائص * * return */string getProperyBeryFirstway () ؛ / ** * تحصل طريقة التنفيذ الثانية على قيمة المفتاح المحدد في ملف الخصائص * * return */ string getProperyBySecondway () ؛ / ** * تحصل طريقة التنفيذ الثالثة على قيمة المفتاح المحدد في ملف الخصائص * * @RETURN */ String getProperyByThirdway () ؛ / ** * تحصل طريقة التنفيذ الرابعة على قيمة المفتاح المحدد في ملف الخصائص * * @param Key * * regurn */ string getProperyByFourthway (مفتاح السلسلة) ؛ / ** * تحصل طريقة التنفيذ الرابعة على قيمة المفتاح المحدد في ملف الخصائص * * param Key * * param defaultValue * * return */ string getProperyByFourthway (مفتاح السلسلة ، السلسلة defaultValue) ؛ / ** * تحصل طريقة التنفيذ الخامسة على قيمة المفتاح المحدد في ملف الخصائص * * param Key * * regurn */ string getProperyByFifthway (مفتاح السلسلة) ؛ / ** * طريقة التنفيذ الخامسة للحصول على قيمة المفتاح المحدد في ملف الخصائص * * @param مفتاح * * param defaultValue * * regurn */ string getProperyBeryFifthway (مفتاح السلسلة ، السلسلة defaultValue) ؛}2. إنشاء وتنفيذ الفئة propertiesserviceimpl
package com.hafiz.www.service.impl ؛ استيراد com.hafiz.www.service.propertiesservice ؛ استيراد com.hafiz.www.util.propertyConfigurer ؛ استيراد com.hafiz.www.util.propertyutil ؛ استيراد org.springframework.bringork.factory org.springframework.beans.factory.annotation.value ؛ استيراد org.springframework.stereotype.service ؛/*** desc: يحصل برنامج Java على فئة تنفيذ الخدمة للخدمة التي تحصل على محتوى ملف الخصائص* التي تم إنشاؤها بواسطة hafiz.zhang في 2016/9/16. */ @servicepublic class propertiesserviceImpl تنفذ propertiesservice {value ("$ {test}") سلسلة testDatabyFirst الخاصة ؛ Value ("#{prop.test}") سلسلة خاصة testDatabySecond ؛ value ("#{propertiSreader [test]}") سلسلة خاصة testDatabyThird ؛ Autowired Private PropertyConfigurer PC ؛ Override public string getProperyByFirstway () {return testDatabyFirst ؛ } Override public string getProperyBySecondway () {return testDatabySecond ؛ } Override public string getProperyByThirdway () {return testDatabyThird ؛ } Override public string getProperyByFourThway (مفتاح السلسلة) {return pc.getProperty (key) ؛ } Override public string getProperyBeryFourthway (مفتاح السلسلة ، سلسلة defaultValue) {return pc.getProperty (المفتاح ، defaultValue) ؛ } Override public string getProperyBeryFifthway (مفتاح السلسلة) {return propertyUtil.getPropery (key) ؛ } Override public string getProperyBeryFifthway (مفتاح السلسلة ، السلسلة defaultValue) {return propertyUtil.getProperty (المفتاح ، defaultValue) ؛ }}3. جهاز التحكم PropertyController
package com.hafiz.www.controller ؛ استيراد com.hafiz.ww.service.propertiesservice ؛ استيراد com.hafiz.www.util.propertyutil ؛ استيراد org.springframework.beans.factory.annotation. org.springframework.web.bind.annotation.pathvariable ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.requestmethod ؛ DESC: تحكم اختبار الخصائص* تم إنشاؤه بواسطة Hafiz.zhang في 2016/9/16. */@controller@requestMapping ("/prop") propertyController {autowired priperiesService ps ؛ requestmapping (value = "/way/first" ، method = requestMethod.get) ersponsebody public getPropertyByFirstway () {return ps.getProperyBeryByFirstway () ؛ } requestMapping (value = "/way/second" ، method = requestMethod.get) @Responsebody public getPropertyBySeconDway () {return ps.getProperyBysEconDway () ؛ } requestMapping (value = "/way/third" ، method = requestMethod.get) @Responsebody public getPropertyByThirdway () {return ps.getProperyByThirdway () ؛ } requestMapping (value = "/way/fourth/{key}" ، method = requestMethod.get) responsebody public getPropertyByFourthway (pathvariable ("key" key) } requestmapping (value = "/way/fifth/{key}" ، method = requestMethod.get) responseBond public getPropertyByFifthway (pathvariable ("key" key) }}4.jdbc.properties ملف
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc: mysql: //192.168.1.196: 3306/dev؟ useUnicode = true & directionEncoding = utf-8jdbc.username = rootjdbc.password = 123456jdcaxa ctive = 200jdbc.minidle = 5jdbc.initialsize = 1jdbc.maxwait = 60000jdbc.timeBetweenevictionRunsmillis = 60000jdbc.mineVictableDletimemillis = 300000Jdbc.validationQuery = Select 1 from t_userjdbc.testwhileIdle = truejdbc.testonreturn = falsejdbc.poolpropedstatements = truejdbc.maxpoolpropedStateMentPerConnectionize = 20jdbc.filters = stat#test datatest = com.hafiz.www
5. مخطط نتيجة المشروع
6. تنزيل المشروع: DEMO
7. نتائج الاختبار
الطريقة الأولى
الطريقة الثانية
الطريقة الثالثة
الطريقة الرابعة
الطريقة الخامسة
6. ملخص
من خلال هذا الاستعراض والاختبار ، نفهم دور ومبدأ علاقة حاوية الوالدين بين الربيع و springMVC وسمة مرشحات الاستخدام التي يمكن التغاضي عنها بسهولة عند مسح السياق: حزمة علامة المسح الضوئي. كن قادرًا على تحديد موقع المشكلات التي تمت مواجهتها مرة أخرى وحلها بسرعة. على أي حال ، عظيم ~~~
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.