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

Type and hit Enter to search

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

Spring Scheduler ile Zamanlandırılmış Görev Uygulaması

Paylaş

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 

Tags:

springspring cron expressionspring scheduledspring scheduled örneğispring uygulaması

Paylaş

Diğer Yazılar

Spring Dersleri
Previous

Spring Boot Merhaba Dünya Uygulaması

Spring Dersleri
Next

Spring Dersleri

Next
Spring Dersleri
20 Mart 2017

Spring Dersleri

Previews
07 Şubat 2017

Spring Boot Merhaba Dünya Uygulaması

Spring Dersleri

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 Dersleri

Spring Framework Nedir? – Spring Dersleri

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

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

Link

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

Kategori

Cloud
Amazon Web Services
Vue.js
Gradle
Node.js
Android
Struts
Redis
Röportaj
Spring Data
Spring Cloud Stream
XCode
Debezium
Mikroservis Mimarisi
Video
Spring Native
iPhone Uygulama Geliştirme
Objective C
JPA
Spring Security
PostgreSQL
Apache Kafka
Git
Servlet
Yaptığım Projeler
Maven
Design Patterns
DevOps
Linux
RabbitMQ
PrimeFaces
JDBC
Spring Jdbc Template
Spring
Spring MVC
Manset
Google
Spring Cloud
OCA Java SE 8
Spring Core
Quarkus
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
  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • Spring Core
  • Spring Örnekleri
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale