2017-10-20 8 views
0

기본적으로 Quartz Scheduler의 구현을 사용 중이고 동시에 여러 작업을 실행하려고하지만 일부는 다른 태스크보다 먼저 실행해야한다. 이를 위해 Trigger에 대해 "priority"매개 변수를 찾았습니다.Quartz Scheduler 트리거가 우선 순위를 따르지 않음

그래서 각각 4 개의 작업이 있고 각 작업마다 자체 트리거가 있다고 가정 해 보겠습니다. 나는이 같은 우선 순위 설정 : 작업 1 - 우선 순위를 5 작업 2 - 우선 순위 3 job3 - 우선 순위 11 job4 - 우선 순위 8

내가 그들을이 순서대로 실행하려는 : job3, job4, 작업을, 1, job2

20 회 중 3 회 정도 예상 결과가 나옵니다. 나머지 작업의 경우 실행할 첫 번째 작업은 거의 무작위이며 나머지 작업은 올바르게 정렬됩니다. 작업 1, job3, job4, 작업 2 또는 job4, job3, 작업 1, 작업 2

오전 나는 우선 순위 석영에서 작동하는 방법을 제대로 이해하지 : 하나 개의 실행은 같은 것입니까? 나는 무슨 일이 일어나고 있는지 정확히 알 수 없다.

+0

스레드 풀 크기는 무엇입니까? 사용 가능한 스레드보다 더 많은 작업이 실행되는 상황으로 실행합니까? 모든 작업이 동일한 예약 시간을 갖고 있고 쿼츠가 자유 스레드를 사용하여 모든 우선 순위 실행을 실행하는 경우 – Srinivas

+0

스레드 풀 크기가 1입니다. ,이 예제에서처럼 http://www.quartz-scheduler.org/documentation/quartz-2.x/examples/Example14.html 우선 순위에 따라 태스크를 실행해야하는 것은 무엇이든간에 – Mocktheduck

+0

우리는 살펴야 만한다. 두가지. 1) 귀하의 직업은 어떻게 계획되어 있습니까? 당신은 모든 직업에 대해 동일한 cron을 가지고 있으며, 동시에 발사 할 것을 기대합니까? 아니면 multipleWillDelay와 같은 것을 사용하여 여러 차례 실행을 계획합니까? 2) 귀하의 직업에 대한 NextFireTime을보고 더 많은 통찰력을 줄 수 있습니다. 모든 작업이 동시에 실행되도록 예약 된 경우에만 우선 순위가 나타납니다. 화재 시간이 다른 경우 가장 오래된 예정 ToFire 시간이있는 작업이 – Srinivas

답변

0

Quartz에서는 다른 우선 순위로 동시에 여러 작업을 예약 할 때 작동중인 스레드가 이미 사용중인 경우를 제외하고는 원하는 순서대로 해당 작업을 가져올 수 없다는 점이 다릅니다. 그렇지 않으면 작동중인 스레드가 사용 중이 지 않으면 나노초 범위에서 스케줄 할 수있는 우선 순위가 가장 높은 작업을 선택합니다.

제 경우에는 스레드가 사용량이 많지 않았으므로 모든 작업을 예약하는 동안 쿼츠는 내가 예약 한 첫 번째 작업을 픽업하고 처리 할 시간이있었습니다. 나머지 작업은 스레드가 작업 1을 처리 중일 때 예약 할 시간이있었습니다.

여러분 스스로 문제를 추적하기 위해 "일괄 획득 ..."메시지를 따라갈 수 있습니다.

내 솔루션은 작업 목록에 대한 메서드 일정을 사용하는 것입니다.