ในกระบวนการถ่ายโอนโครงการ SpringMVC ไปยัง Springboot สิ่งต่อไปนี้ทำส่วนใหญ่ทำ
นอกเหนือจากการแนะนำสิ่งที่และวิธีการทำบทความนี้จะมีเรื่องไร้สาระที่ไม่จำเป็นมากมาย สำหรับการอภิปรายเกี่ยวกับหลักการบางอย่างคุณควรรู้เหตุผล
การกำหนดค่าโปรไฟล์
ในโครงการฤดูใบไม้ผลิแบบดั้งเดิมวิธีการกำหนดค่าของโปรไฟล์หลายโปรไฟล์คือการเขียนหลายโปรไฟล์ลงในไฟล์ pom.xml จากนั้นโหลดสภาพแวดล้อมโปรไฟล์ที่เลือกไว้ล่วงหน้าโดยดำเนินการไฟล์ Maven ก่อนเริ่มโครงการ หลังจากโหลดเมื่อดำเนินการโครงการจะตัดสินใจว่าไฟล์. properties ใดที่จะโหลดลงในตัวแปรส่วนกลางตามสภาพแวดล้อมที่โหลด
และการจัดการหลายโปรไฟล์ใน Springboot นั้นง่ายมาก
คุณสามารถเลือกโปรไฟล์เมื่อเรียกใช้แพ็คเกจ JAR โดยใช้บรรทัดคำสั่ง
java -jar example.jar --spring.profiles.active = ทดสอบ
หรือกำหนดค่าในแอปพลิเคชันการกำหนดค่าส่วนกลาง
เพิ่ม Spring.profiles.active = ทดสอบใน application.properties
วิธีการทั้งสองข้างต้นสามารถเริ่มต้นโปรไฟล์ "ทดสอบ" อดีตมีลำดับความสำคัญสูงกว่าในการดำเนินการมากกว่าหลัง
(โดยวิธีการใน Springboot วิธีการทั้งสองนี้ใช้วิธี "การกำหนดค่าภายนอก" เพื่อแก้ไขและแทนที่สภาพแวดล้อม)
นอกจากนี้แต่ละโปรไฟล์อิสระได้รับการกำหนดค่าในรูปแบบ "Application-xxx.properties" สำหรับแต่ละสภาพแวดล้อมที่แตกต่างกันเช่น:
เมื่อเราต้องการทดสอบว่าโปรไฟล์ถูกโหลดตามปกติเราสามารถเขียนได้ในไฟล์. properties ที่เกี่ยวข้อง
Server.port = 9080
คุณสามารถดูว่าพอร์ตนี้เริ่มต้นเมื่อเริ่มต้นหรือไม่
ที่นี่คุณสามารถพูดถึงลำดับที่ Springboot โหลดไฟล์การกำหนดค่า
ตัวแปรส่วนกลางถูกอ่านจากไฟล์คุณสมบัติ
ในส่วนก่อนหน้าเราเขียนการกำหนดค่าคุณสมบัติสำหรับสภาพแวดล้อมที่แตกต่างกัน ที่นี่เราจะเขียนเกี่ยวกับหากคุณสมบัติเหล่านี้ถูกเขียนลงในตัวแปรทั่วโลกซึ่งสะดวกสำหรับการโทรโดยตรงในที่อื่น ๆ ในภายหลัง
/*** ตัวแปรทั่วโลก*/คลาสสาธารณะระดับโลก {String String Public String ExamplePath; @Value ("$ {example_path}") โมฆะสาธารณะ setExamplePath (ตัวอย่างสตริง) {global.examplePath = ExamplePath; - ด้วยวิธีนี้เราจะใส่ไฟล์. properties ในไฟล์
example_path = http: // localhost: 9090
คุณสมบัตินี้ถูกอ่านลงในตัวแปรส่วนกลาง
แหล่งข้อมูลและการกำหนดค่า mybatis
ในโครงการฤดูใบไม้ผลิแบบดั้งเดิมใช้ mybatis เพื่อเชื่อมต่อกับฐานข้อมูล
ทั้งหมดนี้ได้รับการกำหนดค่าในไฟล์กำหนดค่า XML ซึ่งค่อนข้างยุ่งยาก ใน Springboot พยายามหลีกเลี่ยงการกำหนดค่า XML ดังกล่าว
MyBatis ได้ให้การสนับสนุน SpringBoot เราเพียงแค่ต้องเพิ่มการพึ่งพาการพึ่งพา MyBatis-Spring-Boot-Starter และมันจะทำสิ่งต่อไปนี้สำหรับเรา:
ดังนั้นในการกำหนดค่า mybatis ของ Springboot เราต้องทำสิ่งต่อไปนี้:
กรอกข้อมูลฐานข้อมูลในแอปพลิเคชัน-{โปรไฟล์} .properties ตัวอย่างเช่น:
spring.datasource.url = jdbc: Oracle: Thin:@// localhost: 1234/ตัวอย่าง pring.datasource.username = rootspring.datasource.password = 123456spring.datas urce.driver-class-name = oracle.jdbc.driver.oracledriverspring.datasource.maxactive = 10spring.datasource.maxidle = 5spring.datasource.maxwait = -1 -1
ด้วยวิธีนี้เราลงทะเบียนถั่วแหล่งข้อมูลในบริบทของฤดูใบไม้ผลิ
สร้างไฟล์ mybatisconfig และแทนที่ XML ด้วย Java:
/*** สร้างโดย Wutaoyu เมื่อวันที่ 2017/12/7 */@configuration@enableTransactionManagement@mapperscan ("com.example.db.dao") คลาสสาธารณะ mybatisconfig {@autowired DataSource DataSource; @Bean (name = "SQLSessionFactory") สาธารณะ SQLSessionFactory SQLSessionFactoryBean () {SQLSessionFactoryBean SQLSESSION = SQLSessionFactoryBean () ใหม่ sqlsession.setDataSource (แหล่งข้อมูล); ลอง {// เพิ่ม XML Directory ResourcePatterNresolver Resolver = ใหม่ PathMatchingResourcePatterNresolver (); SQLSession.setMapperLocations (Resolver.getResources ("classpath: การแมป/*. xml")); ส่งคืน sqlsession.getObject (); } catch (exception e) {e.printstacktrace (); โยน RuntimeException ใหม่ (E); }} @Bean สาธารณะ SQLSessionTemplate SQLSessionTemplate (SQLSessionFactory SQLSessionFactory) {ส่งคืน SQLSessionTemplate ใหม่ (SQLSessionFactory); } @Bean Public PlatformTransactionManager AnnotationDriveNantRansactionManager () {ส่งคืน DataSourceTransactionManager ใหม่ (DataSource); } @Bean (name = "Examplesequence") Public OraclesequenCemaxValueIncrementer ExamplesequenceBean () {OraclesequencemaxValueIncrementer Examplesequence = OraclesequenCeMaxValueIncrementer (); Examplesequence.setIncrementerName ("example_seq"); Examplesequence.setDatasource (แหล่งข้อมูล); กลับมาสอบกลับ; - @mapperscan คือการสแกน Mapper ด้านล่างแพ็คเกจนี้
นอกจากนี้ตำแหน่งของ mapper.xml ที่นี่คือการสร้างโฟลเดอร์การแมปภายใต้โฟลเดอร์ทรัพยากรและวางไว้ด้านล่าง
ฟังก์ชั่นที่นี่คล้ายกับ XML มันคือการอธิบายวิธีการแสดงออก XML แบบดั้งเดิมในไฟล์. java และฉีดข้อมูลเป็นหลักทีละขั้นตอน
เนื่องจากตัวอย่างใช้ฐานข้อมูล Oracle Examplesequence ล่าสุดเป็นตัวอย่างเพื่อแสดงวิธีเพิ่มลำดับ
คำอธิบายประกอบของอินเทอร์เฟซกับ mapers ทั้งหมด @mapper
ตัวอย่างเช่น:
@mapperpublic อินเตอร์เฟส usermapper {... } การกำหนดค่าไฟล์บันทึก
Logback รองรับการกำหนดค่าภายนอกในรูปแบบของคุณสมบัติ แต่สำหรับการกำหนดค่าที่ค่อนข้างละเอียดยังคงจำเป็นต้องใช้การกำหนดค่า XML
เพื่อให้ไฟล์ XML อ่านเส้นทางบางอย่างจากไฟล์. properties การกำหนดค่าแบบคงที่ที่อาจต้องมีการดัดแปลงบ่อยครั้งจำเป็นต้องกำหนดค่าใน logback-spring.xml
<property resource = "application.properties" /> <property name = "log.level" value = "$ {log.level.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, หน้าข้อผิดพลาด, รายการต้อนรับไฟล์, ผู้ฟัง (ผู้ฟัง), บริบท-พารามิเตอร์ (พารามิเตอร์บริบท), ทรัพยากร-รีฟ (การกำหนดค่าทรัพยากร)
ผู้ฟังรวมถึง contextloaderListener จะถูกโหลดที่นี่เพื่อรวบรวมข้อมูลการกำหนดค่าของ ApplicationContext โดยอัตโนมัติเมื่อเริ่มต้นคอนเทนเนอร์
<Sistener> <Sistener-Lass> org.springFramework.web.context.contextloaderListener </listener-class> </listener>
ApplicationContext นี้เป็นแกนหลักของ Spring IOC (สืบทอดมาจาก Beanfactory) และถั่วซิงเกิลทั้งหมดจะได้รับการยกตัวอย่างในเวลานี้
นอกจากนี้ยังมีการโหลด dispatcherservlet ที่สำคัญมากใน SpringMVC ที่นี่และมีการพิจารณาว่าไฟล์ XML ที่จะกำหนดค่า DispatchERServlet
<servlet> <servlet-name> springmvc </servlet-name> <servlet-lass> org.springframework.web.servlet.dispatcherservlet </servlet-lass> <init-param> <param-name> contextconfiglocation </param-name> <load-on-startup> 1 </load-on-startup> <!-<sync-upported> True </async-supported>-> </servlet>
2. เกี่ยวกับ Spring-mvc.xml
Spring-MVC.XML เป็นไฟล์การกำหนดค่า SpringMVC ที่นี่เราสามารถกำหนดค่าถั่วที่จำเป็นต้องปรับแต่งเช่น ViewResolver, MultipartResolver, ตัวแปลงข้อความ HTTP, Interceptor ที่กำหนดเอง ฯลฯ
ทั้งหมดข้างต้นไม่มีส่วนเกี่ยวข้องกับ Springboot ส่วนใหญ่จะรู้เหตุผลและทำไม หากคุณไม่สนใจคุณสามารถเพิกเฉยได้
มาพูดคุยเกี่ยวกับการกำหนดค่า Springboot Springboot มีคำกล่าวว่า "การประชุมดีกว่าการกำหนดค่า" ซึ่งหมายถึงการพยายามใช้วิธีการที่ตกลงกันแทนที่จะกำหนดค่าเป้าหมายโดยเฉพาะ (การกำหนดค่าเมื่อจำเป็นต้องมีการกำหนดค่าพิเศษ)
หลังจากแนะนำการพึ่งพา "Out of the Box" ของ Spring-Boot-Starter-Web แล้ว Spring-Boot-Starter-Web จะมีการกำหนดค่าสปริง-Autoconfigure
ด้วยการพึ่งพานี้คุณสามารถใช้คำอธิบายประกอบ @enableautocongigigation คำอธิบายประกอบนี้จะคาดเดาการกำหนดค่าสปริงที่คุณต้องการตามการพึ่งพาที่แนะนำและช่วยให้คุณกำหนดค่า เนื่องจากมีการแนะนำ Spring-Boot-Starter-Web แล้วคำอธิบายประกอบนี้จะกำหนดค่าการกำหนดค่าที่เกี่ยวข้องกับเว็บ
นอกจากนี้คำอธิบายประกอบ @enableautocongiguration ได้รวมอยู่ในคำอธิบายประกอบ @springbootapplication ดังนั้นเพียงคำอธิบายประกอบ @SpringBootapplication บนตัวอย่างคลาสเริ่มต้นการเชื่อมต่อและคุณสามารถกำหนดค่าเว็บเพื่อกำหนดค่าโดยอัตโนมัติ
แน่นอนเราอาจมีการกำหนดค่าพิเศษและในเวลานี้เราสามารถสร้าง webconfig เพื่อปรับแต่ง
/*** สร้างโดย Wutaoyu เมื่อวันที่ 2017/12/8 */ @configurationPublic คลาส WebConfig ขยาย WebMvCconFigurerAdapter {@Override โมฆะสาธารณะ configureMessageConverters (รายการ <httpMessageConverter <? >> ตัวแปลง) {converters.add } สาธารณะ MarshallinghttpmessageConverter MarshallinghttpmessageConverter () {Marshallinghttpmessageconverter Marshallinghttpmessageconverter = ใหม่ MarshallinghttpmessageConverter (); รายการ <MedyType> MediaTypes = new ArrayList <S MediaType> (); mediaTypes.add (mediaType.text_xml); mediaTypes.add (mediaType.application_xml); XStreamMarshaller XStreamMarshaller = ใหม่ xstreammarshaller (); MarshallinghttpmessageConverter.setsupportedmediatypes (MediaTypes); MarshallinghttpmessageConverter.setMarshaller (Xstreammarshaller); MarshallinghttpmessageConverter.setunmarshaller (Xstreammarshaller); กลับ MarshallinghttpmessageConverter; } // การกำหนดค่าไฟล์อัพโหลด @Bean (name = {"MultipArtResolver"}) Public MultipartResolver MultipartResolver () {CommonsMultipartResolver CommonsMultipArtresolver = new CommonsMultiPartResolver (); Commonsmultipartresolver.setDefaultEncoding ("UTF-8"); Commonsmultipartresolver.setMaxUploadSize (10485760000L); Commonsmultipartresolver.setMaxInMemorySize (40960); Return Commonsmultipartresolver; } // การจัดการข้อยกเว้น @Bean Public ExceptionHandler ExceptionResolver () {ExceptionHandler ExceptionHandler = ใหม่ ExceptionHandler (); return exceptionhandler; } // interceptor @Override โมฆะสาธารณะ addInterceptors (InterceptorRegistry Registry) {registry.addinterceptor (ใหม่ LoginTerceptor ()). addPathPatterns ("/**"); super.addinterceptors (รีจิสทรี); -ฉันทำบางสิ่งในไฟล์ตัวอย่างนี้:
กำจัดการฉีดถั่วส่วนเกิน
นี่คือสิ่งที่ทำให้ไขว้เขว แต่ก็เป็นหนึ่งในปัญหาที่ฉันพบจริง
เมื่อใช้โครงการ Springboot จริง ๆ ฉันพบปัญหาบางอย่างที่ไม่ได้รายงานข้อผิดพลาดในโครงการฤดูใบไม้ผลิแบบดั้งเดิมซึ่งเป็นการฉีดถั่วที่ไม่จำเป็น
ในโครงการฤดูใบไม้ผลิแบบดั้งเดิมไม่มีข้อผิดพลาด แต่ในโครงการ Springboot มีรายงาน ฉันเดาว่าเป็นเพราะเมื่อวิธีการเรียนที่ฉีดไปยังถั่วจะได้รับในวิธีที่ค่อนข้างง่ายมันจะถูกทำซ้ำโดยถั่วบางชนิดที่กำหนดค่าโดย Springboot โดยอัตโนมัติและจะมีการรายงานข้อผิดพลาด
ดังนั้นเอาถั่วบางส่วนที่ไม่จำเป็นต้องฉีด
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น