You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
webcrawler/web/src/main/java/web/util/DynamicTimer.java

47 lines
1.6 KiB

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<ContextRefreshedEvent> {
@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));
}
}