2012-08-28 32 views
5

Tôi đã phát triển trình thu thập dữ liệu web thu thập thông tin bằng URL bắt đầu làm thông số hạt giống. Tôi muốn cho phép người dùng lên lịch cho công việc này về công việc nếu có thể.Lập lịch công việc động bằng cách sử dụng Spring 3

Hiện tại tôi đang sử dụng Spring 3.1.2Hibernate. Tôi cần cung cấp cho người dùng giao diện người dùng nhận thông số cronJob và dựa trên đó tôi muốn chạy trình thu thập thông tin. Có thể làm điều đó bằng cách sử dụng mùa xuân.

Tôi đọc một chút về Quartz nhưng các bài viết trên SO hoặc các trang web khác không rõ ràng hoặc không hoàn chỉnh để hiểu đầy đủ cách triển khai bộ lập lịch vào mùa xuân.

Tôi biết điều căn bản rằng có ba thành phần để nó

  1. SchedulerFacotry
  2. Kích hoạt
  3. Job (Service để chạy)

Tôi hy vọng ai đó có thể hướng dẫn cho tôi trong đúng hướng.

Trả lời

9

Trình lên lịch thạch anh chỉ là công cụ thích hợp cho công việc. Đối với một số lý do hầu như tất cả các hướng dẫn tập trung vào việc xác định công việc lúc khởi động, trong XML - trong khi Quartz hoàn toàn có khả năng (re- | un-) các công việc lên lịch khi chạy.

Bạn có thể và nên tận dụng lợi thế của Spring để khởi động Trình lập lịch biểu thạch anh, nhưng sau đó bạn có thể tương tác với nó ngay từ mã của bạn. Dưới đây là một ví dụ đơn giản from the documentation:

JobDetail job = newJob(SimpleJob.class) 
    .withIdentity("job1", "group1") 
    .build(); 

CronTrigger trigger = newTrigger() 
    .withIdentity("trigger1", "group1") 
    .withSchedule(cronSchedule("0/20 * * * * ?")) 
    .build(); 

scheduler.scheduleJob(job, trigger); 

Ở đây bạn xác định một việc (đoạn mã Java để chạy), kích hoạt (khi chạy nó, người dùng có thể cung cấp bất kỳ biểu hiện CRON hợp lệ) và quấn nó tất cả bằng cách lên lịch nó. Thể hình scheduler có thể được Spring chèn vào. Spring cũng sẽ xử lý tắt máy đúng cách.

+0

Cảm ơn bạn đã trả lời. nhưng nó có thể làm điều đó bằng cách sử dụng 'TimerFactoryBean'' ScheduledTask' được cung cấp bởi mùa xuân thay vì sử dụng Quartz .. Như trong tài liệu có đề cập đến về phương pháp này cũng có. bạn đã khám phá điều đó chưa? –

+1

'newJob (...)' thực sự là 'JobBuilder.newJob (...)'. Trong ví dụ trên, giả định là phương thức tĩnh 'newJob (...)' được nhập tĩnh nên không cần tham chiếu nó bằng tên lớp của nó. –

+0

Điều tương tự cũng áp dụng cho 'TriggerBuilder.newTrigger()' và 'CronScheduleBuilder.cronSchedule (...)' –

Các vấn đề liên quan