ThreadPoolTaskScheduler定时器

时间:2025-04-09 08:48:28
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");
//		new Thread(() -> {
//			try {
//				(1000*60);
//				("1");
//			} catch (InterruptedException e) {
//				();
//			}
//        }, "aaaaa").start();
	}

}