จะกำหนดค่า Shed Lock สำหรับระบบที่มีความพร้อมใช้งานสูงได้อย่างไร?

Jan 12, 2026

ฝากข้อความ

จอห์นลี
จอห์นลี
ฉันเป็นหัวหน้าเจ้าหน้าที่เทคโนโลยีที่ Hunan Lianhu Hardware Co. ขับเคลื่อนกลยุทธ์นวัตกรรมของเรา ฉันมุ่งเน้นไปที่การพัฒนาโซลูชันฮาร์ดแวร์ที่ทันสมัยซึ่งตอบสนองความต้องการที่ทันสมัย

ในขอบเขตของระบบที่มีความพร้อมใช้งานสูง การตรวจสอบให้แน่ใจว่างานสำคัญบางอย่างได้รับการดำเนินการด้วยการซิงโครไนซ์ที่เหมาะสมและไม่มีสภาวะการแข่งขันถือเป็นสิ่งสำคัญสูงสุด นี่คือจุดที่ Shed Lock เข้ามามีบทบาท ในฐานะซัพพลายเออร์ Shed Lock ฉันมาที่นี่เพื่อแนะนำคุณตลอดขั้นตอนการกำหนดค่า Shed Lock สำหรับสภาพแวดล้อมที่มีความพร้อมใช้งานสูง

ทำความเข้าใจกับ Shed Lock

Shed Lock เป็นไลบรารีที่ให้การล็อกแบบกระจายสำหรับงานตามกำหนดเวลาในแอปพลิเคชัน Java ในระบบที่มีความพร้อมใช้งานสูง แอปพลิเคชันหลายอินสแตนซ์อาจพยายามดำเนินงานตามกำหนดเวลาเดียวกันพร้อมกัน ซึ่งอาจนำไปสู่ปัญหาความสมบูรณ์ของข้อมูล การประมวลผลซ้ำ และปัญหาอื่นๆ Shed Lock แก้ปัญหานี้โดยใช้ที่เก็บข้อมูลที่ใช้ร่วมกัน (เช่น ฐานข้อมูล) เพื่อจัดการการล็อค สามารถรับการล็อคได้ครั้งละหนึ่งอินสแตนซ์เท่านั้น ทำให้มั่นใจได้ว่างานจะถูกดำเนินการเพียงครั้งเดียว

ข้อกำหนดเบื้องต้น

ก่อนที่เราจะเริ่มกำหนดค่า Shed Lock ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้:

  • แอปพลิเคชัน Java ที่ทำงานบนโครงสร้างพื้นฐานที่มีความพร้อมใช้งานสูง นี่อาจเป็นชุดของเซิร์ฟเวอร์ในคลัสเตอร์ที่ใช้งานในสภาพแวดล้อมคลาวด์ เช่น AWS หรือ Google Cloud
  • ฐานข้อมูลที่สามารถใช้เป็นที่เก็บข้อมูลที่ใช้ร่วมกันสำหรับล็อค ตัวเลือกยอดนิยม ได้แก่ MySQL, PostgreSQL และ H2
  • Maven หรือ Gradle กำหนดค่าให้จัดการการขึ้นต่อกัน

ขั้นตอนที่ 1: เพิ่มการพึ่งพา

ขั้นตอนแรกคือการเพิ่มการขึ้นต่อกันของ Shed Lock ให้กับโปรเจ็กต์ของคุณ หากคุณใช้ Maven ให้เพิ่มสิ่งต่อไปนี้ในของคุณpom.xml-

<การพึ่งพา> <groupId>net.javaccrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.42.0</version> </dependency> <การพึ่งพา> <groupId>net.javaccrumbs.shedlock</groupId> <artifactId>shedlock-provider-jdbc-template</artifactId> <version>4.42.0</version> </การพึ่งพา>

สำหรับ Gradle ให้เพิ่มบรรทัดเหล่านี้ในของคุณbuild.gradle-

การใช้งาน 'net.javaccrumbs.shedlock:shedlock-spring:4.42.0' การใช้งาน 'net.javaccrumbs.shedlock:shedlock-provider-jdbc-template:4.42.0'

