Amikor az elosztott zárolást igénylő alkalmazások teszteléséről van szó, a Shed Lock egy hatékony eszköz, amely hatékonyan integrálható egy H2 adatbázisba. A Shed Lock beszállítójaként első kézből tapasztaltam az ilyen zárszerkezetek bevezetésével és tesztelésével járó kihívásokat és lehetőségeket. Ebben a blogbejegyzésben végigvezetem Önt a Shed Lock és a H2 adatbázis tesztelési célú használatán.
A Shed Lock megértése
A Shed Lock egy olyan könyvtár, amely elosztott zárakat biztosít a Java alkalmazások ütemezett feladataihoz. Biztosítja, hogy egy adott feladat csak egyszer kerüljön végrehajtásra egy alkalmazás több példányában, megelőzve a versenyfeltételeket és más párhuzamossági problémákat. Ez kulcsfontosságú az elosztott rendszerekben, ahol több csomópont is megkísérelheti ugyanazt a feladatot egyidejűleg végrehajtani.
A Shed Lock alapkoncepciója egyszerű: adatbázist használ a zárinformációk tárolására. Amikor egy feladat végrehajtása előtt áll, megpróbál zárolást szerezni az adatbázisban. Ha a zár elérhető, a feladat folytatódik; ellenkező esetben kivárja vagy kihagyja a végrehajtást. Ez a mechanizmus biztosítja, hogy a feladatnak egyszerre csak egy példánya futhasson.


