Yüksek kullanılabilirliğe sahip sistemler için Shed Lock nasıl yapılandırılır?

Jan 12, 2026

Mesaj bırakın

John Lee
John Lee
İnovasyon stratejimizi yönlendiren Hunan Lianhu Donanım Co.'nun baş teknoloji görevlisiyim. Odak noktam, modern talepleri karşılayan en yeni donanım çözümleri geliştirmek.

Yüksek kullanılabilirliğe sahip sistemler alanında, belirli kritik görevlerin uygun senkronizasyonla ve yarış koşulları olmadan yürütülmesini sağlamak son derece önemlidir. Shed Lock'un devreye girdiği yer burasıdır. Bir Shed Lock tedarikçisi olarak, Shed Lock'u yüksek kullanılabilirlik ortamları için yapılandırma sürecinde size rehberlik etmek için buradayım.

Kulübe Kilidini Anlamak

Shed Lock, Java uygulamalarındaki zamanlanmış görevler için dağıtılmış kilitler sağlayan bir kitaplıktır. Yüksek kullanılabilirliğe sahip sistemlerde, bir uygulamanın birden çok örneği aynı zamanlanmış görevi aynı anda yürütmeyi deneyebilir. Bu, veri bütünlüğü sorunlarına, yinelenen işlemlere ve diğer sorunlara yol açabilir. Shed Lock, kilitleri yönetmek için paylaşılan bir depolama alanı (veritabanı gibi) kullanarak bu sorunu çözer. Aynı anda yalnızca bir örnek kilidi alabilir, bu da görevin yalnızca bir kez yürütülmesini sağlar.

Önkoşullar

Shed Lock'u yapılandırmaya başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Yüksek kullanılabilirliğe sahip bir altyapı üzerinde çalışan bir Java uygulaması. Bu, AWS veya Google Cloud gibi bir bulut ortamında dağıtılan, kümedeki bir dizi sunucu olabilir.
  • Kilitler için paylaşılan depolama alanı olarak kullanılabilecek bir veritabanı. Popüler seçenekler arasında MySQL, PostgreSQL ve H2 bulunur.
  • Bağımlılıkları yönetmek için yapılandırılmış Maven veya Gradle.

1. Adım: Bağımlılıklar Ekleyin

İlk adım Shed Lock bağımlılıklarını projenize eklemektir. Maven kullanıyorsanız aşağıdakileri ekleyin:pom.xml:

<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.42.0</version> </dependency> <dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-provider-jdbc-template</artifactId> <version>4.42.0</version> </dependency>

Gradle için bu satırlarıbuild.gradle:

uygulama 'net.javacrumbs.shedlock:shedlock-spring:4.42.0' uygulama 'net.javacrumbs.shedlock:shedlock-provider-jdbc-template:4.42.0'

Adım 2: Kilit Sağlayıcıyı Yapılandırın

Kilit sağlayıcı, kilitleri yönetmek için paylaşılan depolama alanıyla (bizim durumumuzda veritabanı) etkileşim kurmaktan sorumludur. Spring'i kullanarak bir kilit sağlayıcının nasıl yapılandırılacağına dair bir örnek:Jdbc Şablonu:

net.javacrumbs.shedlock.core.LockProvider'ı içe aktarın; net.javacrumbs.shedlock.provider.jdbc.template.JdbcTemplateLockProvider'ı içe aktarın; org.springframework.context.annotation.Bean'i içe aktar; org.springframework.context.annotation.Configuration'ı içe aktar; org.springframework.jdbc.core.JdbcTemplate'i içe aktar; javax.sql.DataSource'u içe aktarın; @Configuration genel sınıfı ShedLockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { return new JdbcTemplateLockProvider( JdbcTemplateLockProvider.Configuration.builder() .withJdbcTemplate(new JdbcTemplate(dataSource)) .usingDbTime() .build() ); } }

Bu örnekte, bir oluşturuyoruzJdbcTemplateLockProvidersağlananları kullanan fasulyeVeri Kaynağıveritabanıyla etkileşime geçmek için.DbTime() kullanarakyöntemi, veritabanının sistem saatini kilit yönetimi için kullanmak istediğimizi belirtir.

Adım 3: İlkbaharda Kulübe Kilidini Yapılandırma

Daha sonra Spring uygulamamızda Shed Lock'u etkinleştirmemiz gerekiyor. Bunu ekleyerek yapabiliriz@EnableSchedulerLockana konfigürasyon sınıfımıza ek açıklama:

net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock'u içe aktarın; org.springframework.context.annotation.Configuration'ı içe aktar; org.springframework.scheduling.annotation.EnableScheduling'i içe aktarın; @Configuration @EnableScheduling @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") genel sınıf AppConfig { // Yapılandırma kodu burada }

