2011-06-23 17 views
12

Her 5 saniyede bir yapılması gereken bir kuvars işi var, ama sıralı olarak buna ihtiyacım var. Bazı durumlarda, işin yürütülmesi bu 5 sn'yi aşar, bu durumda, previouse çıkışı bitmezken çalıştırılmak istemiyorum. Bunu grails olarak nasıl yapılandırabilirim?Grails'de bir işin eş zamanlı yürütülmesi nasıl önlenir?

(Tabii ki tüm bu sihirli statik uçucu bayrağıyla yapılır, ancak bunu yapmak için çok şık bir yol değildir olabilir) (Ayrıca bu iş için nasıl yapılandırabileceğinizi tekil olunur?)

thx

cevap

21

Eğer grails kuvars eklentisi kullanarak konum varsayarsak olun, sadece işine bu eklemek mümkün olmalıdır:

def concurrent = false 
itibaren

: Varsayılan İşler By

" eşzamanlı biçimde yürütülür, böylece yeni iş yürütme aynı Job önceki yürütme hala çalışıyor olsa bile başlayabilir. Bu durumda, 'eşzamanlı' özelliğini kullanabilirsiniz bu davranışı geçersiz kılmak istiyorsanız bahar görevleri kullanarak, Quartz en StatefulJob At

+1

Evet, bu çözümdür, ancak bunun, görevlerin sürekli olarak birikmesini engellemediğini düşünüyorum. sıra ... – csviri

+1

Peki OutOfMemory oluşuncaya kadar görev kuyruğu nasıl önlenir? – csviri

+0

Çoğunlukla görevlerin sıraya girmesini istiyorsanız, uzun bir görev, görev "sayma" veya "adım adım" görev olduğunda başkalarının çalıştırılmasını engellememelidir. Bu aslında bir sorunsa, Kuvars muhtemelen sizin istediğiniz şey değil, istediğiniz şey sürekli bir döngü içinde çalışan bir iş parçacığıdır. Sınırlamanız gerekiyorsa, geciktirmek için bir Thread.sleep (remaTime) koyabilirsiniz. –

-1

"kullanılacak ve ben kuvars olmadan uygulamaya:

beans = { 
    xmlns task: "http://www.springframework.org/schema/task" 

    task.'scheduler'('id':"myScheduler", 'pool-size':"1") 

    task.'scheduled-tasks'('scheduler':"myScheduler") { 
     task.'scheduled'(ref:"myBean", method:"myBeanMethodToExec", 'fixed-delay':5000) 
    } 
} 

(havuz boyutu 1 bile gerekli değildir, ancak% 100 emin olmak için;))

+1

Bir soru sorduktan sonra, soruyu yanıtlamayan bir cevap seçtiniz. Ne kullandığınıza bakılmaksızın, sorduğunuz soruyu yanıtlamak için en iyi cevap bu değildir. –

+0

Evet, haklısınız, yazmam gerekse de “onun sürekli olarak görevlerin sıraya girmesini engellemez” - aklımı bu yaklaşımdan aldım, aslında bu bahar programlayıcısı ile çözüldü. Ama haklısın, bu benim soruma iyi bir cevap. – csviri

İlgili konular