Spring Boot ซึ่งเป็นผลิตภัณฑ์ของแนวทางปฏิบัติที่ดีที่สุดของ Framework Spring สำหรับแนวคิดของ "อนุสัญญาการกำหนดค่า" สามารถช่วยเราสร้างแอพพลิเคชั่นที่ใช้สปริงเฟรมเวิร์กเป็นอิสระและเป็นอิสระ แอปพลิเคชันการบูตสปริงส่วนใหญ่ต้องการการกำหนดค่าน้อยมากในการทำงานอย่างรวดเร็ว มันเป็นรูปทรงไมโครที่ค่อนข้างสอดคล้องกับ microservices
1. แพ็คเกจแอปพลิเคชันสปริงบูต
แอปพลิเคชันสปริงบูตสามารถพิมพ์ลงในแพ็คเกจขวดโดยมี Tomcat ฝังอยู่ในนั้นดังนั้นจึงสามารถเริ่มต้นได้โดยตรง อย่างไรก็ตามก่อนที่แอปพลิเคชันสปริงจะเริ่มขึ้นบรรจุภัณฑ์เป็นสิ่งจำเป็นก่อน บทความนี้พูดถึงบรรจุภัณฑ์โครงการ Maven ข้อกำหนดเบื้องต้นที่จำเป็นสำหรับบรรจุภัณฑ์ (เนื้อหาในไฟล์ pom.xml) คือ:
... <packaging> jar </packaging> ... <การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> </dependency> ... <ArtIfactId> Spring-Boot-Maven-Plugin </artifactId> <การกำหนดค่า> <mainclass> com. ***. แอปพลิเคชัน </mainclass> </การกำหนดค่า> <การดำเนินการ> <การดำเนินการ> <goals> <goal> repackage </goal>
คำสั่งแพ็คเกจคือ:
MVN Clean Package -dmaven.test.skip = true# demo $ mvn clean package -dmaven.test.skip = true [ข้อมูล] การสแกนสำหรับโครงการ ... [คำเตือน] [คำเตือน] พบปัญหาบางอย่างในขณะที่สร้างแบบจำลองที่มีประสิทธิภาพ org.springframework.boot: Spring-Boot-Maven-Plugin หายไป @ line 38, คอลัมน์ 17 [คำเตือน] [คำเตือน] ขอแนะนำอย่างยิ่งให้แก้ไขปัญหาเหล่านี้เพราะพวกเขาคุกคามความมั่นคงของอาคารของคุณ [คำเตือน] [คำเตือน] ด้วยเหตุผลนี้เวอร์ชัน Maven ในอนาคตอาจไม่สนับสนุนการสร้างโครงการที่ผิดปกติอีกต่อไป [คำเตือน] [ข้อมูล] [ข้อมูล] - 0.0.1-snapshot [ข้อมูล] - - ที่จริงแล้ว) ในการคัดลอกทรัพยากรที่ผ่านการกรองเช่นการสร้างขึ้นอยู่กับแพลตฟอร์ม! [ข้อมูล] การคัดลอก 1 ทรัพยากร [ข้อมูล] [ข้อมูล] --- maven-compiler-plugin: 3.1: คอมไพล์ (คอมไพล์เริ่มต้น) @ myProject --- [ข้อมูล] การเปลี่ยนแปลงที่ตรวจพบ /ผู้ใช้/LTC/Spring Boot Demo/Target/Classes [INFO] [INFO] --- Maven-Resources-Plugin: 2.6: TestResources (ค่าเริ่มต้น-ลูกค้า) @ MyProject --- [ข้อมูล] การคัดลอกทรัพยากรการทดสอบ [ข้อมูล] แหล่งที่มา [ข้อมูล] [ข้อมูล] --- maven-surefire-plugin: 2.12.4: ทดสอบ (ทดสอบเริ่มต้น) @ myProject --- [ข้อมูล] การทดสอบถูกข้ามไป [ข้อมูล] [ข้อมูล] --- maven-jar-plugin: 2.4: jar (default-jar) @ myproject --- Demo/Target/MyProject-0.0.1-snapshot.jar [ข้อมูล] [ข้อมูล] --- Spring-Boot-Maven-Plugin: 1.5.0.rc1: การบรรจุใหม่ (เริ่มต้น) @ myProject --- [ข้อมูล] - -
หรือ Run Run -> Maven Build ... ใน Eclipse, กรอกข้อมูลในแพ็คเกจที่สะอาด -dmaven.test.skip = จริงในเป้าหมาย, Run, Package เสร็จสมบูรณ์
2. การเริ่มต้นแอปพลิเคชันสปริงบูต
คำสั่งเริ่มต้นของสปริงบูตคือ:
java -jar application.jar# demo $ java -jar target/myproject-0.0.1-snapshot.jar - - - - - ============================================== ___/=/_/_/:: boot Spring :: (v1.4.3.-release) 2017-01-13 15: 31: 36.911 ข้อมูล 62119 --- (/ผู้ใช้/LTC/Spring Boot Demo/Target/MyProject-0.0.1-snapshot.jar เริ่มต้นโดย liutianchi in/users/ltc/spring boot demo) 2017-01-13 15: 31: 36.916 ข้อมูล 62119 --- [หลัก] com.test.example ข้อมูล 62119 --- [Main] AtionConfigembeddedWebapplicationContext: รีเฟรช org.springframework.boot.context.embedded.annotationconfigembeddedwebapplicationContext@b1a58a3: วันที่เริ่มต้น รากของบริบทลำดับชั้น 2017-01-13 15: 31: 38.602 ข้อมูล 62119 --- [หลัก] SBCettomcatembeddedservletContainer: Tomcat เริ่มต้นด้วยพอร์ต: 8080 (HTTP) 2017-01-13 15: 31: 38.615 Info 62119 : บริการเริ่มต้น Tomcat2017-01-13 15: 31: 38.616 ข้อมูล 62119 --- [หลัก] org.apache.catalina.core.standardengine: เครื่องยนต์เซิร์ฟเล็ต: Apache Tomcat/8.5.62017-01-13 15: 31: 38.718 Info 62119 --- OCCC [TOMCAT]. [localhost]. [/]: การเริ่มต้นสปริงที่ฝังตัว webapplicationContext2017-01-13 15: 31: 38.718 ข้อมูล 62119 --- [ost-startstop-1] OCCC [Tomcat] [localhost]. [/]: การเริ่มต้นสปริง [ost-startstop-1] osweb.context.contextloader: รูท webapplicationContext: การเริ่มต้นเสร็จสิ้นในปี 1740 MS2017-01-13 15: 31: 38.927 ข้อมูล 62119 --- [ost-startstop-1] osbwservlet. 15: 31: 38.932 ข้อมูล 62119 --- [OST-StartStop-1] OsbwServlet.FilterRegistrationBean: การทำแผนที่ตัวกรอง: 'MetricsFilter' ถึง: [/*] 2017-01-13 15: 31: 38.932 Info 62119-- 'ตัวละครฯลา' ถึง: [/*] 2017-01-13 15: 31: 38.932 ข้อมูล 62119 --- [ost-startstop-1] Osbwservlet.FilterRegistrationBean: ตัวกรองการทำแผนที่: 'Hiddenhttpmethodfilter' [ost-startstop-1] Osbwservlet.filterregistrationBean: การทำแผนที่ตัวกรอง: 'Hiddenhttpmethodfilter' ถึง: [/*] 2017-01-13 15: 31: 38.932 ข้อมูล 62119 --- 'httpputformcontentFilter' ถึง: [/*] 2017-01-13 15: 31: 38.932 ข้อมูล 62119 --- [ost-startstop-1] Osbwservlet.FilterRegistrationBean: 313: 313: 313 [ost-startstop-1] osbwservlet.filterregistrationbean: การแมปตัวกรอง: 'webrequestloggingfilter' ถึง: [/*] 2017-01-13 15: 31: 38.932 ข้อมูล 62119 --- [/*] 2017-01-13 15: 31: 39.217 Info 62119 --- [Main] SWSMMAREQUESTMAPPIONDHANDLERADAPTER: มองหา @ControllerAdvice: org.springframework.boot.context.embedded.annotation 2017]; รากของบริบทลำดับชั้น 2017-01-13 15: 31: 39.310 ข้อมูล 62119 --- [หลัก] Swsmmarequestmappinghandlermapping: แมป "{[/]}" ลงบน java.lang.string com.test.example.home () 2017-01-13 swsmmarequestmappinghandlermapping: แมป "{[/ข้อผิดพลาด]}" ลงบน org.springframework.http.responseentity <java.util.map <java.lang.string, java.lang.Object >> org.springframework.boot.autoconfigure.web.basicerrorcontroller.error (javax.servlet.http.httpservletrequest) 2017-01-13 15: 31: 39.313 ข้อมูล 62119 --- "{[/ข้อผิดพลาด], ผลิต = [text/html]}" ลงบน org.springframework.web.servlet.modelandview สาธารณะ org.springframework.boot.autoconfigure.web.basicerrorcontroller.errorhtml (javax.servlet.http.httpservletrequest, javax.servlet.http.httpservletresponse) 2017-01-1511 Oswshandler.simpleurlhandlermapping: เส้นทาง URL ที่แมป [/webjars/**] ไปยังตัวจัดการประเภท [คลาส org.springframework.web.servlet.resource.resourcehtttprequesthandler] 2017-01-13 15: 31: 39.388 เส้นทาง URL ที่แม็พ [/**] ไปยังตัวจัดการประเภท [คลาส org.springframework.web.servlet.resource.resourcehtttprequesthandler] 2017-01-13 15: 31: 39.378 ข้อมูล 62119 --- [หลัก] พิมพ์ [คลาส org.springframework.web.servlet.resource.resourcehtttprequesthandler] 2017-01-13 15: 31: 39.665 ข้อมูล 62119 --- [หลัก] Osbaemvc.endpointhandlermapping: Mapped "{[/manage/metrics/ {name:.*} เหมือนกัน, methods=" get.produces= การประยุกต์ใช้/json]} "ลงบน java.lang.lang.Object org.springframework.boot.actuate.mvc.metricsmvcend.vcend.vcide 62119 --- [Main] Osbaemvc.endpointhandlermapping: แมป "{[/จัดการ/ตัวชี้วัด ||/manage/metrics.json.methods= [get get-get-produces= outhing/json]}" ลงบน java.lang.lang.lang org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () 2017-01-13 15: 31: 39.666 ข้อมูล 62119 --- [Main] Osbaemvc.endpointhandlermapping /manage/mappings.json เหมือนกัน, hedywate, produces= การประยุกต์ใช้/json]} "เข้าสู่สาธารณะ java.lang.Object org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () osbaemvc.endpointhandlermapping: แมป "{[/จัดการ/ติดตาม ||/manage/trace.json.methods= [get -get link, produces= [application/json]}" ลงบน java.lang.lang org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () 2017-01-13 15: 31: 39.667 ข้อมูล 62119 --- [Main] Osbaemvc.endpointhandlermapping /manage/info.json.methods= [get-get, produces= การประยุกต์ใช้/json]} "เข้าสู่สาธารณะ java.lang.Object org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () OSBAEMVC.ENDPOINTHANDLERMAPPANC: แมป "{[/จัดการ/configProps ||/manage/configprops.json.methods= [get -get -produces= การประยุกต์ใช้ org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () 2017-01-13 15: 31: 39.669 ข้อมูล 62119 --- [หลัก] Osbaemvc.Endpointhandlermapping /Manage/HeapDump.json เหมือนกัน, hedy get lame, produces= การประยุกต์ org.springframework.boot.actuate.endpoint.mvc.heapdumpmvencedpoint.invoke (Boolean, javax.servlet.http.httpservletrequest, javax.servlet.http.htttpservlet java.io.ioexception, javax.servlet.servlet.servletexception2017-01-13 15: 31: 39.669 ข้อมูล 62119 --- [Main] Osbaemvc.endpointhandlermapping: แมป "{[/จัดการ/autoconfig || /manage/autoconfig.json เหมือนกัน, methods= [get-get, produces= การประยุกต์ใช้/json]} "ไปยัง Java.lang.lang.Object org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () 2017-01-13 osbaemvc.endpointhandlermapping: แมป "{[/manage/env/ {name:.*} เหมือนกัน, remhods= [get -get link org.springframework.boot.actuate.endpoint.mvc.environmentmvencedpoint.value (java.lang.string) 2017-01-13 15: 31: 39.673 ข้อมูล 62119 --- [Main] Osbaemvc.endpointhandlermapping /Manage/env.json เหมือนกัน, เมทรัล= [get-get. , produces= การประยุกต์ใช้/json]} "เข้าสู่สาธารณะ java.lang.Object org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () OSBAEMVC.ENDPOINTHANDLERMAPPANC: MAPPED "{[/MANAGE/Health ||/MANAGE/Health.JSON เดียวกัน org.springframework.boot.actuate.endpoint.mvc.HealthMvenceDpoint.invoke (java.security.principal) 2017-01-13 15: 31: 39.675 ข้อมูล 62119 --- [Main] Osbaemvc.endpointhandlermapping /Manage/dump.json เหมือนกัน, methods= [get-get, produces= การประยุกต์ใช้/json]} "ไปยังสาธารณะ java.lang.Object org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () OSBAEMVC.ENDPOINTHANDLERMAPPANC: แมป "{[/จัดการ/ปิด ||/แมนจ์/shutdown.JSON.methods= [โพสต์]}" ลงบน Java.lang.Object Org.springFramework.boot.actuate.Andpoint.mvc.Shutdownmvected. 62119 --- [Main] Osbaemvc.endpointhandlermapping: แมป "{[/จัดการ/ถั่ว ||/manage/beans.json.methods= org.springframework.boot.actuate.endpoint.mvc.endpointmvcadapter.invoke () 2017-01-13 15: 31: 39.799 ข้อมูล 62119 --- [Main] OsjeaannotationMbeanExporter: การลงทะเบียนถั่วสำหรับ JMX Oscsupport.defaultlifecycleProcessor: เริ่มต้นถั่วในเฟส 02017-01-13 15: 31: 39.944 ข้อมูล 62119 --- [Main] SbcettomcatembeddedservletContainer: Tomcat เริ่มต้นที่พอร์ต (S): 8080 com.test.example: เริ่มต้นตัวอย่างใน 4.292 วินาที (JVM ทำงานสำหรับ 4.726) 3. แอปสปริงบูตปิด
มีสองวิธีหลักในการปิดการบูตฤดูใบไม้ผลิ: ส่งสัญญาณปิดระบบผ่าน HTTP หรือใช้การหยุดบริการ
ข้อกำหนดเบื้องต้นสำหรับการปิดแอป Boot Spring คือ POM.XML เพิ่มเนื้อหาต่อไปนี้:
<การพึ่งพา> <roupId> org.springframework.boot </roupid> <ratifactid> Spring-Boot-Starter-Actuator </artifactid>
เพิ่มใน application.properties:
#enable shutdownendpoints.shutdown.enabled = true#ปิดการใช้งานจุดสิ้นสุดการตรวจสอบรหัสผ่าน shutdown.sensitive = false
คำสั่งปิดคือ:
Curl -x โพสต์โฮสต์: พอร์ต/ปิด# demo $ curl -x โพสต์ http: // localhost: 8080/shutdown {"ข้อความ": "ปิดตัวลง, ลาก่อน ... "} $ curl -x โพสต์ http: // localhost: 8080/manage/shutdownหากคุณต้องการกำหนดค่าพา ธ คุณต้องเพิ่มการจัดการ. context -path =/จัดการใน application.properties คำสั่ง shutdown จะกลายเป็น curl -x post host: พอร์ต/จัดการ/ปิดระบบ
4. การตรวจสอบความปลอดภัย
หากจำเป็นต้องมีการตรวจสอบความปลอดภัยเมื่อปิดให้เพิ่มในไฟล์ pom.xml:
<การพึ่งพา> <roupID> org.springframework.boot </roupId> <ratifactid> Spring-Boot-Starter-Security </artifactid> </deperency>
เพิ่มใน application.properties:
#ENABLE SHADDOWN Security Verification Endpoints.shutdown.Sensitive = True#ตรวจสอบความปลอดภัยของผู้ใช้ชื่อผู้ใช้. name = admin#ตรวจสอบความปลอดภัยของรหัสผ่าน user.password = admin#การจัดการบทบาท. security.role = superuser#ระบุการจัดการพอร์ตพอร์ต = 8081#ระบุการจัดการที่อยู่
คำสั่งปิดคือ:
Curl -u ผู้ดูแลระบบ: ผู้ดูแลระบบ -x โพสต์ http://127.0.0.1:8081/manage/shutdown# ตัวอย่าง $ curl -u ผู้ดูแลระบบ: admin -x โพสต์ http://127.0.0.1:8081/manage/shutdown
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น