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.
46 lines
1.6 KiB
46 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));
|
|
}
|
|
} |