Tôi có một ứng dụng sử dụng Trình lên lịch thạch anh để lên lịch công việc. Ứng dụng hiện đang chạy phiên bản Quartz 1.6.2. JobStore của tôi là org.quartz.impl.jdbcjobstore.JobStoreTX với một cơ sở dữ liệu Oracle sao lưu nó. Clustering được bật, nhưng chỉ có một bộ lập lịch sử dụng cơ sở dữ liệu. Thạch anh ThreadPool của tôi được cấu hình như sau:Tôi có thể chờ Công việc thạch anh đang chờ theo thứ tự được kích hoạt không?
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
Việc của bạn là dài chạy, do đó, nó khá phổ biến để có 5 công việc chạy (tối đa cho phép bên hồ bơi thead của tôi) khi trigger bắn việc làm mới. Các công việc mới được kích hoạt đạn không nổ và tôi thấy đăng thông điệp như sau:
2011-05-20 04:09:30,097 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:29 05/20/2011
2011-05-20 04:09:30,120 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:09:30,125 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:30 05/20/2011
2011-05-20 04:09:30,138 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:11:29,998 INFO [QuartzScheduler_scheduler-servername-111305822376676_MisfireHandler] o.q.impl.jdbcjobstore.JobStoreTX - Handling 2 trigger(s) that missed their scheduled fire-time.
Khi một công việc chạy kết thúc, một trong những việc làm misfired sẽ được nhấc lên và chạy bình thường. Tuy nhiên, Quartz dường như nhận một công việc không hài lòng một cách ngẫu nhiên, không liên quan đến thứ tự các công việc ban đầu được dự kiến thực thi. Lý tưởng nhất, tôi muốn chúng được chọn theo thứ tự mà chúng được cho là đã chạy, dựa trên thời gian lửa ban đầu của chúng.
Có thể thực hiện các công việc chờ đợi (không hài lòng) của tôi được kích hoạt theo thứ tự đã được kích hoạt khi không gian trong Quartz ThreadPool có sẵn không?
Tôi thực sự không thể kiểm tra điều này vì tôi có một công việc mới, chưa sử dụng thạch anh trong nhiều năm và không thể bận tâm để thiết lập một dự án thử nghiệm để xem liệu công trình này có hoạt động hay không. Tuy nhiên, tôi rất ấn tượng rằng bạn đã lo lắng trả lời câu hỏi 5 năm cũ và câu trả lời của bạn có vẻ hữu ích, vì vậy tôi sẽ tiếp tục và đánh dấu câu trả lời này là đã được giải quyết :) –
Tôi đã gặp sự cố tương tự tràn ngăn xếp. Cuối cùng tôi đào sâu mã và tìm ra bản thân mình nhưng nghĩ rằng tôi sẽ để điều này ở đây trong trường hợp bất cứ ai khác đang tìm kiếm câu trả lời trong tương lai. – samblake
@JonQuarfoth Điều gì làm việc cho bạn cuối cùng? Tôi đang lên kế hoạch 10s của hàng nghìn công việc và công việc sẽ chạy dài vì tôi cần di chuyển blob từ vị trí này sang vị trí khác và các đốm màu đó có thể lớn đến 100GB. Tôi đang lên kế hoạch sử dụng Quartz clustering để khi master lên lịch công việc, nô lệ sẽ tiếp tục làm việc trên những công việc đó và tôi không thực sự quan tâm đến việc bỏ lỡ lửa vì tôi chỉ quan tâm đến công việc được chọn bởi một trong những nô lệ cuối cùng . Có lẽ tôi có thể thiết lập một giá trị ngưỡng misfire ridiculously lớn. Xin vui lòng cho tôi biết những gì các bạn nghĩ về nó. Cảm ơn. – Coder