本文介绍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 "执行结果信息";
}
文档内容是否对您有帮助?