package web.util; import db.model.bilibili.ScheduledTaskEntity; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.criterion.DetachedCriteria; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.scheduling.TriggerContext; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.config.TriggerTask; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Service; import web.service.BiliService; import javax.annotation.Resource; import java.util.Date; /** * Created by reborn on 2017/5/8. * 动态定时器任务管理类 */ @Service public class DynamicTimer extends ScheduledTaskRegistrar implements ApplicationListener { @Resource private BiliService biliService; private static Logger log=LogManager.getLogger(); public void addTriggerTask(ScheduledTaskEntity scheduledTaskEntity) { super.scheduleTriggerTask(new TriggerTask(()->{ },(TriggerContext triggerContext)->{ CronTrigger trigger = new CronTrigger(scheduledTaskEntity.getExpression()); log.debug(triggerContext+""); Date nextExec = trigger.nextExecutionTime(triggerContext); return nextExec; })); } @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { biliService.find(DetachedCriteria.forClass(ScheduledTaskEntity.class)).forEach(entity->addTriggerTask((ScheduledTaskEntity)entity)); } }