@EnableSchedulingaçıklama, Spring'in planlama yeteneklerini etkinleştirir ve@EnableSchedulerLockShed Lock'u etkinleştirir.varsayılanLockAtMostForözelliği, bir kilidin tutulabileceği maksimum süreyi belirtir. Bu durumda kilit 30 saniye sonra otomatik olarak açılacaktır.

4. Adım: Zamanlanmış Görevlere Kilit Uygulayın

Artık zamanlanmış görevlerimize kilit uygulayabiliriz. İşte bir örnek:

net.javacrumbs.shedlock.spring.annotation.SchedulerLock'u içe aktarın; org.springframework.scheduling.annotation.Scheduled'ı içe aktarın; org.springframework.stereotype.Service'i içe aktar; @Service genel sınıfı ScheduledTaskService { @Scheduled(fixedRate = 60000) @SchedulerLock(name = "myScheduledTask", lockAtMostFor = "PT10M", lockAtLeastFor = "PT1M") public void myScheduledTask() { // Görev mantığı burada System.out.println("Zamanlanmış görev yürütülüyor..."); } }

@SchedulerLockek açıklama bir kilit uygulamak için kullanılırbenimZamanlanmışGörevimYöntem.isimnitelik kilit için benzersiz bir tanımlayıcıdır.EnMostFor'u kilitlenitelik, kilidin tutulabileceği maksimum süreyi belirtir velockAtLeastForkilidin tutulacağı minimum süreyi belirtir.

Adım 5: Veritabanı Kurulumu

Kilit bilgilerini saklamak için veritabanında bir tablo oluşturmamız gerekiyor. Bir MySQL veritabanı için tabloyu oluşturmaya yönelik SQL ifadesi aşağıdaki gibidir:

CREATE TABLE shedlock( name VARCHAR(64) NOT NULL, lock_until TIMESTAMP(3) NOT NULL, kilitli_at TIMESTAMP(3) NOT NULL, kilitli_by VARCHAR(255) NOT NULL, PRIMARY KEY (name) );

PostgreSQL gibi diğer veritabanları için SQL ifadesi benzerdir ancak veri türlerinin veritabanının özelliklerine göre ayarlanması gerekebilir.

Yüksek Kullanılabilirlik İçin Ek Hususlar

Yüksek kullanılabilirliğe sahip sistemlerde birkaç ek faktörü dikkate almamız gerekir:

  • Veritabanı Çoğaltma: Çoğaltılmış bir veritabanı kullanıyorsanız kilit tablosunun doğru şekilde çoğaltıldığından emin olun. Çoğaltmadaki herhangi bir gecikme, birden fazla örneğin kilidi aynı anda almasına yol açabilir.
  • Ağ Gecikmesi: Uygulama örnekleri ile veritabanı arasındaki yüksek ağ gecikmesi, kilidin alınmasını ve serbest bırakılmasını etkileyebilir. Uygulama sunucularınıza coğrafi olarak yakın bir veritabanı kullanmayı düşünün.
  • Arıza Kurtarma: Uygun arıza giderme mekanizmalarını uygulayın. Bir örnek, kilidi tutarken başarısız olursa, kilidin otomatik olarak serbest bırakılması gerekir.EnMostFor'u kilitlezaman geçti.

İlgili Ürün Bağlantıları

Diğer uygulamalar için yüksek kaliteli kilitler arıyorsanız, ürünlerimiz ilginizi çekebilirİtme Kilidi,Ahşap Kapı Kilidi, VeYuvarlak Kapı Kilidi.

Tedarik İçin Bize Ulaşın

Yüksek kullanılabilirliğe sahip sistemlerde güvenilir kilit çözümlerinin önemini anlıyoruz. Bir Shed Lock tedarikçisi olarak size en iyi ürünleri ve desteği sağlamaya kararlıyız. Yüksek kullanılabilirliğe sahip projeleriniz için Shed Lock tedarik etmekle ilgileniyorsanız veya konfigürasyonu hakkında sorularınız varsa, bizimle iletişime geçmenizi öneririz. Özel ihtiyaçlarınızı tartışmak ve Baraka Kilitimizin sistemlerinizin performansını ve güvenilirliğini nasıl artırabileceğini keşfetmek için bizimle bir görüşme başlatın.

19-61-5

Referanslar

  • Shed Lock resmi belgeleri, "https://www.javacrumbs.net/shedlock/"
  • Spring Framework belgeleri, "https://docs.spring.io/spring-framework/docs/current/reference/html/"
Soruşturma göndermek