Quartz joblarından birtanesinin çalışma süresi bazı durumlarda çok uzun sürüyor işlemler büyük olduğu için. Bir sonraki çalışma süresi geldiğinde çalışmasın eski işlemler bitsin istiyorum. Yani o an o işlemi yapmasın bir sonraki çalışma süresini beklesin istiyorum. Bunun için ne yapabilirim yardımcı olabilir misiniz teşekkürler.

soruldu: 13 Ağu '13, 08:34

yaqmoz's gravatar image

yaqmoz
2074512
cevap kabul oranı: 4%

1

Yorum olarak yazacaktım fakat karakter sayısı yetersiz kaldı.

Job'larınızı db üzerinde çalışma saatleri ile kayıt altına alınız ve ilk job çalışmaya başladığınız bir queue içinde tüm job'ları sıralayınız. Eğer istenilen saatlerde çalışırsa queue içinde devam eder lakin sizin belirttiğiniz durum oluştuğunda queue içinde başlamış işlem bitene kadar bekletirsiniz ve sırası geldiğinde release edersiniz işlemi. Aklıma ilk gelen yöntem bu. Loglama işleminide mutlak yapınız. En azından çalışan job'ların yapacağı işlem süresi kayıtlarını elde edip, en uygun şekilde hangi aralıklarda çalışacaklarının zaman optimizasyonunuda yaparsınız. Yada çalışacak job'ların işlem yüklerine göre ortalama çalışma süreçlerinin bilgisini elde edebilirsiniz.

Aşağıdaki tutorial isteğiniz ile sanırım bire bir uyuyor. Buradaki örnekteki gibi sizde joblarınızı sıraladığınızda bir job çalışmaya başladığında bir değer atanıyor, size boolena bir karakter ile çalıştığında job'ınız true yapın, bittiğinde false yapın ve böylece ikinci job'ın süresi gelsede programatik olarak kontrol edip, bitinceye kadar kontrolü elinizde tutabilirsiniz.

Kaynak

(13 Ağu '13, 14:32) Turgay Can Turgay%20Can's gravatar image

Bildiğim kadarı ile qurtz bunu yapabiliyor olması gerekiyor. bunu daha önceki sürümünde yapabiliyordum fakat 2.2.0 versiyonuna yükselttikten sonra nasıl yapacağım konusunda sıkıntı yaşıyorum.

Örn

newTrigger().withSchedule(simpleSchedule()
                    .withIntervalInSeconds(30)
                    .withMisfireHandlingInstructionIgnoreMisfires())
                    .withIdentity(triggerName, triggerGroup)
                    .build();

buradaki withMisfireHandlingInstructionIgnoreMisfires() methodunun bunu handle etmesini bekliyorum fakat malesef tekrar aynı job çalışıyor. Programatik olarak kontrol etmeyi bende düşündüm fakat daha kolay olması gerektiğini düşündüğüm için konu üzerine gidiyorum açıkcası. Teşekkürler

(14 Ağu '13, 04:57) yaqmoz yaqmoz's gravatar image

withMisfireHandlingInstructionDoNothing() ile sorunu çözdüm.

newTrigger().withSchedule(cronSchedule(new CronExpression("59 59 * * * ?"))
                    .withMisfireHandlingInstructionDoNothing())
                    .withIdentity(trgn, group)
                    .build();

Aşağıdaki linkte de çalışma sürelerini ayarlayabildiğiniz expression'lar var bu expressionlara görede süreleri default methodlardan bağımsız ayarlayabilirsiniz.

http://quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger

permanent link

cevaplandı: 15 Ağu '13, 07:47

yaqmoz's gravatar image

yaqmoz
2074512
cevap kabul oranı: 4%

değiştirildi: 15 Ağu '13, 07:49

Bence daha farklı bir yöntem deneyebilirsiniz. Job belirli saatler arasında çalışsın(Yapı buna uygunsa yani işi yarım bırakabiliyorsa). Süresi dolduğunda dursun. Sonrasında tekrar çalışma zamanı geldiğinde kaldığı yerden devam eder.

permanent link

cevaplandı: 13 Ağu '13, 14:17

kam's gravatar image

kam
1.3k82032
cevap kabul oranı: 16%

değiştirildi: 13 Ağu '13, 14:17

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×1

Soruldu: 13 Ağu '13, 08:34

Görüntüleme: 597 kez

Son güncelleme: 15 Ağu '13, 07:49

powered by BitNami OSQA