JobExecutionAlreadyRunningException A job execution for this job is already running

本地启动springboot项目自测定时任务代码时候报错,发现如下可以解决。

@Slf4j
@RunWith(SpringRunner.class)
@ActiveProfiles("local")
@SpringBootTest(classes = AssetApp.class)
public class SendDataJobTest {

    @Resource
    private sendDataJob job;

    @Test
    public void testDoJob() {
        try {
            String param = null;
            job.sendData(param);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

通过sql查询相关批处理表,并通过sql更新相关状态来解决该异常。
检查两个表:batch_step_execution、batch_job_execution
这两张表如果有已启动(正在启动)和未完成的作业,就可能出现该异常。

一:使用sql在数据库查询是否有未完成的任务

SELECT  
       STEP_EXECUTION_ID
     , JOB_EXECUTION_ID
     , STEP_NAME
     , STATUS
     , EXIT_CODE
     , bse.*
FROM batch_step_execution bse
WHERE 1=1
  AND status IN ('STARTED', 'STARTING')
  AND exit_code NOT IN ('COMPLETED', 'FAILED')
ORDER BY start_time desc
;


SELECT bje.JOB_EXECUTION_ID
     , bji.JOB_NAME
     , bje.JOB_INSTANCE_ID
     , bje.STATUS
     , bje.EXIT_CODE
--      , timediff(bje.CREATE_TIME, NOW())
     , bje.*
FROM batch_job_execution bje
         INNER JOIN batch_job_instance bji
                    ON bje.job_instance_id = bji.job_instance_id
WHERE 1=1
  AND status IN ('STARTED', 'STARTING')
  AND exit_code NOT IN ('COMPLETED', 'FAILED')
ORDER BY bje.create_time desc
;

二:如果sql执行后有记录,执行更新sql

UPDATE batch_step_execution
SET END_TIME = now()
  ,LAST_UPDATED = now()
  ,STATUS = 'COMPLETED'
  ,EXIT_CODE = 'FAILED'
WHERE
        STEP_EXECUTION_ID in (
        select STEP_EXECUTION_ID
        from batch_step_execution bse
        where 1=1
            and status not in ('COMPLETED', 'FAILED')
           or EXIT_CODE not in ('COMPLETED', 'FAILED')
    )
;


UPDATE BATCH_JOB_EXECUTION
SET
    END_TIME = now()
  ,LAST_UPDATED = now()
  ,STATUS = 'COMPLETED'
  ,EXIT_CODE = 'FAILED'
WHERE
        JOB_EXECUTION_ID in (
        select bje.JOB_EXECUTION_ID
        from batch_job_execution bje
        where 1=1
            and (status not in ('COMPLETED', 'FAILED'))
           or (EXIT_CODE not in ('COMPLETED', 'FAILED'))
    )
;

三: 重启服务,报错消失

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值