Perşembe, Nisan 05, 2012

Spring 3 @Scheduled ile zamanlanmış görevler

Java ile uğraşanların çoğu zamanlanmış görevleri yerine getirmek için Quartz Apisini kullanmıştır. Bu api ile basit işlerden tutun clustered kompleks yapıdaki bir çok işimizi yapabiliyoruz aslında.

Spring 3 ile bu zamanlanmış görevler daha da basitleştirilerek bize sunulmaya başlandı. Spring 3 bunun için arka tarafta hem Quartz hem de kendi yapısını kullanabiliyor. Bu yazının konusu Spring ile @scheduled annotasyonunu kullanarak basit bir zamanlanmış görevi nasıl yapabileceğimizi göstermektir.
@Service
public class ScheduledJob {

    @Scheduled(fixedDelay = 5000)
    public void process() {   
        //do your job here
        System.out.println("processing job " + new Date());              
    }
}

işte bu kadar basit. yapacağınız tek şey istediğiniz aralıkta veya zamanda çalışacak metodunuzun başına @Scheduled annotasyonunu koymak. Yukarıdaki metod 5 saniyede bir çalışır. bunun aralığını;
@Scheduled(fixedDelay = 5000)  // iş bittikten 5 sn sonra yeni iş tekrar başlar
@Scheduled(fixedRate = 5000)    //iş başladıktan 5 sn sonra yeniş iş başlar
@Scheduled(cron="0 0 1 * * ? ")    //her gece saat 01:00 da çalışır.

şeklinde verebilirsiniz.

@Scheduled annotasyonunun dışında applicationContext.xml dosyasına
<task:scheduler ../>
ekleyerek de zamanlanmış bir iş yapılabilir.

Clustered bir ortamda çalışacaksanız bunun için Spring in henüz bir çözümü yok bildiğim kadarıyla. Ama spring in kullandığı Quartz zaten buna çözüm getiriyor. Quartz bunun için veritabanında lock tablolar oluşturarak ayarlama yapar. Ama benim tavsiyem cluster bir ortamda çalışıyorsanız Quartz ın oluşturacağı bir sürü tablo yerine siz kendiniz db de bir tane tablo oluşturarak lock değerleri koymak ve oradan kontrol etmek. Cluster ortamlar için bildiğim en basit yöntem bu.

cron expression detayları için bakınız: http://www.quartz-scheduler.org/docs/tutorial/TutorialLesson06.html
quartz cluster detayları için bakınız: http://java-x.blogspot.com/2006/12/using-quartz-scheduler-in-cluster.html
Spring 3 Scheduling : http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/scheduling.html

Hiç yorum yok:

Yorum Gönder