Cum se configurează Shed Lock pentru sisteme de înaltă disponibilitate?

Jan 12, 2026

Lăsaţi un mesaj

John Lee
John Lee
Sunt directorul tehnologic la Hunan Lianhu Hardware Co., care conduce strategia noastră de inovare. Accentul meu este să dezvoltăm soluții hardware de ultimă oră care să răspundă cerințelor moderne.

În domeniul sistemelor de înaltă disponibilitate, asigurarea faptului că anumite sarcini critice sunt executate cu o sincronizare adecvată și fără condiții de cursă este de cea mai mare importanță. Aici intervine Shed Lock. În calitate de furnizor Shed Lock, sunt aici pentru a vă ghida prin procesul de configurare Shed Lock pentru medii de înaltă disponibilitate.

Înțelegerea Shed Lock

Shed Lock este o bibliotecă care oferă blocări distribuite pentru sarcinile programate în aplicațiile Java. În sistemele de înaltă disponibilitate, mai multe instanțe ale unei aplicații pot încerca să execute aceeași sarcină programată simultan. Acest lucru poate duce la probleme de integritate a datelor, procesare duplicată și alte probleme. Shed Lock rezolvă această problemă utilizând o stocare partajată (cum ar fi o bază de date) pentru a gestiona încuietorile. Doar o singură instanță poate obține blocarea la un moment dat, asigurându-se că sarcina este executată o singură dată.

Cerințe preliminare

Înainte de a începe configurarea Shed Lock, asigurați-vă că aveți următoarele:

  • O aplicație Java care rulează pe o infrastructură de înaltă disponibilitate. Acesta ar putea fi un set de servere într-un cluster, implementate într-un mediu cloud precum AWS sau Google Cloud.
  • O bază de date care poate fi folosită ca spațiu de stocare partajat pentru încuietori. Opțiunile populare includ MySQL, PostgreSQL și H2.
  • Maven sau Gradle configurate pentru a gestiona dependențele.

Pasul 1: Adăugați dependențe

Primul pas este să adăugați dependențele Shed Lock în proiect. Dacă utilizați Maven, adăugați următoarele la dvspom.xml:

<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.42.0</version> </dependency> <dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifact-provider->jartifact-provider->dlock <version>4.42.0</version> </dependency>

Pentru Gradle, adăugați aceste rânduri la dvsconstrui.gradle:

implementare 'net.javacrumbs.shedlock:shedlock-spring:4.42.0' implementare 'net.javacrumbs.shedlock:shedlock-provider-jdbc-template:4.42.0'

Pasul 2: Configurați furnizorul de blocare

Furnizorul de blocare este responsabil pentru interacțiunea cu stocarea partajată (baza de date în cazul nostru) pentru a gestiona blocările. Iată un exemplu despre cum să configurați un furnizor de blocare folosind 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 clasă publică ShedLockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { returnează un nou JdbcTemplateLockProvider( JdbcTemplateLockProvider.Configuration.builder() .withJdbcTemplate(nou JdbcTemplate(dataSource)(DataSource)(dataSource)(DataSourcebuild)() } }

În acest exemplu, creăm unJdbcTemplateLockProviderfasole care foloseste furnizataSursa de datepentru a interacționa cu baza de date. ThefolosindDbTime()metoda indică faptul că dorim să folosim ora de sistem a bazei de date pentru gestionarea blocării.

Pasul 3: Configurați blocarea șopronului în primăvară

Apoi, trebuie să activăm Shed Lock în aplicația noastră Spring. Putem face acest lucru adăugând@EnableSchedulerLockadnotare la clasa noastră principală de configurare:

import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableScheduling @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") clasă publică AppConfig { // Codul de configurare aici }

The@EnableSchedulingadnotarea permite capabilitățile de programare ale Spring și@EnableSchedulerLockactivează Shed Lock. ThedefaultLockAtMostForatributul specifică perioada maximă de timp pe care o blocare poate fi ținută. În acest caz, blocarea va fi eliberată automat după 30 de secunde.

Pasul 4: Aplicați blocări la sarcinile programate

Acum, putem aplica blocări sarcinilor noastre programate. Iată un exemplu:

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() { // System.Taskout. sarcină..."); } }

The@SchedulerLockadnotarea este folosită pentru a aplica o blocare lamyScheduledTaskmetodă. Thenumeatributul este un identificator unic pentru blocare. ThelockAtMostForatributul specifică timpul maxim în care poate fi ținută blocarea șiblocațiCel puținPentruspecifică timpul minim în care va fi ținută blocarea.

Pasul 5: Configurarea bazei de date

Trebuie să creăm un tabel în baza de date pentru a stoca informațiile de blocare. Pentru o bază de date MySQL, instrucțiunea SQL pentru a crea tabelul este după cum urmează:

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

Pentru alte baze de date precum PostgreSQL, instrucțiunea SQL este similară, dar este posibil ca tipurile de date să fie nevoie să fie ajustate în funcție de specificațiile bazei de date.

Considerații suplimentare pentru Disponibilitate ridicată

În sistemele de înaltă disponibilitate, trebuie să luăm în considerare câțiva factori suplimentari:

  • Replicarea bazei de date: Dacă utilizați o bază de date replicată, asigurați-vă că tabelul de blocare este replicat corect. Orice întârziere în replicare poate duce la obținerea simultană a mai multor instanțe de blocare.
  • Latența rețelei: Latența mare a rețelei între instanțele aplicației și baza de date poate afecta achiziția și eliberarea blocării. Luați în considerare utilizarea unei baze de date care este aproape geografic de serverele dvs. de aplicații.
  • Recuperarea eșecului: implementați mecanisme adecvate de recuperare a erorilor. Dacă o instanță eșuează în timp ce ține un blocare, blocarea ar trebui să fie eliberată automat dupălockAtMostFortimpul a trecut.

Link-uri legate de produse

Dacă sunteți în căutarea unor încuietori de înaltă calitate pentru alte aplicații, s-ar putea să vă interesezeApăsați Blocarea,Încuietoare din lemn, șiÎncuietoare rotundă a ușii.

Contactați-ne pentru achiziții

Înțelegem importanța soluțiilor de închidere fiabile în sistemele de înaltă disponibilitate. În calitate de furnizor Shed Lock, ne angajăm să vă oferim cele mai bune produse și asistență. Dacă sunteți interesat să achiziționați Shed Lock pentru proiectele dvs. de înaltă disponibilitate sau aveți întrebări despre configurarea acestuia, vă încurajăm să contactați. Începeți o conversație cu noi pentru a discuta nevoile dumneavoastră specifice și pentru a explora modul în care Shed Lock poate îmbunătăți performanța și fiabilitatea sistemelor dumneavoastră.

19-61-5

Referințe

  • Documentația oficială Shed Lock, „https://www.javacrumbs.net/shedlock/”
  • Documentația Spring Framework, „https://docs.spring.io/spring-framework/docs/current/reference/html/”
Trimite anchetă