วิธีใช้ Shed Lock กับ Java 11?

May 16, 2025

ฝากข้อความ

ทอมจาง
ทอมจาง
ฉันเป็นหัวหน้าฝ่ายผลิตที่ Lianhu ดูแลกระบวนการผลิตเพื่อให้มั่นใจว่ามีประสิทธิภาพและความยั่งยืน เป้าหมายของฉันคือการรักษาชื่อเสียงของเราสำหรับผลิตภัณฑ์ฮาร์ดแวร์คุณภาพสูงในขณะที่ลดผลกระทบต่อสิ่งแวดล้อม

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

Shed Lock คืออะไร?

ก่อนที่เราจะดำดิ่งลงไปในวิธี - เรามาพูดคุยกันอย่างรวดเร็วเกี่ยวกับสิ่งที่ล็อคคือ Shed Shed Lock เป็นไลบรารี Java ที่ให้วิธีง่ายๆในการใช้งานล็อคแบบกระจาย รองรับกลไกการจัดเก็บข้อมูลต่าง ๆ เช่น JDBC, Redis, MongoDB ฯลฯ ความยืดหยุ่นนี้ทำให้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับโครงการประเภทต่างๆ

การตั้งค่าโครงการ

สิ่งแรกสิ่งแรกคุณต้องตั้งค่าโครงการ Java 11 ของคุณ หากคุณใช้ maven ให้เพิ่มการพึ่งพาล็อคโรงเก็บของpom.xml- นี่คือตัวอย่างของวิธีการเพิ่มการใช้งาน JDBC:

<การพึ่งพา> <roupId> net.javacrumbs.ShedLock </groupId> <ratifactid> shedlock-provider-jdbc-template </artifactid> <cersion> 4.42.0 </ServINT> </การพึ่งพา> <Sersion> 4.42.0 </Servive> </derctency>

หากคุณใช้ Gradle ให้เพิ่มบรรทัดเหล่านี้ในไฟล์build.gradle-

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

การกำหนดค่าผู้ให้บริการล็อค

เมื่อคุณเพิ่มการพึ่งพาแล้วคุณจะต้องกำหนดค่าผู้ให้บริการล็อค สมมติว่าเราใช้ฐานข้อมูล JDBC คุณจะต้องสร้างไฟล์ผู้ล็อคถั่วในการกำหนดค่าฤดูใบไม้ผลิของคุณ

