คำนำ
ในชุดการสอนพื้นฐานการบูตสปริงก่อนหน้านี้บทความ "การใช้ @async เพื่อใช้การโทรแบบอะซิงโครนัสใน Spring Boot" ได้รับการแนะนำวิธีการใช้คำอธิบายประกอบ @async เพื่อใช้การโทรแบบอะซิงโครนัส อย่างไรก็ตามการควบคุมการประหารชีวิตแบบอะซิงโครนัสเหล่านี้เป็นทักษะพื้นฐานของเราในการรับรองสุขภาพของแอปพลิเคชันของเราเอง ในบทความนี้มาเรียนรู้ว่าเราควบคุมการโทรแบบอะซิงโครนัสพร้อมกันผ่านพูลเธรดที่กำหนดเอง
เราสามารถแก้ไขตัวอย่างในบทความนี้ตามตัวอย่างก่อนหน้าหรือสร้างโครงการสปริงบูตใหม่ล่าสุดเพื่อลอง
กำหนดพูลเธรด
ขั้นตอนแรกคือการกำหนดพูลเธรดในคลาสสปริงบูตคลาสหลักเช่น:
@springbootapplicationpublic คลาสแอปพลิเคชัน {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (application.class, args); } @enableasync @configuration class taskpoolconfig {@bean ("taskexecutor") ผู้ดำเนินการสาธารณะ Taskexecutor () {threadpooltaskexecutor executor = new Threadpooltaskexecutor (); Executor.SetCorePoolSize (10); Executor.SetMaxPoolsize (20); Executor.SetqueUecapacity (200); Executor.SetKeepaliveseconds (60); Executor.SetThreadNamePrefix ("taskexecutor-"); Executor.SetRejectedExecutionHandler (ใหม่ threadpoolexecutor.CallerRunspolicy ()); ส่งคืนผู้บริหาร; -ด้านบนเราสร้างพูลเธรดโดยใช้ threadpooltaskexecutor และตั้งค่าพารามิเตอร์ต่อไปนี้:
ใช้พูลเธรด
หลังจากกำหนดพูลเธรดเราจะทำให้งาน Execute Asynchronously ทำงานโดยใช้ทรัพยากรในพูลเธรดนี้ได้อย่างไร วิธีนี้ง่ายมาก เราเพียงแค่ต้องระบุชื่อพูลเธรดในคำอธิบายประกอบ @async ตัวอย่างเช่น:
@slf4j@componentpublic class task {สุ่มแบบคงที่สาธารณะแบบสุ่ม = ใหม่สุ่ม (); @async ("taskexecutor") โมฆะสาธารณะ dotaskone () โยนข้อยกเว้น {log.info ("เริ่มงานหนึ่ง"); Long Start = System.currentTimeMillis (); thread.sleep (random.nextint (10,000)); Long End = System.currentTimeMillis (); log.info ("งานที่สมบูรณ์หนึ่งเวลาที่ใช้:" + (สิ้นสุด - เริ่มต้น) + "มิลลิวินาที"); } @async ("taskexecutor") โมฆะสาธารณะ dotasktwo () พ่นข้อยกเว้น {log.info ("เริ่มงาน 2"); Long Start = System.currentTimeMillis (); thread.sleep (random.nextint (10,000)); Long End = System.currentTimeMillis (); log.info ("งานที่สมบูรณ์ 2 เวลาที่ใช้:" + (สิ้นสุด - เริ่มต้น) + "มิลลิวินาที"); } @async ("taskexecutor") โมฆะสาธารณะ dotaskthree () โยนข้อยกเว้น {log.info ("เริ่มงานสาม"); Long Start = System.currentTimeMillis (); thread.sleep (random.nextint (10,000)); Long End = System.currentTimeMillis (); log.info ("งานที่เสร็จสมบูรณ์สาม, ใช้เวลานาน:" + (สิ้นสุด - เริ่มต้น) + "มิลลิวินาที"); -การทดสอบหน่วย
สุดท้ายเรามาเขียนการทดสอบหน่วยเพื่อตรวจสอบ
@runwith (SpringJunit4ClassRunner.class) @springboottestpublic คลาสแอปพลิเคชัน {@autowired งานส่วนตัวงาน; @Test Public Void Test () พ่นข้อยกเว้น {task.dotaskone (); task.dotasktwo (); task.dotaskthree (); thread.currentthread (). เข้าร่วม (); -ทำการทดสอบหน่วยข้างต้นเราสามารถเห็นได้ในคอนโซลว่าชื่อเธรดเอาต์พุตทั้งหมดจะถูกนำหน้าด้วยพูลเธรดที่เรากำหนดไว้ก่อนหน้านี้ซึ่งหมายความว่าการทดลองของเราใช้พูลเธรดเพื่อดำเนินการแบบอะซิงโครนัสประสบความสำเร็จ!
2018-03-27 22: 01: 15.620 ข้อมูล 73703 --- [taskexecutor-1] com.didispace.async.task: เริ่มทำภารกิจหนึ่ง
2018-03-27 22: 01: 15.620 ข้อมูล 73703 --- [taskexecutor-2] com.didispace.async.task: เริ่มงาน 2
2018-03-27 22: 01: 15.620 ข้อมูล 73703 --- [taskexecutor-3] com.didispace.async.task: เริ่มงานที่สาม
2018-03-27 22: 01: 18.165 ข้อมูล 73703 --- [taskexecutor-2] com.didispace.async.task: งานที่สมบูรณ์ 2 เวลาที่ใช้: 2545 มิลลิวินาที
2018-03-27 22: 01: 22.149 ข้อมูล 73703 --- [taskexecutor-3] com.didispace.async.task: งานที่เสร็จสมบูรณ์สามเวลา: 6529 มิลลิวินาที
2018-03-27 22: 01: 23.912 ข้อมูล 73703 --- [taskexecutor-1] com.didispace.async.task: งานที่เสร็จสมบูรณ์หนึ่งเวลาที่ใช้: 8292 มิลลิวินาที
ตัวอย่างที่สมบูรณ์:
ผู้อ่านสามารถเลือกที่จะดูโครงการบทที่ 4-1-3 ตามการตั้งค่าของพวกเขา:
GitHub: https://github.com/dyc87112/springboot-learning/
Gitee: https://gitee.com/diidispace/springboot-learning/
ดาวน์โหลดท้องถิ่น: http://xiazai.vevb.com/201805/yuanma/springboot-learning(vevb.com).rar
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com