8 Mart 2020 Pazar

SpringScheduling @Scheduled Anotasyonu

Giriş
Şu satırı dahil ederiz
import org.springframework.scheduling.annotation.Scheduled;
application.properties Dosyasından Okuma
Örnek
Şöyle yaparız
@Scheduled(cron = "myfeature.scheduler.cron"
fun scheduleTaskUsingCronExpression() {       
   ...
}
cron Alanı
Şeklen şöyle.
Second, Minute, Hour, Day, Month, Weekday
* işareti "her" anlamına gelir. ? işareti ise Day ve Weekday alanları için kullanılabilir. Eğer bu iki alandan birisine değer girilir ve diğerindeki değeri önemsemiyorsak * yerine ? yazarız. Açıklaması şöyle. ? yerine * yazmak çok önemli mi bilmiyorum.
? ("no specific value") - useful when you need to specify something in one of the two fields in which the character is allowed, but not the other. For example, if I want my trigger to fire on a particular day of the month (say, the 10th), but don't care what day of the week that happens to be, I would put "10" in the day-of-month field, and "?" in the day-of-week field.
Örnek  - Dakika
Şöyle yaparız. Her saat başını 35 geçe
@Scheduled(cron = "0 35 * * * *")
Şöyle yaparız. 35'in katı olan her dakika yani 0 ve 35'inci dakikalarda
@Scheduled(cron = "0 0/35 * * * *")
Örnek  - Saat
Şöyle yaparız. Her gün saat 1:00'da
@Scheduled(cron = "0 0 1 * * *")
Şöyle yaparız. Her gün saat 9'da.
@Scheduled(cron="0 0 9 * * ?")
public void schedule4() {
 ...
}
Saat 1 olduğu müddetçe her saniye ve her dakika için şöyle yaparız.
@Scheduled(cron = "* * 1 * * *")
public void testMethod(){
  ...
}
Örnek  - Saniye
Şöyle yaparız.
@Scheduled(cron = "0/10 * * * * ?")
public void schedule() {...}
Örnek  - Weekday + saat
Monday, Friday ve Saturday günleri saat 10'da çalıştırmak için şöyle yaparız. Burada Weekday alanına değer giriliyor ancak Day alanı için ? yerine * kullanılıyor.
@Scheduled(cron = "0 0 10 * * 1,5,6")
public void scheduleTaskUsingCronExpression() {
    // ...
}
Şöyle yaparız.
@Scheduled(cron = "0 0 10 * * MON,FRI,SAT")
public void dailyScheduleJob() {
    /*
    your code here
    */
}
Şöyle yaparız.
@Scheduled(cron = "0 0 10 * * MON-FRI")
public void dailyScheduleJob() {
    /*
    your code here
    */
}
fixedDelay Alanı
Örnek
Şöyle yaparız
@Scheduled(fixedDelay = 120000, initialDelay = 3000)
fixedDelayString Alanı - String olarak Milisaniye
Açıklaması şöyle. İlk çalışma bittikten sonra fixedDelay kadar bekledikten sonra ikinci çalışma başlar.
method can be scheduled to run with a fixed delay between the completion of the last invocation and the start of the next, using fixedDelay parameter.
Örnek
Şöyle yaparız. Burada kullanılacak değer application.properties dosyasında okunuyor. Böylece parametrik hale geliyor.
@Scheduled(fixedDelayString = "${clean_up.period}"))
fixedRate Alanı
fixedRate Alanı yazısına taşıdım

initialDelay Alanı
Açıklaması şöyle. İlk çalışma başladıktan sonra fixedRate kadar bekledikten sonra ikinci çalışma başlar.
initialDelay parameter with fixedRate and fixedDelay to delay the first execution.
Örnek
Şöyle yaparız.
@Scheduled(fixedRate = 2000, initialDelay = 5000)
Örnek
Şöyle yaparız.
@Scheduled(fixedDelay= 2000, initialDelay = 5000)
initialDelayString Alanı  - String olarak Milisaniye
Örnek
Şöyle yaparız
@Scheduled(initialDelayString = "${initial.delay}",fixedDelayString = "${fixed.delay}")  
public void scheduledJob()  {  
  ...
}
application.properties şöyledir
initial.delay=10000 fixed.delay=3000
zone Alanı
cron ifadeesinin hangi zaman dilimine göre çözümleneceğini belirtir.
Örnek
Şöyle yaparız.
@Scheduled(cron = "0 0 * * * *", zone = "${zone.property}")
public void myScheduledMethod() {       
  ...
}

Hiç yorum yok:

Yorum Gönder