7-3
นำเข้า net.javacrumbs.shedlock.core.lockprovider; นำเข้า net.javacrumbs.shedlock.provider.jdbctemplate.jdbctemplatelockprovider; นำเข้า org.springframework.context.annotation.bean; นำเข้า org.springframework.context.annotation.configuration; นำเข้า org.springframework.jdbc.core.jdbctemplate; นำเข้า Javax.sql.Datasource; @Configuration คลาสสาธารณะ shedlockconfig {@bean ล็อคกรอโรเดอร์สาธารณะล็อคโรโวเดอร์ (DataSource DataSource) {ส่งคืน JDBCTEMPLATELOCKPROVIDER ใหม่ (JDBCTEMPLATELOCKPROVIDER.CONFIGURATION.BUILDER () -

รหัสนี้สร้างไฟล์ผู้ล็อคถั่วที่ใช้เทมเพลต JDBC เพื่อโต้ตอบกับฐานข้อมูล ที่ใช้ DBTIME ()วิธีการบอกให้ Shed Lock ใช้เวลาของฐานข้อมูลสำหรับการจัดการล็อค

7-2

การใช้ Shed Lock ในบริการของคุณ

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

นำเข้า net.javacrumbs.shedlock.spring.annotation.schedulerlock; นำเข้า org.springframework.scheduling.annotation.scheduled; นำเข้า org.springframework.stereotype.service; @Service คลาสสาธารณะ MyService {@Scheduled (recidate = 60000) @SchedulerLock (name = "MyTaskLock", lockatmostfor = "59s", lockatLeastfor = "30s") โมฆะสาธารณะ mytask () {// ตรรกะงานของคุณไปที่ระบบ -

ในตัวอย่างนี้@Scheduledคำอธิบายประกอบทำให้mytask ()วิธีการทำงานทุก ๆ 60 วินาที ที่@schedulerlockคำอธิบายประกอบทำให้มั่นใจได้ว่ามีเพียงหนึ่งอินสแตนซ์ของแอปพลิเคชันเท่านั้นที่สามารถดำเนินการวิธีนี้ได้ในแต่ละครั้ง ที่ชื่อแอตทริบิวต์เป็นตัวระบุที่ไม่ซ้ำกันสำหรับการล็อค ที่ขดแอตทริบิวต์ระบุเวลาสูงสุดที่ล็อคสามารถถือได้และLockatleastforแอตทริบิวต์ระบุเวลาขั้นต่ำที่ควรล็อคไว้

ผู้ให้บริการล็อคที่แตกต่างกัน

ดังที่ฉันได้กล่าวไปแล้ว Shed Lock รองรับผู้ให้บริการล็อคที่แตกต่างกัน ลองมาดูการใช้ Redis เป็นผู้ให้บริการล็อค

ก่อนอื่นให้เพิ่มการพึ่งพา Redis ในโครงการของคุณ หากคุณใช้ Maven:

<Ederency> <sderctId> net.javacrumbs.ShedLock </groupId> <ratifactId> shedlock-provider-redis-spring </artifactid> <version> 4.42.0 </Serve>

และสำหรับ Gradle:

การใช้งาน 'net.javacrumbs.Shedlock: SHEDLOCK-PROVIDER-REDIS-SPRING: 4.42.0'

จากนั้นกำหนดค่าผู้ให้บริการ REDIS Lock ในการกำหนดค่าสปริงของคุณ:

นำเข้า net.javacrumbs.shedlock.core.lockprovider; นำเข้า net.javacrumbs.shedlock.provider.redis.spring.redislockprovider; นำเข้า org.springframework.context.annotation.bean; นำเข้า org.springframework.context.annotation.configuration; นำเข้า org.springframework.data.redis.connection.redisconnectionfactory; @Configuration คลาสสาธารณะ REDISSHEDLOCKCONFIG {@BEAN Public LockProvider LockProvider (REDISCONNECTIONFACTORY REDISCONNECTIONFACTORY) {ส่งคืน REDISLOCKPROVIDER ใหม่ (REDISCONNECTIONFACTORY); -

จากนั้นคุณสามารถใช้เช่นเดียวกัน@schedulerlockคำอธิบายประกอบในวิธีการบริการของคุณและ Shed Lock จะใช้ REDIS เพื่อจัดการล็อค

8-3

การแก้ไขปัญหา

บางครั้งสิ่งต่าง ๆ อาจไม่เป็นไปตามแผนที่วางไว้ หากคุณมีปัญหากับ Shed Lock นี่คือปัญหาและวิธีแก้ปัญหาที่พบบ่อย

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

ล็อคประเภทอื่น ๆ ที่เราเสนอ

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

บทสรุป

การใช้ Shed Lock กับ Java 11 เป็นวิธีที่ยอดเยี่ยมในการจัดการล็อคแบบกระจายในแอปพลิเคชันของคุณ มันง่ายที่จะตั้งค่าและให้ความยืดหยุ่นมากกับผู้ให้บริการล็อคที่แตกต่างกัน ไม่ว่าคุณจะใช้ JDBC, Redis หรือกลไกการจัดเก็บที่รองรับอื่น Shed Lock ทำให้คุณได้รับความคุ้มครอง

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

7-6

การอ้างอิง

  • เอกสารเอกสารอย่างเป็นทางการล็อคล็อค
  • เอกสารกรอบฤดูใบไม้ผลิ
ส่งคำถาม