Sử dụng Quartz Scheduler với Spring framework

Trong bài viết trước, chúng ta đã cùng nhau tìm hiểu về Quartz Scheduler. Spring framework cũng có một wrapper cho Quartz Scheduler, nên nếu ứng dụng của các bạn sử dụng Spring framework và có nhu cầu sử dụng Quartz Scheduler thì hãy đọc tiếp bài viết này. Mình sẽ hướng dẫn các bạn sử dụng Quartz Scheduler với Spring framework trong bài viết này các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:

Sử dụng Quartz Scheduler với Spring framework

Để sử dụng Quartz với Spring framework, các bạn cần khai báo Spring Context Support, Spring Transaction và Quartz Scheduler dependencies như sau:

Chúng ta cũng cần khai báo để sử dụng các khái niệm về Job, Trigger và Scheduler tương tự như Quartz Scheduler standalone, trong Spring.



Đầu tiên là về Job.

Chúng ta có 2 cách để khai báo một Quartz Job với Spring bao gồm:

* Khai báo một class với một method của class này sẽ đóng vai trò định nghĩa tác vụ mà chúng ta cần chạy.

* Cách thứ hai là chúng ta sẽ tạo mới một class extend class QuartzJobBean của Spring Quartz.

Mình sẽ tạo mới tập tin cấu hình của Spring spring.xml trong thư mục src/main/resources

Sử dụng Quartz Scheduler với Spring framework

như sau:

Đối với cách thứ nhất, các bạn cần tạo một class với một method bất kỳ, ví dụ của mình như sau:

sau đó, các bạn khai báo Quartz Job trong tập tin spring.xml sử dụng đối tượng MethodInvokingJobDetailFactoryBean như sau:

với targetObject property của MethodInvokingJobDetailFactoryBean sẽ refer tới bean “hello” của class chúng ta trong Spring container và targetMethod sẽ có giá trị là tên method trong class Hello sẽ thực thi tác vụ.

Đối với cách thứ hai thì chúng ta cần tạo mới class extend abstract class QuartzJobBean (nếu các bạn xem code của QuartzJobBean, các bạn sẽ thấy class này đã implement interface Job của Quartz Scheduler):

Như các bạn thấy, ở đây chúng ta cần implement phương thức executeInternal() để thực thi tác vụ.

Sau đó, khai báo class này trong Spring container sử dụng đối tượng JobDetailFactoryBean như sau:

Nếu các bạn có nhu cầu truyền data vào class Hello, các bạn có thể khai báo sử dụng Setter method để set data này vào class Hello, sau đó sử dụng property jobDataMap của đối tượng JobDetailFactoryBean để ingest data này.

Ví dụ, mình có class Student như sau:

Bây giờ nếu mình muốn sử dụng đối tượng Student trong class Hello thì mình sẽ sử dụng Setter method như sau:

Sau đó thì khai báo để ingest đối tượng Student vào class Hello trong khai báo của class JobDetailFactoryBean trong Spring container như sau:




Tiếp theo là về Trigger.

Spring cũng hỗ trợ cho chúng ta 2 cách để tạo Trigger giống như Quartz Scheduler standalone bao gồm: Simple Trigger và Cron Trigger.

Với Simple Trigger, chúng ta sẽ sử dụng class SimpleTriggerFactoryBean để tạo trigger.

Với Cron Trigger thì chúng ta sẽ sử dụng class CronTriggerFactoryBean:

Nếu các bạn để ý, các bạn sẽ thấy, điểm khác biệt khi khai báo Trigger trong Spring là Spring cho phép chúng ta cấu hình Trigger sẽ chạy cho Job nào luôn và khi cấu hình cho Scheduler, chúng ta sẽ không cần cấu hình Job cho Scheduler nữa.



Cuối cùng là phần cấu hình cho Scheduler.

Chúng ta sẽ cấu hình Scheduler trong Spring sử dụng class SchedulerFactoryBean như sau:

OK, đến đây thì chúng ta đã cấu hình xong Job, Trigger và Scheduler của Quartz Scheduler với Spring framework rồi đó các bạn.

Nội dung tập tin cấu hình của Spring lúc này sẽ như sau:

Mình sẽ tạo mới class main để chạy ứng dụng này:

Kết quả:

Sử dụng Quartz Scheduler với Spring framework

Add Comment