Hej! Ako dodávateľ zámku haly som nadšený, že sa s vami podelím o to, ako používať zámok Shed s Java 11. Shed Lock je úžasný nástroj, ktorý vám pomôže zvládnuť distribuované zámky v aplikácii Java. Je to veľmi užitočné, keď máte spustenú viac inštancií svojej aplikácie a musíte sa uistiť, že určité úlohy sa vykonávajú iba jednou inštanciou súčasne.
Čo je zámok prístrešku?
Predtým, ako sa ponoríme do toho, ako - rýchlo sa porozprávame o tom, čo je zámok. Shed Lock je knižnica Java, ktorá poskytuje jednoduchý spôsob implementácie distribuovaných zámkov. Podporuje rôzne mechanizmy skladovania, ako sú JDBC, Redis, MongoDB atď. Táto flexibilita z neho robí skvelú voľbu pre rôzne typy projektov.
Nastavenie projektu
Najprv je potrebné nastaviť svoj projekt Java 11. Ak používate Maven, pridajte do svojho závislosti na zámkupom.xml. Tu je príklad, ako pridať implementáciu JDBC:
<Depenence> <GroupId> net.javacrumbs.shedlock </s GroupId> <rtifactid> Shedlock-provider-JDBC-Template </rtifactid> <verzia> 4.42.0 </ verzia> </desendency> <prestance> <GroupId> Net.javacrumbs.shedlock </groupilid> <Artifactid> <version> 4.42.0 </version> </závislosť>
Ak používate Gradle, pridajte tieto riadky do svojhostavať.Gradle:
implementácia 'net.javacrumbs.shedlock: Shedlock-provider-JDBC-Template: 4.42.0' Implementácia 'net.javacrumbs.shedlock: Shedlock-pring: 4.42.0'
Konfigurácia poskytovateľa zámku
Po pridaní závislostí musíte nakonfigurovať poskytovateľa zámku. Predpokladajme, že používame databázu JDBC. Budete musieť vytvoriť aUbytovateľBean vo vašej jarnej konfigurácii.
import net.javacrumbs.shedlock.core.lockProvider; import net.javacrumbs.shedlock.provider.jdbcTemplate.jdbcTemplallockProvider; 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 JdbcTemplalockProvider (jdbcTemplalockprovider.configuration.builder () .withjDbcTemplate (nový jdbctemplate (datasource)). }}
Tento kód vytvára aUbytovateľBean, ktorý používa šablónu JDBC na interakciu s databázou. TenPoužívaniedbtime ()Metóda hovorí, že spoločnosť Shed Lock používa čas databázy na správu zámku.
Používanie zámku v službe
Teraz, keď je konfigurácia hotová, pozrime sa, ako vo vašej službe používať zámok Shed. Predpokladajme, že máte metódu služieb, ktorú chcete uzamknúť. Môžete použiť@SchedulerlockAnotácia poskytnutá spoločnosťou Shed Lock.
import net.javacrumbs.shedlock.spring.annotation.schedulerlock; import org.springframework.scheduling.annotation.scheduled; import org.springframework.stereotype.service; @Service Public Class MyService {@Schedulled (fixate = 60000) @schedulerlock (name = "myTasklock", lockamostatfor = "59S", LockatLeastfor = "30s") public void myTask () {// your úlohy tu system.out.println ("beží moje úlohy ..."); }}
V tomto príklade@Scheduledanotácia robímytask ()Metóda beží každých 60 sekúnd. Ten@SchedulerlockAnotácia zaisťuje, že túto metódu môže vykonať iba jednu inštanciu aplikácie. TenpomenovaťAtribút je jedinečný identifikátor pre zámok. TenKučeryatribút určuje maximálny čas, ktorý môže byť zadržaný, aLokalita preAtribút Určuje minimálny čas, ktorý by mal zadržať zámok.
Rôzni poskytovatelia zámku
Ako som už spomenul, Shed Lock podporuje rôznych poskytovateľov zámku. Pozrime sa na použitie Redis ako poskytovateľa zámku.
Najprv pridajte do svojho projektu závislosť od Redis. Ak používate Maven:
<Depreence> <GroupId> net.javacrumbs.shedlock </s GroupId> <Artifactid> Shedlock-provider-redis-spring </rtifactid> <version> 4.42.0 </version> </poundency>
A pre Gradle:
implementácia 'Net.javacrumbs.shedlock: Shedlock-provider-redis-spring: 4.42.0'
Potom nakonfigurujte poskytovateľa zámku Redis v konfigurácii pružiny:
import net.javacrumbs.shedlock.core.lockProvider; import net.javacrumbs.shedlock.provider.redis.spring.redislockProvider; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.data.redis.connection.redisconnectionFactory; @Configuration public class redisshedlockConfig {@bean public LockProvider LockProvider (redisconnectionFactory redisconnectionFactory) {return New RedislockProvider (redisconnectionFactory); }}
Potom môžete použiť to isté@SchedulerlockAnotácia vo vašich servisných metódach a zámok Shed Lock použije na správu zámkov Redis.
Riešenie problémov
Niekedy sa veci nemusia ísť podľa plánu. Ak máte problémy so zámkom Shed, tu sú niektoré bežné problémy a riešenia.
- Zámok nie je prepustený: Skontrolujte
Kučeryatribút. Ak je nastavený príliš dlhý, zámok sa nemusí uvoľniť včas. Môžete tiež skontrolovať, či existujú nejaké výnimky vo vašom kóde, ktoré bránia správnemu uvoľneniu zámku. - Viac inštancií vykonávajúcich uzamknutú úlohu: Uistite sa, že všetky inštancie používajú rovnaký poskytovateľ zámku a konfiguráciu. Skontrolujte tiež, či je databáza alebo server Redis prístupný zo všetkých inštancií.
Iné typy zámkov, ktoré ponúkame
Nie sme len o zámkoch. Ponúkame tiež rôzne ďalšie zámky, ktoré by mohli byť užitočné pre rôzne aplikácie. Napríklad pozrite sa na nášZámok bočných dverí, čo je ideálne na zabezpečenie bočných dverí. NášSebakamerovanieje skvelá voľba, ak chcete dvere, ktoré sa automaticky uzamknú. A ak potrebujete zabezpečiť sklad, nášZámokJe to presne to, čo potrebujete.
Záver
Používanie zámku Shed s Java 11 je skvelý spôsob, ako spravovať distribuované zámky vo vašej aplikácii. Je ľahké nastaviť a poskytuje veľkú flexibilitu s rôznymi poskytovateľmi zámku. Či už používate JDBC, Redis alebo iný podporovaný mechanizmus úložného priestoru, prikryte vás zámok.
Ak máte záujem o nákup našich zámkov z prístreškov alebo niektorého z našich ostatných riešení zamykania, radi by sme sa s vami porozprávali. Oslovte nás, aby ste začali diskusiu o obstarávaní a nájsť najlepšie uzamykacie riešenie pre vaše potreby.
Odkazy
- Oficiálna dokumentácia pre prístrešok
- Jarná rámcová dokumentácia
