Ako nakonfigurovať Shed Lock pre systémy s vysokou dostupnosťou?

Jan 12, 2026

Zanechajte správu

John Lee
John Lee
Som hlavným technologickým riaditeľom spoločnosti Hunan Lianhu Hardware Co., ktorý riadi našu inovačnú stratégiu. Zameriavam sa na vývoj špičkových hardvérových riešení, ktoré spĺňajú moderné požiadavky.

V oblasti systémov s vysokou dostupnosťou je nanajvýš dôležité zabezpečiť, aby sa určité kritické úlohy vykonávali so správnou synchronizáciou a bez pretekových podmienok. Tu vstupuje do hry Shed Lock. Ako dodávateľ Shed Lock som tu, aby som vás previedol procesom konfigurácie Shed Lock pre prostredia s vysokou dostupnosťou.

Pochopenie Shed Lock

Shed Lock je knižnica, ktorá poskytuje distribuované zámky pre naplánované úlohy v aplikáciách Java. V systémoch s vysokou dostupnosťou sa viaceré inštancie aplikácie môžu pokúsiť vykonať rovnakú naplánovanú úlohu súčasne. To môže viesť k problémom s integritou údajov, duplicitným spracovaním a iným problémom. Shed Lock rieši tento problém pomocou zdieľaného úložiska (napríklad databázy) na správu zámkov. Naraz môže získať zámok iba jedna inštancia, čím sa zabezpečí, že úloha sa vykoná iba raz.

Predpoklady

Skôr než začneme konfigurovať zámok prístrešku, uistite sa, že máte nasledujúce:

  • Java aplikácia bežiaca na infraštruktúre s vysokou dostupnosťou. Môže to byť súbor serverov v klastri nasadených v cloudovom prostredí, ako je AWS alebo Google Cloud.
  • Databáza, ktorú možno použiť ako zdieľané úložisko pre zámky. Populárne možnosti zahŕňajú MySQL, PostgreSQL a H2.
  • Maven alebo Gradle nakonfigurované na správu závislostí.

Krok 1: Pridajte závislosti

Prvým krokom je pridanie závislostí Shed Lock do vášho projektu. Ak používate Maven, pridajte do svojhopom.xml:

<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.42.0</version> </dependency> <dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId-factidblock- <version>4.42.0</version> </dependency>

Pre Gradle pridajte tieto riadky do svojhostavať.gradle:

implementácia 'net.javacrumbs.shedlock:shedlock-spring:4.42.0' implementácia 'net.javacrumbs.shedlock:shedlock-provider-jdbc-template:4.42.0'

Krok 2: Nakonfigurujte poskytovateľa zámku

Poskytovateľ zámkov je zodpovedný za interakciu so zdieľaným úložiskom (v našom prípade databázou) pri správe zámkov. Tu je príklad, ako nakonfigurovať poskytovateľa zámkov pomocou aplikácie SpringJdbcTemplate:

import net.javacrumbs.shedlock.core.LockProvider; import net.javacrumbs.shedlock.provider.jdbc.template.JdbcTemplateLockProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @Configuration public class ShedLockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { return new JdbcTemplateLockProvider( JdbcTemplateLockProvider.Configuration.builder() .withJdbcTemplate(new Jdbc)Cemplate(new Jdbc)Cemplate)Dbdata. ); } }

V tomto príklade vytvoríme aJdbcTemplateLockProviderfazuľa, ktorá využíva poskytnutéDataSourcena interakciu s databázou. TheusingDbTime()metóda naznačuje, že chceme použiť systémový čas databázy na správu zámkov.

Krok 3: Nakonfigurujte zámok haly na jar

Ďalej musíme povoliť Shed Lock v našej aplikácii Spring. Môžeme to urobiť pridaním@EnableSchedulerLockanotácia k našej hlavnej triede konfigurácie:

import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableScheduling @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") public class AppConfig { // Konfiguračný kód tu }

The@EnableSchedulinganotácia umožňuje funkcie plánovania Spring a@EnableSchedulerLockumožňuje uzamknutie prístrešku. ThedefaultLockAtMostForatribút určuje maximálny čas, počas ktorého môže byť zámok držaný. V tomto prípade sa zámok po 30 sekundách automaticky uvoľní.

Krok 4: Použite zámky na naplánované úlohy

Teraz môžeme použiť zámky na naše naplánované úlohy. Tu je príklad:

import net.javacrumbs.shedlock.spring.annotation.SchedulerLock; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Service public class ScheduledTaskService { @Scheduled(fixedRate = 60000) @SchedulerLock(name = "myScheduledTask", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M") public void myScheduledTask() { tu vystrihnutie úlohy. } }

The@SchedulerLockanotácia sa používa na použitie zámku namyScheduledTaskmetóda. Themenoatribút je jedinečný identifikátor zámku. ThelockAtMostForatribút určuje maximálny čas, počas ktorého môže byť zámok držaný, alockAtLeastForurčuje minimálny čas, počas ktorého bude zámok držaný.

Krok 5: Nastavenie databázy

Potrebujeme vytvoriť tabuľku v databáze na uloženie informácií o zámku. V prípade databázy MySQL je príkaz SQL na vytvorenie tabuľky nasledujúci:

CREATE TABLE shedlock( meno VARCHAR(64) NOT NULL, lock_until TIMESTAMP(3) NOT NULL, locked_at TIMESTAMP(3) NOT NULL, locked_by VARCHAR(255) NOT NULL, PRIMARY KEY (name) );

V prípade iných databáz, ako je PostgreSQL, je príkaz SQL podobný, ale možno bude potrebné upraviť dátové typy podľa špecifikácií databázy.

Ďalšie úvahy o vysokej dostupnosti

V systémoch s vysokou dostupnosťou musíme zvážiť niekoľko ďalších faktorov:

  • Replikácia databázy: Ak používate replikovanú databázu, uistite sa, že tabuľka zámkov je replikovaná správne. Akékoľvek oneskorenie v replikácii môže viesť k tomu, že zámok získa viacero inštancií súčasne.
  • Latencia siete: Vysoká latencia siete medzi inštanciami aplikácie a databázou môže ovplyvniť získanie a uvoľnenie zámku. Zvážte použitie databázy, ktorá je geograficky blízko vašich aplikačných serverov.
  • Obnova po zlyhaní: Implementujte správne mechanizmy obnovy zlyhania. Ak inštancia zlyhá pri držaní zámku, zámok by sa mal po aktivácii automaticky uvoľniťlockAtMostForčas uplynul.

Odkazy na súvisiace produkty

Ak hľadáte kvalitné zámky pre iné aplikácie, mohli by vás zaujímať našePush Lock,Drevený zámok dverí, aOkrúhly zámok dverí.

Kontaktujte nás a obstarajte

Chápeme dôležitosť spoľahlivých zámkových riešení v systémoch s vysokou dostupnosťou. Ako dodávateľ Shed Lock sme odhodlaní poskytovať vám tie najlepšie produkty a podporu. Ak máte záujem o obstaranie zámku Shed Lock pre vaše projekty vysokej dostupnosti alebo máte akékoľvek otázky týkajúce sa jeho konfigurácie, odporúčame vám kontaktovať. Začnite s nami konverzáciu, aby ste prediskutovali svoje špecifické potreby a preskúmali, ako môže náš Shed Lock zvýšiť výkon a spoľahlivosť vašich systémov.

19-61-5

Referencie

  • Oficiálna dokumentácia Shed Lock, "https://www.javacrumbs.net/shedlock/"
  • Dokumentácia Spring Framework, "https://docs.spring.io/spring-framework/docs/current/reference/html/"
Zaslať požiadavku