เฮ้ ในฐานะซัพพลายเออร์ล็อคโรงเก็บของฉันได้แบ่งปันกับคุณถึงวิธีการใช้ 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 คุณจะต้องสร้างไฟล์ผู้ล็อคถั่วในการกำหนดค่าฤดูใบไม้ผลิของคุณ
นำเข้า 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 ใช้เวลาของฐานข้อมูลสำหรับการจัดการล็อค
การใช้ 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 เพื่อจัดการล็อค
การแก้ไขปัญหา
บางครั้งสิ่งต่าง ๆ อาจไม่เป็นไปตามแผนที่วางไว้ หากคุณมีปัญหากับ Shed Lock นี่คือปัญหาและวิธีแก้ปัญหาที่พบบ่อย
- ล็อคไม่ได้รับการปล่อยตัว: ตรวจสอบไฟล์
ขดคุณลักษณะ. หากตั้งไว้นานเกินไปล็อคอาจไม่ได้รับการปล่อยตัวในเวลาที่เหมาะสม นอกจากนี้คุณยังสามารถตรวจสอบว่ามีข้อยกเว้นใด ๆ ในรหัสของคุณที่ป้องกันไม่ให้ล็อคถูกปล่อยออกมาอย่างถูกต้องหรือไม่ - หลายอินสแตนซ์ที่ดำเนินการงานล็อค: ตรวจสอบให้แน่ใจว่าอินสแตนซ์ทั้งหมดใช้ผู้ให้บริการล็อคและการกำหนดค่าเดียวกัน นอกจากนี้ตรวจสอบว่าฐานข้อมูลหรือเซิร์ฟเวอร์ Redis สามารถเข้าถึงได้จากทุกอินสแตนซ์หรือไม่
ล็อคประเภทอื่น ๆ ที่เราเสนอ
เราไม่ได้เป็นเพียงแค่ล็อคหลั่ง นอกจากนี้เรายังนำเสนอล็อคอื่น ๆ ที่หลากหลายซึ่งอาจเป็นประโยชน์สำหรับแอปพลิเคชันที่แตกต่างกัน ตัวอย่างเช่นตรวจสอบไฟล์ล็อคประตูด้านข้างซึ่งเหมาะสำหรับการรักษาประตูด้านข้าง ของเราประตูล็อคตัวเองเป็นตัวเลือกที่ยอดเยี่ยมหากคุณต้องการประตูที่ล็อคโดยอัตโนมัติ และถ้าคุณต้องการรักษาห้องเก็บของล็อคห้องเก็บของเป็นเพียงสิ่งที่คุณต้องการ
บทสรุป
การใช้ Shed Lock กับ Java 11 เป็นวิธีที่ยอดเยี่ยมในการจัดการล็อคแบบกระจายในแอปพลิเคชันของคุณ มันง่ายที่จะตั้งค่าและให้ความยืดหยุ่นมากกับผู้ให้บริการล็อคที่แตกต่างกัน ไม่ว่าคุณจะใช้ JDBC, Redis หรือกลไกการจัดเก็บที่รองรับอื่น Shed Lock ทำให้คุณได้รับความคุ้มครอง
หากคุณสนใจที่จะซื้อล็อคโรงเก็บของหรือโซลูชั่นล็อคอื่น ๆ ของเราเรายินดีที่จะแชทกับคุณ ติดต่อเราเพื่อเริ่มการอภิปรายการจัดซื้อและค้นหาวิธีแก้ปัญหาการล็อคที่ดีที่สุดสำหรับความต้องการของคุณ
การอ้างอิง
- เอกสารเอกสารอย่างเป็นทางการล็อคล็อค
- เอกสารกรอบฤดูใบไม้ผลิ
