Spring Scheduler ile Zamanlandırılmış Görev Uygulaması
Java uygulamamızı belirli bir zamanda, zamanlandırılmış görev olarak çalıştırma işlemlerinin Spring ile nasıl olduğuna bakacağız. Bir uygulama yapacağız bu uygulama her 10 saniyede bir konsola bir mesaj yazdıracağız.
Maven projesi oluşturalım. Bağımlılığımızı ekleyelim.
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.2.RELEASE</version> </dependency> </dependencies>
Klasör yapısı yukarıdaki şekildeki gibi olucaktır.
Zamanlandırılmış işlemi yaptıracağımız class’ımızı oluşturacağız. Gorev adında bir class oluşturalım ve yaptığımız adımları açıklayalım.
@Component public class Gorev { private int sayac=0; @Scheduled(cron = "*/10 * * * * *") public void calistirGorev() { sayac++; System.out.println("Program Çalıştı : İş Görevi : " + sayac+" Zaman : " + new Date()); } }
Gorev class’ımızı @Component anotasyonunu kullanıyoruz. Bir sayac oluşturduk bu sayacımızı sıfırdan başlatarak calistirGorev() metodunda değerini her çalıştırdığımızda bir arttıracağız. Ve bu değer metod her çalıştığında artmış olucak.
Metodumuzun görevi açıkca belli. Konsol ekranına programın çalıştığı zamanı ve o zamandaki sayaç değerini yazdırıyor. Şimdi metodumuzun istediğimiz zamanda çalışmasını sağlamak için gerek anotasyonu yazıyoruz.
@Scheduled(cron = "*/10 * * * * *")
Zamanlı olarak çalıştırmak istediğimiz metodun üzerine @Scheduled anotasyonu kullanarak bir cron işleminin zamanını belirtiyoruz. Yukarıda yazdığımız zaman işlemi bu metodun her 10 saniyede bir her gün çalışmasını sağlamaktadır.
Zamanlanmış görevin yazma şekli ise
@Scheduled(cron = "saniye - dakika - saat - ayın günü - ay - ayın haftası")
olmaktadır.
Örnek vermek gerekirse;
"0 0 * * * *" = Hergün her zaman çalışır. "*/10 * * * * *" = Hergün 10 saniyede bir çalışır. "0 0 8-10 * * *" = Hergün 8, 9 ve 10 saatinde çalışır. "0 0/30 8-10 * * *" = Hergün 8:00, 8:30, 9:00, 9:30 ve 10 saatinde çalışır. "0 0 9-17 * * MON-FRI" = Her zaman Pazartesiden Cumaya kadar saat 9 ile 17 saatleri arasında çalışır.
şeklinde olmaktadır.
Spring Scheduled ve Cron işleminin nasıl yapıldığını açıklamaya çalıştım. Şimdi ise springContext.xml adında bir konfigürasyon dosyası oluşturacağız.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> <task:annotation-driven scheduler="scheduler"/> <task:scheduler id="scheduler" pool-size="5"/> <context:component-scan base-package="com.burakkutbay"/> </beans>
Spring konfigürasyon dosyamızda <task:scheduler /> propertysinden bahsedelim. Bu property sayesinde oluşturduğumuz zamanlanmış metodun kaç thread’de çalışacağını söylemiş oluyoruz. Belirtmezsek tek thread’de çalışmaktadır. (Bu işlem asenkron ile karıştırılmamalıdır.)
Diğer bir property ise <context:component-scan/> propertysidir. Bu property ise sıkça kullandığımız Spring Anotasyonların tanınacağı paketi gösteriyoruz. Spring konfigürasyonumuz bitti. Şimdi sıra geldi programımızın çalışmasını sağlacak Main.classımızda bu class bizim programımızı çalıştırmayı ve devamlı olarak açık kalmasını sağlaycak.
public class Main { public static void main(String[] args) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("springContext.xml"); } }
Main classımızda bir spring projesini ayağa kaldırmak için gerekli olan ApplicationContext’ten bir instance yaratıp kendi konfigürasyon dosyamızı tanıtıp ona göre çalışmasını sağlamaktayız.
Projemizi şimdi çalıştıralım ve çıktısına bakalım. Sonuç olarak her 10 saniyede bir konsola bir çıktı üretiyor.
Çıktı :
Program Çalıştı : İş Görevi : 1 Zaman : Mon Mar 20 14:42:30 EET 2017 Program Çalıştı : İş Görevi : 2 Zaman : Mon Mar 20 14:42:40 EET 2017 Program Çalıştı : İş Görevi : 3 Zaman : Mon Mar 20 14:42:50 EET 2017 Program Çalıştı : İş Görevi : 4 Zaman : Mon Mar 20 14:43:00 EET 2017 Program Çalıştı : İş Görevi : 5 Zaman : Mon Mar 20 14:43:10 EET 2017 Program Çalıştı : İş Görevi : 6 Zaman : Mon Mar 20 14:43:20 EET 2017 Program Çalıştı : İş Görevi : 7 Zaman : Mon Mar 20 14:43:30 EET 2017
Projenin Kaynak Kodlarını Github Üzerinden Görünlüte
No Comment! Be the first one.