2011-10-18 4 views
3

저는 Quartz 라이브러리를 사용하여 예약 된 작업을 가진 웹 애플리케이션을 가지고 있습니다. 최근에 직장이 해고 된 것처럼 보이지 않는 경우가 발생했습니다. 작업을 예외가 발생하면 약간의 독서를하고 분명히 작업을 수행했습니다. 석영 스케줄러는 작업을 다시 실행하려고 시도합니다. 사실입니까?석영 예정된 작업이 실행되지 않음 - 처리되지 않은 예외가 있습니까?

어쨌든 나는 위의 진술이 사실이라는 가정하에 몇 가지 문제를 해결했습니다. 그래서 나는 다음과 같은 코드가 있다고 가정 해 봅시다 : 참고로 여기

try { 
    method.invoke(object, params); 
} 
catch (ExceptionA ea) { 
    ea.printStackTrace(); 
} 
catch (ExceptionB eb) { 
    eb.printStackTrace(); 
} 
// and so on so forth, catching a bunch of specific Exceptions 

중요한 점은 예외 자체가을 잡은하지 않을 것입니다.

그래서 호출되는 메소드가 처리되지 않은 예외를 던졌습니다.

public void methodBeingInvoked() throws UnhandledException { 

어떻게 될까요?

답변

4

임의의 작업에서 던져진 Throwable은 Quartz에 의해 잡히게되고 JobExecutionException에 랩핑되고 refired되지 않습니다. JobRunShell#run

의 소스 코드를 참조하십시오이 모순 일부 documentation on the Quartz website가 있지만, 석영에 1.8.x/커널 2.0.x/2.1.x의 소스 코드를보고 후, 문서의 모든 버전에 대한 잘못된 것입니다.

작업 실행 메소드에는 가능한 모든 예외를 처리하는 try-catch 블록이 있어야합니다.

작업이 예외를 throw하면 일반적으로 Quartz는 즉시 을 다시 실행합니다 (그러면 동일한 예외가 다시 throw 될 가능성이 큽니다). 작업이 발생할 수있는 모든 예외를 잡아서 을 처리하고 자체 또는 다른 작업을 다시 스케줄하는 것이 더 좋습니다. 문제를 해결할 수 있습니다.

관련 문제