카테고리 없음

JobExecutionAlreadyRunningException: A job execution for this job is already running

bbangduck 2023. 8. 30. 16:50

다른 블로그들에 나와있는 해결책은 아래와 같습니다.

UPDATE 
    BATCH_JOB_EXECUTION 
SET 
    END_TIME = NOW(), 
    STATUS = 'FAILED', 
    EXIT_CODE = 'COMPLETED' 
WHERE 
   JOB_EXECUTION_ID =
      (SELECT 
         MAX(JOB_EXECUTION_ID) 
       FROM 
         BATCH_JOB_EXECUTION 
       WHERE 
         JOB_INSTANCE_ID = 1
      );

 

MySQL에서 해당 쿼리를 실행시 Error Code: 1093. You can't specify target table 'BATCH_JOB_EXECUTION' for update in FROM clause

 에러를 만납니다.

 

MySQL은 데이터를 추가나 갱신할 경우 동일한 테이블로 서브쿼리를 사용할 수 없기 때문입니다.

Oracle이나 Postgresql에서는 문제 없이 실행됩니다.

 

조인을 이용하여 아래와 같은 쿼리로 해결할 수 있습니다.

UPDATE BATCH_JOB_EXECUTION bje
JOIN (
    SELECT MAX(JOB_EXECUTION_ID) AS MAX_JOB_EXECUTION_ID
    FROM BATCH_JOB_EXECUTION
    WHERE JOB_INSTANCE_ID = 1
) subquery
ON bje.JOB_EXECUTION_ID = subquery.MAX_JOB_EXECUTION_ID
SET
    bje.END_TIME = NOW(),
    bje.STATUS = 'FAILED',
    bje.EXIT_CODE = 'COMPLETED';