import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
public class ScheduleUtil {
private static final Logger LOG = LoggerFactory.getLogger(ScheduleUtil.class);
private static ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
private static Map<String, ScheduledFuture<?>> scheduledFutureMap = new HashMap<String, ScheduledFuture<?>>();
static {
threadPoolTaskScheduler.initialize();
LOG.info("定时任务启动");
}
public static void start(Runnable runnable, Trigger trigger, String id) {
ScheduledFuture<?> scheduledFuture = threadPoolTaskScheduler.schedule(runnable, trigger);
scheduledFutureMap.put(id, scheduledFuture);
LOG.info("启动定时任务" + id);
}
public static void cancel(String id) {
ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(id);
if (scheduledFuture != null) {
scheduledFuture.cancel(true);
}
scheduledFutureMap.remove(id);
LOG.info("取消定时任务" + id);
}
public static void reset(Runnable runnable, Trigger trigger, String id) {
ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(id);
if (scheduledFuture != null && scheduledFuture.isCancelled()) {
scheduledFuture.cancel(true);
}
scheduledFutureMap.remove(id);
scheduledFuture = threadPoolTaskScheduler.schedule(runnable, trigger);
scheduledFutureMap.put(id, scheduledFuture);
LOG.info("修改定时任务" + id);
}
}
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.support.CronTrigger;
import cn.com.szhtkj.entity.TaskScheduleModel;
import cn.com.szhtkj.util.CreateCron;
public class DsclScheduledTask implements Runnable {
private static final Logger LOG = LoggerFactory.getLogger(ScheduleUtil.class);
protected String id;
public String getId() {
return id;
}
public DsclScheduledTask(String id) {
this.id = id;
}
@Override
public void run() {
LOG.info(id + " 开始执行");
}
public static void main(String[] args) {
ScheduleUtil.start(new Runnable() {
@Override
public void run() {
try {
while(true) {
Thread.sleep(3000);
System.out.println("11111111111111");
}
} catch (Exception ex) {
ex.printStackTrace();;
}
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
TaskScheduleModel taskScheduleModel = new TaskScheduleModel();
taskScheduleModel.setJobType(1);
Integer hour = Integer.parseInt("11");
Integer minute = Integer.parseInt("17");
Integer second = Integer.parseInt("00");
taskScheduleModel.setHour(hour);
taskScheduleModel.setMinute(minute);
taskScheduleModel.setSecond(second);
String cron = CreateCron.createCronExpression(taskScheduleModel);
CronTrigger trigger = new CronTrigger(cron);
Date nextExec = trigger.nextExecutionTime(triggerContext);
return nextExec;
}
}, "1");
ScheduleUtil.cancel("1");
}
}