이봐! Shed Lock 공급 업체로서 저는 Java 11과 함께 Shed Lock을 사용하는 방법을 공유해야합니다. Shed Lock은 Java 응용 프로그램에서 분산 잠금 장치를 처리하는 데 도움이되는 멋진 도구입니다. 앱의 여러 인스턴스가 실행될 때 매우 유용하며 특정 작업이 한 번에 하나의 인스턴스 만 실행되도록해야합니다.
Shed Lock은 무엇입니까?
우리가 How- To에 뛰어 들기 전에 Shed Lock이 무엇인지 빨리 이야기합시다. Shed Lock은 분산 잠금 장치를 구현하는 간단한 방법을 제공하는 Java 라이브러리입니다. JDBC, Redis, MongoDB 등과 같은 다양한 스토리지 메커니즘을 지원합니다.이 유연성은 다양한 유형의 프로젝트에 적합한 선택입니다.
프로젝트 설정
먼저 Java 11 프로젝트를 설정해야합니다. Maven을 사용하는 경우 창고 잠금 의존성을 추가하십시오.pom.xml. JDBC 구현을 추가하는 방법의 예는 다음과 같습니다.
<pectionency> <groupid> net.javacrumbs.shedlock </groupid> <artifactid> Shedlock-Provider-jdbc-Template </artifactid> <bersion> 4.42.0 </dependency> <pelection> <groupid> net.javacrumbs.shedlock </groupdlock> <artifactid> shedlock-sprid <버전> 4.42.0 </버전> </의존성>
Gradle을 사용하는 경우이 라인을 추가하십시오build.gradle:
구현 'net.javacrumbs.shedlock : Shedlock-Provider-JDBC-Template : 4.42.0'구현 'net.javacrumbs.shedlock : Shedlock-Spring : 4.42.0'
잠금 공급자 구성
종속성을 추가하면 잠금 공급자를 구성해야합니다. JDBC 데이터베이스를 사용하고 있다고 가정 해 봅시다. 당신은 만들어야합니다LockProvider스프링 구성의 Bean.
import net.javacrumbs.shedlock.core.lockprovider; import net.javacrumbs.shedlock.provider.jdbctemplate.jdbctemplatelockprovider; import org.springframework.context.annotation.bean; org.springframework.context.annotation.configuration; import org.springframework.jdbc.core.jdbctemplate; javax.sql.datasource import; @configuration public class shedlockconfig {@bean public lockprovider lockprovider (dataSource dataSource) {return new jdbctemplatelockProvider (jdbctemplatelockprovider.configuration.builder () .withjdbctemplate (dataSource)). .짓다() ); }}
이 코드는 aLockProviderJDBC 템플릿을 사용하여 데이터베이스와 상호 작용하는 Bean. 그만큼usingdbtime ()메소드는 Shed Lock에게 데이터베이스의 잠금 관리 시간을 사용하도록 지시합니다.
서비스에서 창고 잠금 장치를 사용합니다
구성이 완료되었으므로 서비스에서 Shed Lock을 사용하는 방법을 살펴 보겠습니다. 잠그고 싶은 서비스 방법이 있다고 가정 해 봅시다. 당신은 사용할 수 있습니다@SchedulerLockShed Lock이 제공하는 주석.
import net.javacrumbs.shedlock.spring.annotation.schedulerlock; org.springframework.scheduling.annotation.scheduled; org.springframework.stereotyp.service; @service public class myservice {@scheduled (fixedrate = 60000) @schedulerlock (name = "mytasklock", lockat mostfor = "59s" "30s") public void mytask () {// 당신의 작업 논리가 시스템으로 간다 ( "내 작업 실행 ..."); }}
이 예에서@scheduled주석이 만듭니다Mytask ()방법은 60 초마다 실행됩니다. 그만큼@SchedulerLock주석은 응용 프로그램의 하나의 인스턴스만이 방법을 한 번에 실행할 수 있도록합니다. 그만큼이름속성은 잠금의 고유 식별자입니다. 그만큼CURL -POSTFOR속성은 잠금을 유지할 수있는 최대 시간을 지정하고Lockatleastfor속성 자물쇠가 고정되어야하는 최소 시간을 지정합니다.
다른 자물쇠 공급자
앞에서 언급했듯이 Shed Lock은 다른 잠금 공급자를 지원합니다. Redis를 잠금 공급자로 사용하는 것을 살펴 보겠습니다.
먼저 프로젝트에 Redis 의존성을 추가하십시오. Maven을 사용하는 경우 :
<pectionency> <groupid> net.javacrumbs.shedlock </groupid> <artifactid> Shedlock-Provider-Redis-Spring </artifactid> <bersion> 4.42.0 </version> </dependency>
그리고 Gradle의 경우 :
구현 'net.javacrumbs.shedlock : Shedlock-Provider-Redis-Spring : 4.42.0'
그런 다음 스프링 구성에서 Redis Lock 제공 업체를 구성하십시오.
import net.javacrumbs.shedlock.core.lockprovider; import net.javacrumbs.shedlock.provider.redis.spring.redislockprovider; import org.springframework.context.annotation.bean; org.springframework.context.annotation.configuration; org.springframework.data.redis.connection.redisconnectionfactory; @configuration public class redisshedlockconfig {@bean public lockprovider lockprovider (retisconnectionfactory readisconnectionfactory) {return new retislockprovider (retisconnection factory); }}
그런 다음 동일하게 사용할 수 있습니다@SchedulerLock서비스 방법에 주석이 있고 Shed Lock은 Redis를 사용하여 잠금을 관리합니다.
문제 해결
때로는 상황이 계획대로 진행되지 않을 수도 있습니다. Shed Lock에 문제가있는 경우 몇 가지 일반적인 문제와 솔루션이 있습니다.
- 잠금이 해제되지 않습니다: 확인
CURL -POSTFOR기인하다. 너무 길면 잠금이 적시에 해제되지 않을 수 있습니다. 코드에 잠금이 제대로 해제되는 것을 방지하는 예외가 있는지 확인할 수도 있습니다. - 잠긴 작업을 실행하는 여러 인스턴스: 모든 인스턴스가 동일한 잠금 공급자 및 구성을 사용하고 있는지 확인하십시오. 또한 모든 인스턴스에서 데이터베이스 또는 Redis 서버에 액세스 할 수 있는지 확인하십시오.
우리가 제공하는 다른 유형의 자물쇠
우리는 단지 창고 자물쇠에 관한 것이 아닙니다. 또한 다양한 응용 프로그램에 유용 할 수있는 다양한 잠금 장치도 제공합니다. 예를 들어, 우리의 것을 확인하십시오측면 도어 잠금측면 도어를 고정하기에 완벽합니다. 우리의자체 잠금 도어자동으로 잠그는 도어를 원한다면 훌륭한 옵션입니다. 그리고 당신이 창고를 확보해야한다면, 우리저장실 잠금당신이 필요로하는 것입니다.
결론
Java 11과 함께 Shed Lock을 사용하는 것은 애플리케이션에서 분산 잠금 장치를 관리하는 좋은 방법입니다. 설정하기 쉽고 다양한 잠금 공급자에게 많은 유연성을 제공합니다. JDBC, Redis 또는 다른 지원되는 스토리지 메커니즘을 사용하든 Shed Lock을 사용해 보았습니다.
창고 잠금 장치 나 다른 잠금 솔루션을 구매하는 데 관심이 있다면 대화를 나누고 싶습니다. 조달 토론을 시작하고 귀하의 요구에 가장 적합한 잠금 솔루션을 찾으려면 저희에게 연락하십시오.
참조
- 잠금 잠금 공식 문서
- 봄 프레임 워크 문서
