Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Quarkus Dersleri
  • Spring Dersleri
    • Spring Cloud
    • Spring Boot
    • Spring Uygulama Örnekleri
    • Spring Core
    • Spring JDBC Template
    • Spring MVC
  • İleri Java Dersleri
    • Java Server Faces
    • Java Server Pages
    • PrimeFaces
    • Servlet
    • JDBC
    • JSTL
    • Java 8
  • Hibernate Dersleri
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
  • Hakkımda
Spring

Spring Scheduler ShedLock Kullanımı

Paylaş

Spring Scheduler projelerimizin fazla instance kullanarak dağıtık olarak çalıştırılmasında zamanlaştırılmış görev uygulamarının çalışması sorun oluşturabilir.

Aynı Scheduler uygulamanın aynı anda aynı görevi yapması problemini çözmek için kullanılan ShedLock kullanımından bahsedeceğim.

Shedlock kütüphanesi kısaca bir “ara tablo” oluşturarak çalışan Scheduler’ı kayıt altına alarak verdiğimiz süre boyunca başka bir servisin aynı scheduler’ı çalıştırmasını engellememize olanak sağlamaktadır.

Shedlock kullanmak için Shedlock Spring maven bağımlılığını ve ayrıca veritabanı tercihinize göre ilgili veritabanı provider bağımlılığını kullanmamız gerekmektedir.

Shedlock Spring bağımlılığı için

<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-spring</artifactId>
    <version>4.33.0</version>
</dependency>

Veritabanı tercihimize göre ilgili provider bağımlılığını ekleyelim. Veritabanı Postgres olacak.

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

Provider bağımlılığımız bize Shedlock’un ara tablo kurmasını sağlaması için gerekli olacak.

Shedlock providerımız için veritabanımızın bağlantısını sağlamamız için bir config sınıfı oluşturacağız.

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

LockProvider Shedlock’un bir bean’i ve kullandığımız veritabanımızın datasource bilgilerini Shedlock’a veriyoruz. Shedlock bu bilgiler ile birlikte scheduler’ımız çalıştığında oluşturduğu tabloya çalışan scheduler ile iligli limit bilgilerini ve aktif olan scheduler adını kayıt altına almasını sağlayacak.

Aşağıdaki gibi bir tablo yapısı karşılayacak bizi.

+-------------+--------------------------+--------------------------+---------+
|name         |lock_until                |locked_at                 |locked_by|
+-------------+--------------------------+--------------------------+---------+
|schedulerdemo|2022-04-04 20:00:00.000000|2022-04-04 20:10:00.000000|burak    |
+-------------+--------------------------+--------------------------+---------+

İlgili scheduler’ımıza bakalım ve bu schedulerımız 10 dakikada bir çalışan bir metot. Bu metotumuza scheduler lock ekleyelim.

@Scheduled(cron = "0 0/15 * * * ?")
@SchedulerLock(name = "schedulerdemo", lockAtMostFor = "4m", lockAtLeastFor = "14m")
public void shortRunningTask() {
  System.out.println("Merhaba Dünya");
}

15 dakikada bir çalışan metotumuza @SchedulerLock anotasyonu kullanarak adını, en az ve en çok kitleme bekleme süresini tanımlıyoruz.

  • lockAtLeastFor : En fazla kitli kalma süresini belirler.
  • lockAtMostFor : En az kitli kalma süresini belirler.

Bu tanımlamaları yaparak çoğul olarak çalışan spring uygulamalarımızda kullandığımız scheduler’ımzı tekilleştiriyoruz.

Tags:

shedlock nedirspring boot derslerispring derslerispring scheduler

Paylaş

Diğer Yazılar

Burak KUTBAY
Previous

Maven : error in opening zip file when running Hatası Çözümü

blank
Next

Java Record Nedir ve Kullanımı

Next
blank
24 Nisan 2022

Java Record Nedir ve Kullanımı

Previews
28 Mart 2022

Maven : error in opening zip file when running Hatası Çözümü

Burak KUTBAY

No Comment! Be the first one.

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Spring Boot Dersleri Rest Template

Spring Boot RestTemplate Nedir ve Kullanımı

blank

Spring Boot Transaction, Isolation, Propagation ve RollBack

blank

Spring Boot Projelerinde Jackson Kullanımı

blank

Spring Boot Bean Validation Uygulama Örneği

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Röportaj
Struts
Android
Vue.js
Node.js
Redis
XCode
Spring Data
Debezium
Mikroservis Mimarisi
Spring Native
Video
Spring Security
Objective C
iPhone Uygulama Geliştirme
JPA
DevOps
PostgreSQL
Apache Kafka
Git
Design Patterns
Yaptığım Projeler
Servlet
Maven
Spring Cloud
Linux
Spring
JDBC
PrimeFaces
Spring Jdbc Template
RabbitMQ
Google
Manset
Spring MVC
OCA Java SE 8
Quarkus
Spring Core
Microsoft
Veritabanı
Tanıyalım
Java SE
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github