[Srping Boot + Quartz Job] Thực thi công việc có độ trễ

hhuuyy009

New Member
14/8/21
3
0
1
Đồng Nai
Chào mọi người,

Tôi đang gặp phải 1 vấn đề khi thực thi job, tôi có khoản 50 jobs được chạy vào giây thứ 5 của mỗi phút.
1628933166550.png

Hàm execute sẽ được gọi khi tới giờ (nghĩa là cứ đến giây thứ 5 của mỗi phút thì 50jobs sẽ được thực thi ở đây)
1628933365120.png

Nhưng không phải lúc nào cũng tại giây thứ 5 sẽ thực thi tất cả mà sẽ có độ trễ nhất định (ví dụ khoản 3job sẽ chạy ở giây thứ 6, 8jobs chạy ở giây thứ 7, 9jobs chạy ở giây thứ 8) cứ như thế nó sẽ tăng lên thêm vài giây sau đó để thực thi.
Làm thế nào để thực thi tất cả các jobs cùng một lúc ví dụ tại giây thứ 5 sẽ thực thi tất cả

Mong được sự giúp đỡ của mọi người.
 

Attachments

Joe

Thành viên VIP
21/1/13
3,007
1,335
113
I would like to reproduce your codes but I hate to type line by line...Sorry. READ THIS
Three NOs:
1) NO screenshot of exception list, nor a screenshot of a code segment.
2) NO lapidary description of exceptions or bugs without source codes.
3) NO request for help or for a solution of a homework.
More: HERE
 

hhuuyy009

New Member
14/8/21
3
0
1
Đồng Nai
Tôi xin lỗi về việc này,
Dưới đây là code tôi đang sử dụng, tôi có thêm database cho quartz, nếu cần tôi sẽ trích xuất!

Java:
public Scheduler addAndStartOtherJob(String Id) {
    try {
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity(betId,"group").withSchedule(CronScheduleBuilder.cronSchedule("5 * * ? * * *")).build();
        JobDetail jobDetail = JobBuilder.newJob(OtherJob.class).withIdentity(Id, "group") .build();
        scheduler.start();
        scheduler.scheduleJob(jobDetail, trigger);
        System.out.println(jobDetail.getKey() + ","+ trigger.getKey() + " will run at: " + new Date());
    } catch(Exception ex) {
        System.out.println(ex);
    }
    return scheduler;
}
Java:
public class OtherJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("key+group trigger : " + context.getTrigger().getKey());
        //
    }
}
Sau khi xử lý trong hàm execute tôi có lưu lại ở database khung thời gian nó đã xảy ra
1628935695235.png
 

Joe

Thành viên VIP
21/1/13
3,007
1,335
113
Thanks for the following the rules:-bd

First of all: generally a job in background is a thread or task which can be started very arbitrarily. Meaning that the jobs won't run sequentially as one expected (e.g. 1, 2, 3, 4, ...) but they are in any arbitrary sequence.
Second: if you even want to start the jobs "simultaneously" you have to code individually. You can see, for example, THIS then you would understand what I am talking about.
Third: try to implement the TriggerListeners and JobListeners and see how it works.
 

hhuuyy009

New Member
14/8/21
3
0
1
Đồng Nai
Cảm ơn sự phản hồi này,

Tôi cũng tìm hiểu về JobDataMap và trình lắng nghe sự kiện TriggerListener, JobListener (nó nói rằng thông báo là công việc hiện tại đã hoàn thành xong bạn có thể kích hoạt công việc mới nhưng công việc mới của tôi được gọi song song trong lúc kích hoạt bộ lập lịch, nghĩa là đúng giây thứ 5 nó sẽ kích hoạt toàn bộ công việc thì không thể báo rằng công việc trước đó đã thực thi xong)
Tôi đang sử dụng Thread và Runnable bên trong hàm execute để có thể chạy song song nhiều nhất có thể, nhưng cũng không giải quyết được!
Tôi có tìm kiếm và cũng có người gặp vấn đề tương tự nhưng chưa có câu trả lời THIS :)