Her gün için bahar cron ifadesi 1: 01: am


204

Kodumu Bahar cron ifade dayalı sabit bir zamanlamaya yürütmek çalışıyorum. Kodun her gün 01: 01'de çalıştırılmasını istiyorum. Aşağıdaki ifadeyi denedim, ama bu benim için ateşlemedi. Buradaki sözdiziminde yanlış olan ne?

@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
    // ...
}



cron ifadem 0 0 0 1 JAN MON geçen yıla kadar çalışıyordu. 1 Ocak'tan itibaren geçersiz cron ifadesi söyleyerek çalışmayı durdurun. Bu çok daha az frekans için tasarlanmış olmasına rağmen tc sunucusu çalıştırabildik. 1 Ocaktan sonra yoktu. 0 0 7 olarak değiştirdiğimde? * GÜNEŞ çalışmaya başladı. Ben 0 0 0 1 JAN MON neden geçen yıl jan olduğu gibi çalışmayı bıraktı merak ediyorum.
18'de spandey

0 0 0 1 JAN MON yanlış ifade olabilir, bu da iyi çalışıyor ve tc sunucusu asla şikayet
spandey

Yanıtlar:


575

Şunu deneyin:

@Scheduled(cron = "0 1 1 * * ?")

Aşağıda bahar forumundan örnek desenler bulabilirsiniz:

* "0 0 * * * *" = the top of every hour of every day.
* "*/10 * * * * *" = every ten seconds.
* "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
* "0 0 8,10 * * *" = 8 and 10 o'clock of every day.
* "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30 and 10 o'clock every day.
* "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
* "0 0 0 25 12 ?" = every Christmas Day at midnight

Cron ifadesi altı alanla temsil edilir:

second, minute, hour, day of month, month, day(s) of week

(*) herhangi biriyle eşleşmek anlamına gelir

*/X "her X" anlamına gelir

?("belirli bir değer yok") - karakterin izin verildiği iki alandan birinde bir şey belirtmeniz gerektiğinde, ancak diğerinde değil. Örneğin, tetikleyicimin ayın belirli bir gününde (örneğin, 10'uncu) ateş etmesini istiyorsam, ancak haftanın hangi günü olması umurumda değilse, güne "10" aylık alan ve "?" haftanın günü alanında.

Not: Çalışmasını sağlamak için uygulama bağlamınızda etkinleştirmeyi unutmayın: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling- Ek açıklama destek


15
Biçim burada da ilkbaharda belgelenmiştir - docs.spring.io/spring/docs/3.0.x/api/org/springframework/…
chrismarx

1
Sanırım bahar cronu saniye provizyonu da sağlayabilir ancak normal unix cron dakika tabanlıdır ... unix man sayfalarında olduğu gibi dakika yapılandırılabilecek en küçük zaman birimidir.
nanosoft

8
"?" nin önemi nedir? karakter? Yalnızca "haftanın günleri" alanı için mi geçerlidir? Eğer '' 'yerine koyarsak bu işe yarar mı? Noel günü örneğinde '*' ile
encrest

1
@encrest buraya bir göz atın: stackoverflow.com/questions/11499740/…
gipinani


92

Zamanlayıcı için, her gün sabah 6'da ateş etmek için kullanıyorum ve cron notasyonum:

0 0 6 * * *

1: 01: am istiyorsanız

0 1 1 * * *

Zamanlayıcı için tam kod

@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
    //complete scheduled work
}

** ÇOK ÖNEMLİ

Programlayıcının atış zamanı doğruluğundan emin olmak için, bölge değerini şu şekilde ayarlamanız gerekir (İstanbul'dayım):

@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
    //complete scheduled work
}

Tam saat dilimi değerlerini buradan bulabilirsiniz .

Not: İlkbahar çerçeve sürümüm: 4.0.7.


1
Cevabınızın neden sadece 12 tane olduğunu bilmiyorum, buradaki tek doğru cevap bile!

2
@MoayadAbuJaber'a çok teşekkür ederim. Puan önemli değil, eğer geliştiriciler sorunlarını cevaplarımla çözebiliyorlarsa, şerefe yeter.
Bahadir Tasdemir

xml config sheduler ile bölge kullanabilir miyim <task:scheduled ref="paypalCronJob" method="runTask" cron="0 0 6 * * * ?"/>?
shareef

3
zaman dilimi söz için başparmak yukarıya
Forhad

2
Teşekkürler, @ Forhad. Bir geliştiriciyseniz ve tarih ve saatlerle ilgili sorunlardan herhangi biriyle ilgileniyorsanız, zaman damgalarının, saat dilimlerinin ve dönüşümlerin ayrıntılarını bilmeniz gerekir. Aksi takdirde, verileriniz saçma olacaktır
Bahadir Tasdemir

22

Yönteminize açıklama ekleyebilirsiniz. @Scheduled(cron ="0 1 1 * * ?") .

0 - saniyeler içindir

1- 1 dakika

Günün 1 saati.


12

Gipinani'nin cevabında bir şey eksik

@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")

Bu, 1.01 ve 13.01'de yürütülür. İşi günde birkaç kez desen olmadan çalıştırmanız gerektiğinde kullanılabilir.

Ve uzak özniteliklerde dağıtım yaparken bölge özniteliği çok kullanışlıdır. Bu, ilkbahar 4 ile tanıtıldı.


2
Kısaltmalar (saat dilimi için) desteğinin yalnızca JDK 1.1.x uyumluluğu için olduğunu ve tam adların kullanılması gerektiğini unutmayın - javadoc
slashron'a göre

6

Fark ettiğim bir şey var: bahar CronTrigger cron değil. Geçerli bir cron ifadesinde (cronmaker.com'da doğrulayabileceğiniz) 7 parametre ile sonuçlanabilir ve ardından bahar bunu kabul etmez. Çoğu durumda sadece son parametreyi siler ve her şey iyi çalışır.


1
"CronTrigger Kuvars Değil"
Sandy Simonton

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.