apollo 动态添加定时任务,需要实现Ordered 接口,让该类在apollo 启动完成后再进行启动,通过注解@Value获取apollo的key,此方法对于循环cron表达式修改后生效,但需要注意的是apollo刷新后下一次执行的触发器还是上一次的时间,需要再第二次才会开始新的时间循环,如果是单次定时任务则还是需要重启项目才能解决更新后的cron,亲测有效!
@Component("acctActivityTask")
public class AcctActivityTask implements SchedulingConfigurer, Ordered {
private static final Logger LOGGER = LoggerFactory.getLogger(AcctClearTask.class);
@Resource
AcctApplyShareService acctApplyShareService;
@Value("${mp.activity.gift.deadline.cron}")
private String cron;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//String cron = MpContext.getString(Definition.GIFT_DEADLINE_CRON);
Runnable runnable = () -> {
LOGGER.info("开始执行代理活动定时任务{}", cron);
acctApplyShareService.checkActivityTask();
};
Trigger trigger = triggerContext -> {
CronTrigger cronTrigger = new CronTrigger(cron);
return cronTrigger.nextExecutionTime(triggerContext);
};
taskRegistrar.addTriggerTask(runnable, trigger);
}
@Override
public int getOrder() {
return LOWEST_PRECEDENCE;
}
}