Tôi muốn làm rõ chi tiết về phương thức scheduler.getCurrentlyExecutingJobs() trong Quartz1.6. Tôi có một công việc chỉ nên có một cá thể đang chạy tại bất kỳ thời điểm nào. Nó có thể được kích hoạt để "chạy ngay" từ một giao diện người dùng nhưng nếu một cá thể công việc đã chạy cho công việc này - không có gì xảy ra.tìm một công việc đang chạy trong Quartz1.6
Đây là cách tôi kiểm tra xem có một công việc chạy mà bạn quan tâm tôi:
List<JobExecutionContext> currentJobs = scheduler.getCurrentlyExecutingJobs();
for (JobExecutionContext jobCtx: currentJobs){
jobName = jobCtx.getJobDetail().getName();
groupName = jobCtx.getJobDetail().getGroup();
if (jobName.equalsIgnoreCase("job_I_am_looking_for_name") &&
groupName.equalsIgnoreCase("job_group_I_am_looking_for_name")) {
//found it!
logger.warn("the job is already running - do nothing");
}
}
sau đó, để kiểm tra này, tôi có một bài kiểm tra đơn vị mà cố gắng để sắp xếp hai trường hợp của công việc này một sau khi khác . Tôi đã chờ đợi để xem cảnh báo khi cố gắng sắp xếp công việc thứ hai, tuy nhiên, thay vào đó, tôi nhận được ngoại lệ này:
org.quartz.ObjectAlreadyExistsException: Unable to store Job with name:
'job_I_am_looking_for_name' and group: 'job_group_I_am_looking_for_name',
because one already exists with this identification.
Khi tôi chạy thử nghiệm đơn vị này trong một chế độ debug, với sự đột phá về dòng này :
Liệt kê currentJobs = scheduler.getCurrentlyExecutingJobs();
tôi nhìn thấy danh sách là rỗng - vì vậy scheduler không thấy công việc này như chạy, nhưng nó vẫn thất bại trong việc sắp xếp nó một lần nữa - mà nói với tôi công việc đã thực sự chạy vào thời điểm đó ...
Tôi có thiếu một số điểm tốt hơn với phương pháp lập lịch này?
Cảm ơn!
Marina
Chỉ cần lưu ý rằng phương thức 'getCurrentlyExecutingJobs()' không phải là cụm nhận biết, vì vậy nó sẽ hoạt động nếu bạn chỉ sử dụng cấu hình Quartz một nút. – Marboni
cảm ơn bạn vì mẹo hữu ích! – Marina