ขั้นตอนที่ 2: กำหนดค่าผู้ให้บริการล็อค

ผู้ให้บริการล็อคมีหน้าที่รับผิดชอบในการโต้ตอบกับที่เก็บข้อมูลที่ใช้ร่วมกัน (ฐานข้อมูลในกรณีของเรา) เพื่อจัดการล็อค นี่คือตัวอย่างวิธีกำหนดค่าผู้ให้บริการล็อคโดยใช้ Spring'sJdbcเทมเพลต-

นำเข้า net.javaccrumbs.shedlock.core.LockProvider; นำเข้า net.javaccrumbs.shedlock.provider.jdbc.template.JdbcTemplateLockProvider; นำเข้า org.springframework.context.annotation.Bean; นำเข้า org.springframework.context.annotation.Configuration; นำเข้า org.springframework.jdbc.core.JdbcTemplate; นำเข้า javax.sql.DataSource; @Configuration คลาสสาธารณะ ShedLockConfig { @Bean public LockProvider lockProvider (DataSource dataSource) { ส่งคืน JdbcTemplateLockProvider ใหม่ ( JdbcTemplateLockProvider.Configuration.builder () .withJdbcTemplate (ใหม่ JdbcTemplate (dataSource)) .usingDbTime () .build () ); -

ในตัวอย่างนี้ เราสร้าง aJdbcTemplateLockProviderถั่วที่ใช้สิ่งที่ให้มาแหล่งข้อมูลเพื่อโต้ตอบกับฐานข้อมูล ที่โดยใช้DbTime()วิธีการระบุว่าเราต้องการใช้เวลาระบบของฐานข้อมูลเพื่อการจัดการล็อค

ขั้นตอนที่ 3: กำหนดค่า Shed Lock ใน Spring

ต่อไปเราต้องเปิดใช้งาน Shed Lock ในแอปพลิเคชัน Spring ของเรา เราสามารถทำได้โดยการเพิ่ม@EnableSchedulerLockคำอธิบายประกอบสำหรับคลาสการกำหนดค่าหลักของเรา:

นำเข้า net.javaccrumbs.shedlock.spring.annotation.EnableSchedulerLock; นำเข้า org.springframework.context.annotation.Configuration; นำเข้า org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableScheduling @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") AppConfig คลาสสาธารณะ { // รหัสการกำหนดค่าที่นี่ }

ที่@เปิดใช้งานการจัดกำหนดการคำอธิบายประกอบเปิดใช้งานความสามารถในการกำหนดเวลาของ Spring และ@EnableSchedulerLockเปิดใช้งาน Shed Lock ที่ค่าเริ่มต้นLockAtMostForคุณลักษณะระบุเวลาสูงสุดที่สามารถล็อคได้ ในกรณีนี้ ระบบจะปลดล็อคโดยอัตโนมัติหลังจากผ่านไป 30 วินาที

ขั้นตอนที่ 4: ใช้การล็อคกับงานที่กำหนดเวลาไว้

ตอนนี้เราสามารถใช้การล็อกกับงานที่กำหนดเวลาไว้ได้ นี่คือตัวอย่าง:

นำเข้า net.javaccrumbs.shedlock.spring.annotation.SchedulerLock; นำเข้า org.springframework.scheduling.annotation.Scheduled; นำเข้า org.springframework.stereotype.Service; @Service คลาสสาธารณะ ScheduledTaskService { @Scheduled(fixedRate = 60000) @SchedulerLock(name = "myScheduledTask", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M") โมฆะสาธารณะ myScheduledTask() { // ตรรกะของงานที่นี่ System.out.println ("กำลังดำเนินการงานที่กำหนดเวลาไว้..."); -

ที่@SchedulerLockคำอธิบายประกอบจะใช้เพื่อใช้การล็อคกับMyScheduledTaskวิธี. ที่ชื่อคุณลักษณะเป็นตัวระบุเฉพาะสำหรับการล็อค ที่ล็อคAtMostForคุณลักษณะระบุเวลาสูงสุดที่สามารถล็อคได้และล็อคอย่างน้อยที่สุดสำหรับระบุเวลาขั้นต่ำที่จะล็อค

ขั้นตอนที่ 5: การตั้งค่าฐานข้อมูล

เราจำเป็นต้องสร้างตารางในฐานข้อมูลเพื่อเก็บข้อมูลการล็อค สำหรับฐานข้อมูล MySQL คำสั่ง SQL ในการสร้างตารางจะเป็นดังนี้:

สร้างตาราง shedlock (ชื่อ VARCHAR (64) ไม่เป็นโมฆะ, lock_until TIMESTAMP (3) ไม่เป็นโมฆะ, lock_at TIMESTAMP (3) ไม่เป็นโมฆะ, lock_by VARCHAR (255) ไม่เป็นโมฆะ, คีย์หลัก (ชื่อ) );

สำหรับฐานข้อมูลอื่นๆ เช่น PostgreSQL คำสั่ง SQL จะคล้ายกัน แต่อาจจำเป็นต้องปรับเปลี่ยนประเภทข้อมูลตามข้อกำหนดของฐานข้อมูล

ข้อควรพิจารณาเพิ่มเติมสำหรับความพร้อมใช้งานสูง

ในระบบที่มีความพร้อมใช้งานสูง เราต้องพิจารณาปัจจัยเพิ่มเติมบางประการ:

  • การจำลองฐานข้อมูล: หากคุณใช้ฐานข้อมูลที่ถูกจำลองแบบ ตรวจสอบให้แน่ใจว่าตารางล็อคถูกจำลองแบบอย่างถูกต้อง ความล่าช้าในการจำลองแบบอาจทำให้หลายอินสแตนซ์ได้รับการล็อคพร้อมกัน
  • เวลาแฝงของเครือข่าย: เวลาแฝงของเครือข่ายสูงระหว่างอินสแตนซ์ของแอปพลิเคชันและฐานข้อมูลอาจส่งผลต่อการรับและปลดล็อกการล็อค พิจารณาใช้ฐานข้อมูลที่อยู่ใกล้กับเซิร์ฟเวอร์แอปพลิเคชันของคุณ
  • การกู้คืนความล้มเหลว: ใช้กลไกการกู้คืนความล้มเหลวที่เหมาะสม หากอินสแตนซ์ล้มเหลวในขณะที่ล็อคไว้ ควรปลดล็อคโดยอัตโนมัติหลังจากล็อคAtMostForเวลาผ่านไปแล้ว

ลิงค์ผลิตภัณฑ์ที่เกี่ยวข้อง

หากคุณกำลังมองหาระบบล็อคคุณภาพสูงสำหรับการใช้งานอื่นๆ คุณอาจสนใจผลิตภัณฑ์ของเรากดล็อค-ล็อคประตูไม้, และล็อคประตูกลม-

ติดต่อเราเพื่อจัดซื้อจัดจ้าง

เราเข้าใจถึงความสำคัญของโซลูชันการล็อคที่เชื่อถือได้ในระบบที่มีความพร้อมใช้งานสูง ในฐานะซัพพลายเออร์ Shed Lock เรามุ่งมั่นที่จะมอบผลิตภัณฑ์และการสนับสนุนที่ดีที่สุดแก่คุณ หากคุณสนใจที่จะจัดหา Shed Lock สำหรับโปรเจ็กต์ที่มีความพร้อมใช้งานสูงของคุณ หรือมีคำถามใดๆ เกี่ยวกับการกำหนดค่า เราขอแนะนำให้คุณติดต่อเรา เริ่มการสนทนากับเราเพื่อหารือเกี่ยวกับความต้องการเฉพาะของคุณ และสำรวจว่า Shed Lock ของเราจะเพิ่มประสิทธิภาพและความน่าเชื่อถือของระบบของคุณได้อย่างไร

19-61-5

อ้างอิง

  • เอกสารอย่างเป็นทางการของ Shed Lock "https://www.javacrumbs.net/shedlock/"
  • เอกสาร Spring Framework "https://docs.spring.io/spring-framework/docs/current/reference/html/"
ส่งคำถาม