Miért használja a H2 adatbázist teszteléshez?
A H2 adatbázis egy memórián belüli adatbázis, amely könnyű, gyors és könnyen beállítható. Nem igényel külön szerverfolyamatot, így ideális környezetek tesztelésére. A Shed Lock tesztelésekor a H2 adatbázis használatával gyorsan felpörgethet egy tesztelési környezetet anélkül, hogy egy teljes értékű adatbázis-rendszer kezelésével kellene több ráfordítással járnia.
A projekt beállítása
A Shed Lock H2 adatbázissal való használatának megkezdéséhez először be kell állítania egy Java projektet. Használhat olyan építőeszközt, mint a Maven vagy a Gradle. Íme egy példa arra, hogyan adhatjuk hozzá a szükséges függőségeket egy Maven projekthez:
<dependencies> <dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.44.0</version> </dependency> <dependency> <groupId>net.javacrumbs.Idlock <artifactId>shedlock-provider-jdbc-template</artifactId> <version>4.44.0</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version</dependency>4version</pendency> 2.1. <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> </dependencies>
A H2 adatbázis konfigurálása
A függőségek hozzáadása után konfigurálnia kell a H2 adatbázist. A Spring Boot alkalmazásban ezt megteheti aalkalmazás.tulajdonságokvagyalkalmazás.ymlfájlt. Íme egy példa arraalkalmazás.tulajdonságok:
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=jelszó spring.h2.console.enabled=true
Ezek a tulajdonságok beállítják a H2 adatbázist, hogy memória módban fusson. Aspring.h2.console.enabled=truetulajdonság engedélyezi a H2 konzolt, ami hasznos lehet a hibakereséshez.
A Shed Lock konfigurálása
Ezután be kell állítania a Shed Lockot, hogy a H2 adatbázist használja zárolási szolgáltatóként. Ezt egy konfigurációs osztály létrehozásával teheti meg:
import net.javacrumbs.shedlock.core.LockProvider; import net.javacrumbs.shedlock.provider.jdbc.template.JdbcTemplateLockProvider; import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @Konfiguráció @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") public class ShedLockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { return new JdbcTemplateLockProvider( JdbcTemplateLockProvider.Configuration.c.withJ(bd)Tebuil JdbcTemplate(adatforrás)) .usingDbTime() .build() ); } }
Ebben a konfigurációs osztályban definiáljuk aLockProviderbab, amely aJdbcTemplateLockProvidera H2 adatforrással. A@EnableSchedulerLockmegjegyzés engedélyezi a Shed Lock funkciót a Spring alkalmazásban.
Ütemezett feladat létrehozása
Most hozzunk létre egy egyszerű ütemezett feladatot, amely a Shed Lock funkciót használja. Íme egy példa:
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class ScheduledTask { @Scheduled(fixedRate = 5000) @SchedulerLock(name = "scheduledTask", lockAtMostFor = "PT10S", lockAtLeastFor = "PT5S") public void runTask() { System.out.println("Task") } }
A@Ütemezettmegjegyzés határozza meg a feladat ütemezését, és a@SchedulerLockaz annotáció biztosítja, hogy a feladat csak egyszer kerüljön végrehajtásra több példányban. Anévattribútuma a@SchedulerLockjegyzet a zár azonosítására szolgál, és alockAtMostForéslockAtLeastForAz attribútumok meghatározzák a zárolás maximális és minimális időtartamát.
A beállítás tesztelése
A beállítás teszteléséhez futtassa a Spring Boot alkalmazást. Látnia kell, hogy a feladat a megadott időközönként fut, és a zárszerkezetnek biztosítania kell, hogy csak egyszer fusson. A H2 konzolt is használhatja az adatbázis zárolási bejegyzéseinek ellenőrzésére.
Speciális tesztelési forgatókönyvek
Az alapvető tesztelés mellett érdemes lehet tesztelni a fejlettebb forgatókönyveket is, például a zárolás lejáratát, a párhuzamos hozzáférést és a hibakezelést. Használhat olyan tesztelési keretrendszereket, mint a JUnit és a Mockito, hogy szimulálja ezeket a forgatókönyveket.
Írhat például egy egységtesztet annak ellenőrzésére, hogy a zár feloldása után alockAtMostForidőtartam:
import net.javacrumbs.shedlock.core.LockConfiguration; import net.javacrumbs.shedlock.core.LockProvider; import net.javacrumbs.shedlock.core.SimpleLock; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.time.Duration; import java.time.Instant; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; @SpringBootTest public class LockExpirationTest { @Autowired private LockProvider lockProvider; @Test public void testLockExpiration() { LockConfiguration lockConfig = new LockConfiguration(Instant.now(), "testLock", Duration.ofSeconds(5)); SimpleLock zár = lockProvider.lock(lockConfig); assertNotNull(lock, "A zárolást be kell szerezni"); try { Thread.sleep(6000); } catch (InterruptedException e) { e.printStackTrace(); } SimpleLock newLock = lockProvider.lock(lockConfig); assertNotNull(newLock, "A zárolásnak elérhetőnek kell lennie a lejárat után"); } }
Következtetés
A Shed Lock használata H2 adatbázissal a teszteléshez egyszerű és hatékony módja annak, hogy biztosítsa az elosztott zármechanizmusok helyességét. Az ebben a blogbejegyzésben ismertetett lépések követésével gyorsan beállíthat egy tesztkörnyezetet, és különféle forgatókönyveket tesztelhet annak biztosítására, hogy az alkalmazás a várt módon működjön.
Ha szeretne Shed Lock megoldásokat vásárolni, vagy bármilyen kérdése van a Shed Lock alkalmazással való integrálásával kapcsolatban, készséggel állunk rendelkezésére. Akár kellShed Door Záraka fizikai biztonság érdekében illNegyedfordulós zárspeciális beléptetési szabályozáshoz, vagy akárKültéri zárkülső alkalmazásokhoz szakértői csapatunk tudja a legjobb megoldásokat nyújtani. Lépjen kapcsolatba velünk a beszerzési megbeszélés elindításához és az Ön igényeinek megfelelő termékek megtalálásához.
Hivatkozások
- Shed Lock hivatalos dokumentációja
- Spring Boot hivatalos dokumentációja
- H2 adatbázis hivatalos dokumentációja
