เนื่องจาก Springboot เป็นเฟรมเวิร์ก Microservice วิธีการปรับใช้การผลิตจึงต้องง่ายที่สุดเท่าที่จะเป็นไปได้ซึ่งเป็นความแตกต่างอย่างมากจากแอปพลิเคชันเว็บทั่วไป มันสามารถฝังเว็บคอนเทนเนอร์เช่น Tomcat, Jetty, ฯลฯ และไม่จำเป็นต้องบรรจุแอปพลิเคชันในรูปแบบเฉพาะที่ระบุโดยคอนเทนเนอร์อีกต่อไป
สำหรับ Springboot ให้บรรจุลงในแพ็คเกจ Jar อย่างง่ายและสามารถเริ่มต้นได้โดยตรงกับ Java -Jar นี่เป็นวิธีที่สง่างามมาก แต่มันก็นำปัญหาบางอย่างเช่น: จะหยุดแอปพลิเคชันได้อย่างไร? ในอดีตแอปพลิเคชันถูกนำไปใช้ในคอนเทนเนอร์ที่เฉพาะเจาะจงและสคริปต์ที่จัดทำโดยคอนเทนเนอร์อาจถูกยกเลิกอย่างสง่างาม แต่ตอนนี้คอนเทนเนอร์ถูกฝังและสคริปต์ก็หายไป ฉันควรทำอย่างไร? การฆ่าโดยตรงเป็นวิธีหนึ่ง แต่ดูเหมือนหยาบคายเกินไปและสามารถนำปัญหาที่ไม่คาดคิดมาใช้
เนื่องจากเราสามารถนึกถึงปัญหาได้ผู้สร้างเฟรมจะได้เตรียมโซลูชั่นให้เราหรือไม่? มีใช่และฉันจะแนะนำวิธีแก้ปัญหาบางอย่างที่ฉันได้เรียนรู้ด้านล่าง
1. ใช้จุดสิ้นสุด
ในส่วนที่ 4 ของเอกสารอย่างเป็นทางการของ Springboot มีการแนะนำคุณสมบัติต่าง ๆ ที่เตรียมไว้สำหรับการผลิตแอปพลิเคชัน ในหมู่พวกเขาผ่านจุดสิ้นสุด HTTP ของแอคทูเอเตอร์นักพัฒนาสามารถตรวจสอบและจัดการแอปพลิเคชันได้อย่างง่ายดาย
แนะนำแพ็คเกจเริ่มต้นที่ระบุ:
"org.springframework.boot: Spring-Boot-Starter-Actuator: $ {Springbootversion}"เปิดการกำหนดค่าสองแบบต่อไปนี้ใน Application.yml เพื่อหยุดแอปพลิเคชันผ่านคำขอ HTTP
การจัดการ: ความปลอดภัย: เปิดใช้งาน: FalseDpoints: SHUTDOWN: เปิดใช้งาน: TRUE
คำสั่งการดำเนินการมีดังนี้:
Curl -x Post http: // host: พอร์ต/shutdown
แต่วิธีนี้มีปัญหาร้ายแรงมากนั่นคือทุกคนสามารถควบคุมการหยุดของแอปพลิเคชันซึ่งไม่ต้องสงสัยเลยว่าไม่สามารถยอมรับได้สำหรับแอปพลิเคชันการผลิต บางคนอาจคิดว่าที่อยู่ลิงค์นั้นง่ายเกินไปในตอนนี้และผู้ที่ไม่ได้ลงโทษสามารถเดาได้อย่างง่ายดายว่าปัญหานี้สามารถหลีกเลี่ยงได้หรือไม่หากมีการใช้ที่อยู่ที่ซับซ้อนมาก ดีมากข้อเสนอนี้ดีมาดูการกำหนดค่าที่เกี่ยวข้องโดย Springboot
จุดสิ้นสุด: การปิด: เปิดใช้งาน: เส้นทางจริง: /xxx
หลังจากการกำหนดค่าเสร็จสมบูรณ์คำสั่งด้านบนจะไม่พร้อมใช้งานอีกต่อไป คำสั่งจะต้องได้รับการอัปเดตเป็น:
Curl -x Post http: // host: พอร์ต/xxx
แน่นอน /xxx เป็นเพียงหนึ่งเดียวที่ฉันตั้งค่าอย่างไม่เป็นทางการคุณสามารถตั้งค่าที่อยู่ใด ๆ ได้ แม้ว่าความปลอดภัยจะสูงขึ้นเล็กน้อย แต่ระดับความปลอดภัยดังกล่าวยังไม่สามารถนำไปใช้กับสภาพแวดล้อมการผลิตได้ มีมาตรการป้องกันอื่น ๆ หรือไม่? ใช่นอกเหนือจากการปรับเปลี่ยนเส้นทางการปิดระบบแล้วเรายังสามารถเพิ่มบริบทแบบครบวงจรให้กับการดำเนินการจัดการทั้งหมดกำหนดค่าพอร์ตอิสระและ จำกัด การเข้าถึง IP ที่ระบุ (โดยปกติ จำกัด ไว้ที่เครื่องเนทีฟ) การกำหนดค่ามีดังนี้:
การจัดการ: ความปลอดภัย: เปิดใช้งาน: พอร์ตเท็จ: 9001 ที่อยู่: 127.0.0.1 บริบท-แพ ธ : /ผู้ดูแลระบบ
คำสั่งหยุดบริการที่เปลี่ยนแปลงคือ:
curl -x โพสต์ http://127.0.0.1:9001/admin/xxx
มันปลอดภัยจริง ๆ เพื่อให้มั่นใจในความปลอดภัยของระบบเพิ่มเติมให้เพิ่มเลเยอร์ของ HTTP BASIC Auth
เพิ่มการพึ่งพาความปลอดภัย:
"org.springframework.boot: Spring-Boot-Starter-Security: $ {Springbootversion}"แก้ไขไฟล์การกำหนดค่าดังนี้:
จุดสิ้นสุด: การปิด: เปิดใช้งาน: เส้นทางที่แท้จริง: /xxxmanagement: ความปลอดภัย: เปิดใช้งาน: พอร์ตจริง: 9001 ที่อยู่: 127.0.0.1 บริบท-แพ ธ : /AdminSecurity: BASIC: เปิดใช้งาน: TRUE PATH: /ผู้ดูแลระบบ: ชื่อ: รูทรหัสผ่าน: 123456
หลังจากการกำหนดค่าเสร็จสมบูรณ์คำสั่งหยุดการประชุมขั้นสุดท้ายคือ:
Curl -x post -u root: 123456 http://127.0.0.1:9001/admin/xxx
2. ลงทะเบียนเป็นบริการระบบ
นอกเหนือจากการใช้งานแอพพลิเคชั่น Springboot ด้วย Java -Jar แล้วคุณสามารถลงทะเบียนเป็นบริการระบบ Linux/UNIX ได้อย่างง่ายดายด้วย Init.D หรือ SystemD ซึ่งทำให้ง่ายต่อการติดตั้งและจัดการแอปพลิเคชัน Springboot ในสภาพแวดล้อมการผลิต
ในโครงการ Maven เพื่อสร้างขวด "ปฏิบัติการได้อย่างเต็มที่" ปลั๊กอินต่อไปนี้จะต้องมีการแนะนำ:
<plugin> <roupid> org.springframework.boot </groupid> <ratifactid> Spring-Boot-Maven-Plugin </ArtifactId> <cersion> 1.5.2.Release </เวอร์ชัน> <การกำหนดค่า>
ในโครงการ Gradle การกำหนดค่าที่เทียบเท่ามีดังนี้:
ปลั๊กอิน {id 'org.springframework.boot' เวอร์ชัน '1.5.2.release'} springboot {execute = true}หลังจากการกำหนดค่าเสร็จสมบูรณ์คุณสามารถเรียกใช้แอปพลิเคชันที่สร้างขึ้นผ่าน./Application-name.jar
ในที่สุดเราจำเป็นต้องติดตั้งแอปพลิเคชันแพคเกจลงในบริการ init.d เพื่อให้สามารถจัดการได้อย่างง่ายดายโดยใช้ Unix/Linux วิธีการใช้งานง่ายมาก คุณเพียงแค่เชื่อมโยงแอปพลิเคชันกับ init.d (โดยที่ Funda เป็นชื่อแอปพลิเคชันของฉันและคุณต้องแทนที่ตามสถานการณ์เมื่อทำการทดลอง)
ln -s /app/funda/funda.jar /etc/init.d/funda
ตรวจสอบว่ามีการสร้างลิงค์สำเร็จหรือไม่
ls -l /etc/init.d/funda
เริ่มบริการและบันทึกแอปพลิเคชันสามารถดูไฟล์ /var/log/funda.log
บริการเริ่มต้น
คำสั่งทั่วไปอื่น ๆ
# ตรวจสอบแอปพลิเคชันสถานะการทำงานสถานะบริการ funda# หยุดบริการแอปพลิเคชัน Funda Stop
สรุปคำถาม:
หลังจากลิงค์สำเร็จแล้วแอปพลิเคชันจะไม่สามารถเริ่มต้นได้สำเร็จ ได้รับแจ้งว่าไม่สามารถหา Java ได้ ใช้คำสั่งต่อไปนี้เพื่อเชื่อมโยงคำสั่ง JDK Java ไปที่ /sbin /java
ln -s /usr/local/jdk1.8.0_131/bin/java/sbin/java
ลิงค์อ้างอิง:
จุดปลาย
การตรวจสอบและการจัดการผ่าน HTTP
บริการ UNIX/LINUX
ไม่พบ Java #5690
ลิงค์โครงการ:
GitHub: https://github.com/qchery/funda
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น