Útmutató a ShedLock tavaszhoz

1. Áttekintés

A Spring könnyen megvalósítható API-t biztosít a munkák ütemezéséhez. Nagyszerűen működik, amíg alkalmazásunk több példányát nem telepítjük. A Spring alapértelmezés szerint nem tudja kezelni az ütemező szinkronizálását több példányon keresztül - ehelyett minden csomóponton egyszerre hajtja végre a feladatokat.

Ebben a rövid bemutatóban a ShedLock - egy Java könyvtárat tekintjük meg, amely biztosítja, hogy ütemezett feladataink egyszerre fussanak egyszerre és a Quartz alternatívája.

2. Maven-függőségek

A ShedLock with Spring használatához hozzá kell adnunka shedlock-spring függőség:

 net.javacrumbs.shedlock shedlock-spring 2.2.0 

3. Konfiguráció

Ne feledje, hogy a ShedLock csak megosztott adatbázissal rendelkező környezetekben működik megfelelő érték deklarálásával LockProvider. Táblázatot vagy dokumentumot hoz létre az adatbázisban, ahol tárolja az aktuális zárakkal kapcsolatos információkat.

Jelenleg a ShedLock támogatja a Mongo, a Redis, a Hazelcast, a ZooKeeper és minden egyéb JDBC meghajtóval.

Ebben a példában a memóriában lévő H2 adatbázist fogjuk használni. A működéshez meg kell adnunk a H2 adatbázist és a ShedLock JDBC függőségét:

 net.javacrumbs.shedlock shedlock-szolgáltató-jdbc-template 2.1.0 com.h2database h2 1.4.2004 

Ezután létre kell hoznunk egy adatbázis táblát a ShedLock számára az ütemező zárakkal kapcsolatos információk megőrzéséhez:

CREATE TABLE shedlock (név VARCHAR (64), lock_until TIMESTAMP (3) NULL, locked_at TIMESTAMP (3) NULL, locked_by VARCHAR (255), PRIMARY KEY (név))

Deklarálnunk kell az adatforrást a Spring Boot alkalmazás tulajdonságfájljában, hogy a Adatforrás bab lehet Autowired. Ebben a példában a alkalmazás.yml a H2 adatbázis adatforrásának meghatározása:

tavasz: adatforrás: driverClassName: org.h2. Illesztőprogram URL: jdbc: h2: mem: shedlock_DB; INIT = Séma létrehozása, ha nem létezik shedlock; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = HAMIS felhasználónév: sa jelszó: 

Konfiguráljuk a LockProvider a fenti adatforrás-konfigurációval. A tavasz meglehetősen egyszerűvé teheti:

@Configuration public class SchedulerConfiguration {@Bean public LockProvider lockProvider (DataSource dataSource) {return new JdbcTemplateLockProvider (dataSource); }}

Egy másik konfigurációs követelmény, amelyet meg kell adnunk, a @EnableScheduling és @EnableSchedulerLock annotációk a Spring konfigurációs osztályunkon:

@SpringBootApplication @EnableScheduling @EnableSchedulerLock (defaultLockAtMostFor = "PT30S") public class Application {public static void main (String [] args) {SpringApplication.run (SpringApplication.class, args); }}

A defaultLockAtMostFor A paraméter meghatározza a zárolás alapértelmezett időtartamát arra az esetre, ha a végrehajtó csomópont meghal. Az ISO8601 Duration formátumot használja.

A következő részben meglátjuk, hogyan lehet felülírni ezt az alapértelmezettet.

4. Feladatok létrehozása

A ShedLock által kezelt ütemezett feladat létrehozásához egyszerűen be kell tennünk a @Ütemezett és @SchedulerLock jegyzetek egy módszerről:

@Component class BaeldungTaskScheduler {@Scheduled (cron = "0 0/15 * * *?") @SchedulerLock (name = "TaskScheduler_scheduledTask", lockAtLeastForString = "PT5M", lockAtMostForString = "PT14M ...}}

Először nézzük meg @Ütemezett. Támogatja a cron formátumban, ez a kifejezés jelentése „15 percenként”.

Ezután egy pillantást vetünk rá @SchedulerLock, a név paraméternek egyedinek kell lennie, és ClassName_methodName általában elegendő ahhoz, hogy elérjük. Nem szeretnénk, ha ennek a módszernek egynél több futtatása történne egyszerre, és a ShedLock az egyedi nevet használja ennek elérésére.

Néhány opcionális paramétert is felvettünk.

Először is hozzáadtuk lockAtLeastForString hogy valamilyen távolságot tudjunk tenni a módszer-invokációk között. Használata „PT5M” azt jelenti, hogy ez a módszer legalább 5 percig tartja a zárat. Más szavakkal, ez azt jelenti, hogy ezt a módszert a ShedLock legfeljebb öt percenként futtathatja.

Ezután hozzátettük lockAtMostForString annak meghatározása, hogy mennyi ideig kell a zárat megőrizni arra az esetre, ha a végrehajtó csomópont meghal. Használata „PT14M” azt jelenti, hogy legfeljebb 14 percig zárolódik.

Normál esetben a ShedLock a feladat befejezése után azonnal feloldja a zárat. Most nem kellett ezt tennünk, mert alapértelmezés van megadva @EnableSchedulerLock, de ezt itt felülbíráltuk.

5. Következtetés

Ebben a cikkben megtanultuk az ütemezett feladatok létrehozását és szinkronizálását a ShedLock használatával.

Mint mindig, minden forráskód elérhető a GitHubon.