Siber Güvenlik

Quartz İle Zamanlanmış Görevler Oluşturma

Quartz, Java uygulamaları içerisine entegre edilebilen açık kaynaklı bir Job (iş) planlama altyapısıdır. Güçlü özelliklere sahiptir ve bu özelliklerini basit bir kullanım ve entegrasyon ile sunar. İşlerinizi basit veya karmaşık programlarla, sınırsız ya da sınırlı sayıda çalıştırabilirsiniz.

Necmeddin Tapan |

01.12.2023

‘Spring Boot’ projenizde Quartz kullanmak için, aşağıdaki bağımlılığı “pom.xml” dosyanıza eklemeniz gerekmektedir.

 

Quartz dependency

 

Quartz, iş ve planlama bilgilerini ilişkisel bir veri tabanında veya RAM'de saklayabilir. RAM seçeneğinde, işlerinizle ilgili bilgiler uygulama yeniden başlatıldığında silinecektir. Bu nedenle, bu örnekte, “properties” dosyasında “job-store-type” olarak veri tabanı seçeneğini kullanacağız.

 

Quartz job store type

 

“job-store-type” olarak “jdbc” kullanıldığından, veri tabanınızda “quartz” tabloları bulunmalıdır. İlk seçenekte “initialize-schema:always” özelliği ile tablolar otomatik olarak oluşturabilir. Ancak bu durumda, uygulama her yeniden başlatıldığında, tüm Quartz tabloları tekrar tekrar silinip oluşturulur.

 

Quartz initialize schema always

 

İkinci seçenekte, quartz tablolarını manuel olarak oluşturmanız gerekir. Bunu yapmak için, “initialize-schema:never” özelliği ayarlanmalıdır.

 

Quartz initialize schema never

 

veritabanı şema betikleri

 

Şimdi, yukarıda bir örneği görüldüğü gibi, veritabanı şema betiklerinizi çalıştırmanız gerekmektedir. Bu betikleri aşağıdaki linkte bulabilirsiniz. Betikler, seçtiğiniz ilişkisel veri tabanına göre değişiklik gösterir.

 

Quartz Veri Tabanı Betikleri

 

Veri tabanı betiklerini çalıştırdıktan sonra, Quartz tabloları aşağıdaki gibi listelenmelidir;

 

Quartz tablo listesi

 

Quartz tablo listesi

 

Ayrıca, “properties” dosyanıza “jobStore driverDelegateClass”'ı eklemeniz gerekmektedir. Bu özellik, seçilen veri tabanına göre değişiklik gösterir.

 

Job Store Driver Delegate Class

 

"org.quartz.impl.jdbcjobstore.StdJDBCDelegate" seçeneği, hemen hemen tüm veri tabanı seçenekleri için uygundur, herhangi bir hata durumunda, aşağıdaki yapılandırma linkine ve veri tabanınıza göre değiştirmelisiniz:

 

Quartz JDBC-JobStore Ayarları

 

Quartz için planlanmış işler (Job) oluşturmak için temel yapılandırma yeterlidir. Diğer seçenekleri Yapılandırma Referans sayfasında bulabilirsiniz.

 

Şimdi, planlı görevler için işler (Job) ve tetikleyiciler (Trigger) oluşturmak üzere yapılandırma hazır. İlk olarak, "Job" arayüzü implement edilmeli ve "execute" metodu yeniden yazılmalıdır. “JobExecutor” sınıfındaki "execute" metodu, planlanan zamanda tetiklenir ve planlanan iş için kodu çalıştırır.

 

Quartz execute metodu

 

“MyJobExecutor” örnek sınıfı, "execute" metodunda "JobDataMap" içerir. JobDataMap, görevinizde kullanmak üzere veriyi saklamaktan sorumludur. JobDataMap nesnesi oluşturulurken, verilen anahtar değeriyle saklanan verileri alabilirsiniz. Aşağıdaki örnekte JobDataMap'te nasıl veri saklanacağını göreceğiz.

 

Şimdi sıra “Job” ve “Trigger” oluşturma zamanında. "Scheduler" arayüzü, "Autowired" anotasyonunu ekleyerek kullanılabilir.

 

Quartz autowired anotasyonu

 

Aşağıdaki kod örneği, “JobDetail” nesnesinin nasıl oluşturulacağını gösterir. Daha önce gördüğünüz gibi, "JobDataMap"te veri saklamalı ve JobDetail nesnesini oluştururken bu bilgiyi kullanmalısınız. "Job" arayüzünü uygulayan MyJobExecutor sınıfı, burada kullanılmalıdır. Ayrıca, bir iş için birincil anahtar olan ve oluşturulan işi çağırmak için kullanılacak "identity" de mevcuttur.

 

Quartz job detail kod örneği

 

İşi oluşturduktan sonra, işin programını tanımlamak için "Trigger" (Tetikleyici) oluşturmalısınız. Aşağıdaki örnek koddaki gibi, Trigger nesnesini oluştururken, işi çalıştırmaya ne zaman başlayacağınızı, periyodu ve işi kaç kez çalıştırmak istediğinizi belirtebilirsiniz. İşte (Job) olduğu gibi, benzersiz bir tetikleyiciyi belirtmek için de bir “identity” bulunmaktadır.

 

Quartz trigger kod örneği

 

Artık İş (Job) ve Tetikleyici (Trigger) nesnelerine sahipsiniz ve yukarıdaki örnekte görüldüğü gibi, sadece “scheduler.scheduleJob(job, trigger)” kullanarak zaman planlaması yapabilirsiniz. Bundan sonra, iş ve tetikleyici nesneler “Quartz” tablolarına kaydedilir ve iş, planlanan zamanlarda tetiklenir.

 

Quartz static import

 

Quartz static import

 

Quartz İle Zamanlanmış Görevler Oluşturma