Merih Forum Programlama ve yazılım algoritmalar Genel spring Spring Scheduler ile Zamanlandırılmış Görev Uygulaması

  • 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
Spring Scheduler ile Zamanlandırılmış Görev Uygulaması

 
#1

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>


[img=241x0]https://i0.wp.com/blog.burakkutbay.com/wp-content/uploads/2017/03/rfbdfsa.jpg?resize=241%2C203[/img]
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.

1

@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/be...-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/co...ontext.xsd
    http://www.springframework.org/schema/task
    http://www.springframework.org/schema/ta...g-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 <taskConfusedcheduler /> 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 




Bul
Alıntı


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Spring Restful Web Servis CRUD Uygulama Örneği efsane 0 2,552 09-06-2017, Saat: 20:38
Son Mesaj: efsane
  Spring Boot Merhaba Dünya Uygulaması efsane 0 2,380 09-06-2017, Saat: 20:33
Son Mesaj: efsane
  Spring Boot Projesi Oluşturma efsane 0 2,392 09-06-2017, Saat: 20:32
Son Mesaj: efsane
  Spring Boot Nedir? efsane 0 2,210 09-06-2017, Saat: 19:53
Son Mesaj: efsane
  Spring JdbcTemplate Metotlarını Çalıştırma efsane 0 2,276 09-06-2017, Saat: 11:43
Son Mesaj: efsane

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Bu konuyu görüntüleyen kullanıcı(lar):
1 Ziyaretçi

   
Türkçe Çeviri: Emre KRMN, Kodlayanlar MyBB, © 2002-2022 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-∞ Tüm hakları saklıdır.