package com.qihoo.finance.chronus.common.job; import com.qihoo.finance.chronus.context.ContextLog4j2Util; import com.qihoo.finance.chronus.context.ServiceContext; import org.springframework.scheduling.TriggerContext; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import java.util.Date; import java.util.concurrent.atomic.AtomicBoolean; /** * 抽象job类。 */ public abstract class AbstractJob implements SchedulingConfigurer { protected volatile AtomicBoolean run = new AtomicBoolean(true); /** * job 运行入口 */ public void run() { if (run.get()) { run.set(false); ServiceContext.getContext().clearContextVar().setRequestNo(ServiceContext.genUniqueId()); ContextLog4j2Util.addContext2ThreadContext(); execute(); ContextLog4j2Util.removeContextFromThreadContext(); run.set(true); } } protected void configureTasks(ScheduledTaskRegistrar taskRegistrar, Runnable task, String cron) { taskRegistrar.addTriggerTask(task, (TriggerContext triggerContext) -> { CronTrigger trigger = new CronTrigger(cron); Date nextExec = trigger.nextExecutionTime(triggerContext); return nextExec; }); } /** * 定时任务具体逻辑 */ protected abstract void execute(); }