หลังจากการแนะนำบทความก่อนหน้านี้ฉันเชื่อว่าเพื่อนของฉันไม่สามารถช่วยเหลือได้อีกต่อไป ในบทความนี้ฉันจะแนะนำการกำหนดค่าไฟล์การกำหนดค่า Springboot ให้กับเพื่อนของฉันต่อไป วิธีใช้พารามิเตอร์การกำหนดค่าส่วนกลาง ตกลงมาเริ่มแนะนำเนื้อหาของวันนี้กันเถอะ
เรารู้ว่า Spring Boot รองรับการกำหนดค่าอัตโนมัติของคอนเทนเนอร์และค่าเริ่มต้นคือ Tomcat แน่นอนว่าเราสามารถแก้ไขได้:
1. ก่อนอื่นเราไม่รวม Tomcat ในการพึ่งพาการพึ่งพาสปริง-สตาร์เทอร์-สตาร์เทอ
<การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> <exclusions> </scrusions> </dermentency>
2. เพิ่มลงในคอนเทนเนอร์ท่าเทียบเรือ
<การพึ่งพา> <roupId> org.springframework.boot </groupid> <ratifactid> Spring-Boot-Starter-Jetty </artifactId>
ด้วยวิธีนี้คอนเทนเนอร์ Springboot ของเราจะถูกปรับเปลี่ยนเป็นภาชนะเจ็ตตี้
เพื่ออำนวยความสะดวกในการดีบักของเรานี่คือเครื่องมือการดีบัก HTTP สำหรับคุณ: Postman
พูดคุยเกี่ยวกับไฟล์การกำหนดค่าส่วนกลางของ Springboot: Application.properties
ในการพัฒนาเราต้องพบข้อกำหนดดังกล่าวซึ่งก็คือการปรับเปลี่ยนพอร์ตการเข้าถึงคอนเทนเนอร์ของเรา เนื่องจาก Springboot โหลดคอนเทนเนอร์ตามค่าเริ่มต้นการตั้งค่าพอร์ตจึงถูกควบคุมผ่านไฟล์การกำหนดค่าซึ่งค่อนข้างสะดวก เราต้องเพิ่มในไฟล์กำหนดค่าเท่านั้น:
Server.port = 6666
ด้วยวิธีนี้พอร์ตคอนเทนเนอร์ของเราจะถูกแก้ไขเป็น 6666
นอกจากนี้เรายังสามารถตั้งค่านามแฝงการเข้าถึงโครงการผ่านไฟล์การกำหนดค่า:
server.context-path =/springboot1
ด้วยวิธีนี้เราสามารถเริ่มโครงการและเข้าถึงโครงการของเราผ่าน http: // localhost: 6666/springboot1
ด้านบนเป็นเพียงส่วนปลายของภูเขาน้ำแข็งของการกำหนดค่าไฟล์การกำหนดค่า Springboot ตัวอย่างเช่นเรายังสามารถตั้งค่าการกำหนดค่าการเชื่อมต่อฐานข้อมูลตั้งค่าการกำหนดค่าสภาพแวดล้อมการพัฒนาการกำหนดค่าการกำหนดค่าสภาพแวดล้อมและบรรลุการสลับอย่างราบรื่นระหว่างทั้งสอง
มาเรียนรู้เกี่ยวกับการใช้คอนโทรลเลอร์ของ Springboot Springboot ให้สามคำอธิบายประกอบ:
ในบทความก่อนหน้านี้เราใช้ @RestController ลองใช้ @Controller ด้วยกัน:
@Controller // @responsebodypublic class requesttest {/*** ไม่มีข้อ จำกัด เกี่ยวกับวิธีการร้องขอ* @return*/@requestmapping (value = "/req") สตริงสาธารณะ req () {return "ความสำเร็จ"; -เมื่อเราป้อน http: // localhost: 8080/springboot1/req เพื่อเข้าสู่เบราว์เซอร์เราพบ 404
{"timestamp": 1515332935215, "สถานะ": 404, "ข้อผิดพลาด": "ไม่มีข้อความพร้อมใช้งาน", "path": "/springboot1/req"}ทำไมถึงเป็นเช่นนี้? นี่เป็นเพราะ @Controller ต้องใช้กับเทมเพลตดังนั้นเราจึงเปิดไฟล์ Maven Pom และเพิ่มเทมเพลตของ Springboot:
<!-เทมเพลต Springboot-> <การพึ่งพา> <roupId> org.springframework.boot </groupid> <ratifactid> Spring-Boot-Starter-Thymeleaf </artifactid>
จากนั้นค้นหาเทมเพลตในไดเรกทอรีทรัพยากรของโครงการของเรา (ถ้าไม่สร้างใหม่ แต่อย่าลืมทราบว่าชื่อโฟลเดอร์จะต้องสอดคล้องกัน) จากนั้นสร้างความสำเร็จ html เพื่อให้เราเริ่มโครงการอีกครั้งและเข้าถึงที่อยู่ตอนนี้ใช่ไหม?
อย่างไรก็ตามควรสังเกตที่นี่ว่าการพัฒนาระดับองค์กรในปัจจุบันถูกแยกออกจากด้านหน้าและด้านหลัง เมื่อเราให้บริการแบ็คเอนด์เราจะต้องส่งคืนข้อมูลที่เกี่ยวข้องเท่านั้น แน่นอนว่ามีข้อเสียอีกประการหนึ่งในการใช้เทมเพลตนั่นคือประสิทธิภาพจะทำให้เกิดการสูญเสียบางอย่างเพื่อให้ทุกคนสามารถเข้าใจได้ที่นี่สั้น ๆ
ดังที่ได้กล่าวไว้ในบทนำข้างต้น @Controller+ @ResponseBody เทียบเท่ากับ @RestController ดังนั้นขอแนะนำให้คุณใช้ @RestController ที่นี่
มาแนะนำ @RequestMapping (value = "/req") ฉันเชื่อว่าทุกคนรู้ว่าการใช้งานแล้ว แน่นอนคำอธิบายประกอบนี้ไม่เพียง แต่สามารถใช้ในวิธีการเท่านั้น แต่ยังใช้กับชั้นเรียนด้วย
@RestController //@คอนโทรลเลอร์ //@responsebody@requestmapping (value = "/test") การร้องขอคลาสสาธารณะ {/*** ไม่มีข้อ จำกัด เกี่ยวกับวิธีการร้องขอ* @return*/@requestmapping (value = "/req") สตริงสาธารณะ req () {return "ความสำเร็จ"; }/** * วิธีการร้องขอที่ถูก จำกัด คือรับ * @return */@requestmapping (value = "/req1", method = requestMethod.get) สตริงสาธารณะ req1 () {return "ความสำเร็จ"; }/** * วิธีการขอข้อ จำกัด คือโพสต์ * @return */@requestmapping (value = "/req2", method = requestMethod.post) สตริงสาธารณะ req2 () {return "success"; -ฉันเชื่อว่าเมื่อคุณเห็นวิธีนี้คุณต้องรู้ประโยชน์ของมันอยู่แล้ว เป็นประเภทการเข้าถึงที่ระบุและสามารถเข้าถึงได้ในทุก ๆ ทางโดยไม่ต้องตั้งค่าเริ่มต้น ฉันไม่ทราบว่าฉันคิดว่าหากมีการตั้งค่าวิธีการในคลาส @requestmapping วิธีการในชั้นเรียนจะได้รับการสืบทอดตามค่าเริ่มต้น แน่นอนคุณสามารถตั้งค่าแยกต่างหากที่วิธีการ โปรดลองใช้ลำดับความสำคัญด้วยตัวเอง
ด้านล่างนี้ฉันจะแนะนำวิธีการเข้าถึงค่าคงที่ในไฟล์การกำหนดค่าในคอนโทรลเลอร์ ก่อนอื่นเราเพิ่มในไฟล์กำหนดค่า:
NAME = HPUGSAGE = 35CONTENT = ชื่อ: $ {ชื่อ}; อายุ: $ {อายุ}เราใช้ค่าคงที่ในไฟล์การกำหนดค่าซึ่งใช้โดย $ {}
ด้านล่างเราฉีดพารามิเตอร์ในคอนโทรลเลอร์:
// พารามิเตอร์การฉีดในไฟล์กำหนดค่า @Value ("$ {name}") ชื่อสตริงส่วนตัว; @Value ("$ {อายุ}") อายุจำนวนเต็มส่วนตัว; @Value ("$ {content}") เนื้อหาสตริงส่วนตัว; @RequestMapping (value = "/req3", method = requestMethod.get) สตริงสาธารณะ req3 () {return "name =" + name; } @RequestMapping (value = "/req4", method = requestMethod.get) สตริงสาธารณะ req4 () {return "อายุ =" + อายุ; } @RequestMapping (value = "/req5", method = requestMethod.get) สตริงสาธารณะ req5 () {return "content =" + เนื้อหา; -เริ่มโครงการของเราและพยายามเยี่ยมชม
หากคุณรู้สึกไม่พอใจกับการใช้งานนี้นี่เป็นเคล็ดลับอื่น: เราใช้ไฟล์การกำหนดค่าการแมปคลาสและใช้คลาสเพื่อใช้พารามิเตอร์ มันสะดวกกว่าการฉีดพารามิเตอร์เดียว ก่อนอื่นสร้างคลาส Java
@component@configurationProperties (prefix = "userInfo") คลาสสาธารณะ userInfo {ชื่อสตริงส่วนตัว; อายุจำนวนเต็มส่วนตัว เนื้อหาสตริงส่วนตัว Public Integer Getage () {return Age; } สตริงสาธารณะ getNames () {ชื่อคืน; } โมฆะสาธารณะ setNames (ชื่อสตริง) {this.names = ชื่อ; } การตั้งค่าโมฆะสาธารณะ (อายุจำนวนเต็ม) {this.age = อายุ; } สตริงสาธารณะ getContent () {return content; } โมฆะสาธารณะ setContent (เนื้อหาสตริง) {this.content = เนื้อหา; -จากนั้นตั้งค่าพารามิเตอร์ในไฟล์กำหนดค่าของเรา:
userInfo.Names = เด็กที่เสียน้อย userInfo.age = 25UserInfo.Content = ชื่อ: $ {userInfo.names}; อายุ: $ {userInfo.age}สายไฟเพื่อให้คอนโทรลเลอร์ของเรา:
// inject object @autowired userinfo userinfo; @RequestMapping (value = "/req6", method = requestMethod.get, ผลิต = "ข้อความ/plain; charset = utf-8") สตริงสาธารณะ req6 () {return "name =" + userinfo.getNames (); } @RequestMapping (value = "/req7", method = requestMethod.get) สตริงสาธารณะ req7 () {return "age =" + userinfo.getage (); } @RequestMapping (value = "/req7", method = requestMethod.get) สตริงสาธารณะ req7 () {return "age =" + userinfo.getage (); } @RequestMapping (value = "/req8", method = requestMethod.get) สตริงสาธารณะ req8 () {return "content =" + userInfo.getContent (); -โอเคลองรีสตาร์ทการเยี่ยมชมโครงการของเรา
เพื่อนคุณไม่รู้ว่าคุณพบปัญหานี้หรือไม่? มีรหัสภาษาจีนที่อ่านไม่ออก ก่อนอื่นไม่ต้องกังวล มาดูไฟล์การกำหนดค่า Springboot อื่น: application.yml ไฟล์กำหนดค่านี้แทนที่ ";" โดยช่องว่างใหม่ ลองมาดูกันว่าการกำหนดค่าการกำหนดค่าเดียวกันภายใต้ YML:
เซิร์ฟเวอร์: พอร์ต: 8888 บริบท-แพ ธ : /springboot1Name: hpugSage: 35Content: ชื่อ: $ {ชื่อ}; อายุ: $ {อายุ} userInfo: ชื่อ: เด็กน้อยอายุ: 25 เนื้อหา: ชื่อ: $ {userinfo.names}; อายุ: $ {userinfo.ageตอนนี้มาเริ่มโครงการและลองดู
กลับไปที่คำถามที่อ่านไม่ออกข้างต้นไม่มีการอ่านออกมาเมื่อเราใช้ YML หรือไม่? คุณรู้สึกหดหู่เล็กน้อยหรือไม่? ทำไมถึงเป็นเช่นนี้? นี่เป็นเพราะไฟล์. properties ใช้แบบฟอร์มการเข้ารหัส Unicode ดังนั้นรหัสที่อ่านไม่ออกจะปรากฏขึ้นเมื่อเราป้อนภาษาจีน แน่นอนว่ามีอีกเหตุผลหนึ่งสำหรับรหัสที่อ่านไม่ออกนั่นคือการตั้งค่าการเข้ารหัสที่ฉันสามารถไม่สอดคล้องกับส่วนหน้า เราเพิ่มสิ่งนี้ลงในไฟล์กำหนดค่า:
ฤดูใบไม้ผลิ: http: การเข้ารหัส: บังคับ: true charset: utf-8 เปิดใช้งาน: trueserver: tomcat: uri-encoding: utf-8
เพื่อควบคุม นี่คือเคล็ดลับการพัฒนา Springboot มอบโซลูชั่นให้เราเกี่ยวกับไฟล์การกำหนดค่าที่แตกต่างกันในสภาพแวดล้อมการพัฒนาที่แตกต่างกัน:
#yml รูปแบบสปริง: โปรไฟล์: active: prod#.properties format spring.profiles.active = dev
สรุป
ข้างต้นคือการใช้โน๊ตบดสปริงโบทของข้อผิดพลาดของ Springboot ที่แนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!