في عملية نقل مشروع SpringMVC إلى Springboot ، تم القيام بالأشياء التالية بشكل أساسي
بالإضافة إلى تقديم ماذا وكيفية القيام بذلك ، سيكون لهذا المقال الكثير من الهراء غير الضروري. لبعض المناقشات حول المبدأ ، يجب أن تعرف أيضًا السبب.
تكوين الملف الشخصي
في مشاريع الربيع التقليدية ، تتمثل طريقة التكوين في ملفات تعريف متعددة في كتابة ملفات تعريف متعددة في ملف pom.xml ، ثم تحميل بيئة الملف الشخصي المحدد عن طريق تنفيذ ملف Maven قبل بدء المشروع. بعد التحميل ، عند تنفيذ المشروع ، سيقرر ملف .properties لتحميله في المتغير العالمي استنادًا إلى البيئة المحملة.
وإدارة ملفات تعريف متعددة في سبرينغ بوت بسيطة للغاية.
يمكنك تحديد ملف تعريف عند تشغيل حزمة JAR باستخدام سطر الأوامر
java -jar example.jar -spring.profiles.active = اختبار
أو تكوينه في تطبيق التكوين العالمي.
إضافة spring.profiles.active = اختبار في التطبيق.
يمكن أن تبدأ كلتا الطريقتين المذكورة أعلاه ملف تعريف "الاختبار" ، والآخر له أولوية أعلى في التنفيذ من الأخير.
(بالمناسبة ، في Springboot ، تستخدم هاتان الطريقتان بشكل أساسي طريقة "التكوين الخارجي" لتحرير البيئة واستبدالها)
بالإضافة إلى ذلك ، يتم تكوين كل ملفات تعريف مستقلة بتنسيق "Application-xxx.properties" لكل بيئة مختلفة ، على سبيل المثال:
عندما نحتاج إلى اختبار ما إذا كان يتم تحميل ملف التعريف بشكل طبيعي ، يمكننا كتابته في ملف .properties المقابل
server.port = 9080
يمكنك معرفة ما إذا كان هذا المنفذ قد بدأ عند بدء التشغيل.
هنا يمكنك ذكر الترتيب الذي يقوم فيه Springboot بتحميل ملفات التكوين
تتم قراءة المتغيرات العالمية من ملف الخصائص
في القسم السابق ، كتبنا تكوين الخصائص لبيئات مختلفة. هنا سوف نكتب حول ما إذا كانت هذه الخصائص مكتوبة في متغيرات عالمية ، وهو مناسب للمكالمات المباشرة في أماكن أخرى لاحقًا.
/*** متغير عالمي*/فئة عامة Global {public Static String exampath ؛ value ("$ {example_path}") public void setExamplePath (string example) {global.exampleath = exampleath ؛ }} بهذه الطريقة ، سنضع ملف .properties في
example_path = http: // localhost: 9090
تتم قراءة هذه الخاصية في المتغير العالمي.
مصدر البيانات وتكوين MyBatis
في مشروع الربيع التقليدي ، استخدم MyBatis للاتصال بقاعدة البيانات
تم تكوين كل هذا في ملف تكوين XML ، وهو أمر مرهق تمامًا. في Springboot ، حاول تجنب تكوين XML هذا.
قدمت MyBatis الآن الدعم لـ Springboot. نحتاج فقط إلى إضافة تبعية mybatis-spring-boot-starter ، وسوف يفعل ما يلي بالنسبة لنا:
لذلك ، في تكوين MyBatis لـ Springboot ، نحتاج إلى القيام بما يلي:
املأ معلومات قاعدة البيانات في Application- {profile} .properties ، على سبيل المثال:
spring.datasource.url = jdbc: Oracle: Thin:@// localhost: 1234/acplesspring.datasource.username = rootspring.datasource.password = 123456spring.datas urce.driver-class-name = oracle.jdbc.driver.oracledRiverspring.Datasource.MaxActive = 10Spring.Datasource.Maxidle = 5Spring.Datasource.MaxWait = -1
وبهذه الطريقة ، نقوم بتسجيل حبة البيانات في سياق الربيع.
قم بإنشاء ملف mybatisconfig واستبدل XML بـ Java:
/*** تم إنشاؤه بواسطة Wutaoyu في 2017/12/7. */@configuration@enableTransActionManagement@mapperscan ("com.example.db.dao") الفئة العامة mybatisconfig {autowired private datasource dataSource ؛ bean (name = "sqlsessionfactory") sqlsessionfactory sqlsessionfactorybean () {sqlsessionfactorybean sqlsession = sqlsessionfactorybean () ؛ sqlsession.setDatasource (DataSource) ؛ جرب {// إضافة دليل XML ResourteStoLvern Resolver = New PathMatchingResourcePatternResolver () ؛ sqlsession.setMapperLocations (resolver.getResources ("classpath: mapping/*. xml")) ؛ إرجاع sqlsession.getObject () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ رمي new RunTimeException (e) ؛ }} bean public sqlsessionTemplate sqlsessionTemplate (sqlsessionfactory sqlsessionfactory) {return sqlsessionTemplate (sqlsessionfactory) ؛ } Bean platformTransActionManager annotationDrivenRansActionManager () {return New DataSourCetransActionManager (dataSource) ؛ } bean (name = "amplesequence") public oraclesequencemaxvalueincrementer examplesequenceBean () {oraclesequencemaxvalueincrementer examplesequence = new Oraclesequencemaxvalueincrementer () ؛ examplesequence.setIncrementerName ("example_seq") ؛ examplesequence.setDatasource (DataSource) ؛ إرجاع examplesequence ؛ }} MappersCan هو مسح الخريطة أسفل هذه الحزمة.
بالإضافة إلى ذلك ، فإن موقع mapper.xml هنا هو إنشاء مجلد رسم الخرائط تحت مجلد الموارد ووضعه أدناه.
الوظيفة هنا تشبه XML. إنه وصف طريقة تعبير XML التقليدية في ملفات .java ، وحقن مصدر البيانات بشكل أساسي خطوة بخطوة.
نظرًا لأن المثال يستخدم قاعدة بيانات Oracle ، فإن آخر examplesequence هو مثال لتوضيح كيفية إضافة تسلسل.
شرح واجهات لجميع mappers @mapper
على سبيل المثال:
@mapperpublic interface usermapper {...} تكوين ملف السجل
يدعم Logback التكوين الخارجي في شكل خصائص ، ولكن لتكوينات مفصلة نسبيًا ، لا يزال من الضروري استخدام تكوين XML.
من أجل أن يقرأ ملف XML بعض المسارات من ملف .properties ، تكوينات ثابتة قد تتطلب تعديلًا متكررًا ، من الضروري تكوينه في Logback-spring.xml
<property resource = "application.properties" /> <property name = "log.root.level" value = "$ {log.lerot.level}" /> <property name = "log.path" value = "$ {log.path}" /> <property name = "log.modulename" value = "$ {log.module} بهذه الطريقة يمكنك وضع ملف Application.Properties في
log.path =/home/logs/examplelog.root.level = infolog.module = مثال
اقرأها في Logback-spring.xml ثم نسميها.
تكوين WebConfig
تتمثل الوظيفة الرئيسية لـ WebConfig في استبدال web.xml و spring-mvc.xml لبعض التكوين الأساسي.
1. حول web.xml
مشاريع الربيع التقليدية جميعها تكوين ملف web.xml. وظيفة هذا الملف هي: عندما نضع حزمة الحرب في حاوية التطبيق (مثل tomcat) لتشغيلها ، ستعمل الحاوية على تحميل مرشح (مرشح) ، servlet ، صفحة الخطأ ، قائمة الترحيب ، المستمع (المستمع) ، context-param (معلمات السياق) ، Resource-REF (تكوين الموارد) وتكوينات أخرى وفقًا لـ web.xml.
يتم تحميل المستمع بما في ذلك contextloaderListener هنا لتجميع معلومات التكوين تلقائيًا من ApplicationContext عند بدء تشغيل الحاوية.
<StaNeer> <Segner-Class> org.springframework.web.context.contextloaderListener </leader-class> </stanter>
هذا ApplicationContext هو جوهر الربيع IOC (الموروث من Beanfactory) ، وسيتم إنشاء إنشاء جميع حبوب المفرد في هذا الوقت.
وأيضًا ، يتم أيضًا تحميل مرسلات مهمة للغاية في springMVC هنا ، ويتم تحديد ملف XML لتكوين Dispatcherservlet.
<Srevlet> <Sradlet-Name> springmvc </servlet-name> <Servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <Ing-param> <param-name> contextConfigLocation </param-name> <value> classpath <load-on-startup> 1 </load-on-startup> <!-<async-supported> true </async-supported>-> </stervlet>
2. حول spring-mvc.xml
Spring-MVC.XML هو ملف تكوين SpringMVC. هنا يمكننا تكوين الفاصوليا التي تحتاج إلى تخصيص ، مثل ViewResolver ، Multipartresolver ، محول رسالة HTTP ، اعتراض مخصص ، إلخ.
كل ما سبق لا علاقة له بـ Springboot ، وذلك أساسًا لمعرفة السبب ولماذا. إذا لم تكن مهتمًا ، فيمكنك تجاهله.
دعنا نتحدث عن تكوين Springboot. لدى Springboot قول بأن "الاتفاقية أفضل من التكوين" ، مما يعني محاولة استخدام الطريقة المتفق عليها ، بدلاً من التكوين المستهدف على وجه التحديد (التكوين عندما يكون التكوين الخاص مطلوبًا).
بعد تقديم تبعية "Out of the Box" في Web-Boot-Starter-Web ، يحتوي Web-Web على تكوين زنبركية.
مع هذا التبعية ، يمكنك استخدام enableautocongiguration شرح. سيخمن هذا التعليق التوضيحي تكوين الربيع الذي تحتاجه بناءً على التبعيات المقدمة ويساعدك على تكوينه. نظرًا لأنه تم تقديم Web-Boot-be-web ، سيقوم هذا التعليق بالتعليق بتكوين التكوين المتعلق بالويب.
بالإضافة إلى ذلك ، تم إدراج شرح enableautoconguration في شرح springbootapplication. لذا ، ما عليك سوى التعليق على springbootapplication على أمثلة فئة بدء التشغيل ، ويمكنك تلقائيًا تكوين الويب لتكوينه.
بالطبع ، قد يكون لدينا بعض التكوينات الخاصة ، وفي هذا الوقت يمكننا إنشاء WebConfig للتخصيص
/*** تم إنشاؤه بواسطة Wutaoyu في 2017/12/8. */ @configurationpublic class webConfig يمتد webmvcConfigureRadapter {Override public void configuremessageConverters (list <httpmessageconverter <؟ >> converters) {converters.add (MarshallingHttpMessageConverter ()) ؛ } MarshallingHttpMessageConverter MarshallinghttpmessageConverter () {MarshallingHttpMessageConverter MarshallinghttpmessageConverter = New MarshallinghttpmessageConverter () ؛ قائمة <MedarType> mediaTypes = new ArrayList <DearyType> () ؛ MediaTypes.add (mediaType.text_xml) ؛ MediaTypes.add (mediaType.application_xml) ؛ XstreamMarshaller XstreamMarshaller = جديد XstreamMarshaller () ؛ MarshallinghttpmessageConverter.SetSupportededIdiatepes (MediaTypes) ؛ MarshallingHttpMessageConverter.SetMarshaller (Xstreammarshaller) ؛ MarshallingHttpMessageConverter.setunmarshaller (Xstreammarshaller) ؛ إرجاع marshallinghttpmessageConverter ؛ }. commonsmultipartresolver.setDefaultEncoding ("UTF-8") ؛ commonsmultipartresolver.setmaxuploadsize (10485760000l) ؛ commonsmultipartresolver.setmaxinmorysize (40960) ؛ إرجاع commonsmultipartresolver ؛ }. إرجاع استثناء } // InterceptorOverride public void additpectors (interceptorregistry registry) {registry.adDInterceptor (loginterceptor ()). addathpatterns ("/**") ؛ Super.AddInterceptors (السجل) ؛ }}فعلت بعض الأشياء في هذا الملف العينة:
إزالة حقن الفاصوليا الزائدة
هذا إلهاء ، لكنه أيضًا أحد المشكلات التي واجهتها بالفعل.
عند تشغيل Springboot Project فعليًا ، وجدت بعض المشكلات التي لم تبلغ عن أخطاء في مشاريع الربيع التقليدية ، والتي لا لزوم لها.
في مشاريع الربيع التقليدية ، لا يوجد أي خطأ ، ولكن في مشاريع سبرينغ بوت ، تم الإبلاغ عنها. أظن أنه عندما يتم إعطاء طريقة الفئة التي يتم حقنها إلى الفول بطريقة بسيطة نسبيًا ، سيتم تكرارها مع تكوين بعض الفاصوليا تلقائيًا بواسطة Springboot نفسها ، وسيتم الإبلاغ عن خطأ.
لذلك ، قم بإزالة بعض الفاصوليا التي لا تحتاج إلى حقنها.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.