Ú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.