Spring任务问题

本文介绍Spring任务接入SchedulerX任务调度中的常见问题。

SchedulerX接管后原Spring定时器依旧运行

由于应用中配置了自定义的Scheduler调度器导致SchedulerX覆盖自定义处理器。请排查业务应用工程中是否存在实现org.springframework.scheduling.annotation.SchedulingConfigurer接口的类,确认是否调用了ScheduledTaskRegistrar的setScheduler方法覆盖默认调度器,如果存在,请注释掉相关逻辑即可。

Spring任务如何获取任务上下文

在业务应用工程代码中增加以下代码获取任务上下文。

JobContext jobContext = ContainerFactory.getContainerPool().getContext();

Spring任务是否支持返回结果

版本客户端大于1.10.11时,Spring任务支持返回结果,您可以直接在定时方法上返回任意结果。

@Scheduled(cron = "0/5 * * * * ?")
public ProcessResult helloStandalone1() {
    try {
        logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. start");
        TimeUnit.SECONDS.sleep(2L);
        logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. end");
    } catch (Exception e) {
        e.printStackTrace();
        logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. exception end..");
    }
    return new ProcessResult(true, "执行结果信息");
}

@Scheduled(cron = "0/5 * * * * ?")
public String helloStandalone2() {
    try {
        logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. start");
        TimeUnit.SECONDS.sleep(2L);
        logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. end");
    } catch (Exception e) {
        e.printStackTrace();
        logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. exception end..");
    }
    return "执行结果信息";
}