java创建定时任务,及动态给定时任务中的操作方法传参。

创建定时任务生产工厂

import java.text.SimpleDateFormat;
import java.util.Date;

import bingo.modules.bussiness.task.QuartzManager;

/**
 *
 * <code>{@link QuartzFactory}</code>
 *
 * TODO : document me
 *
 * @author shenlu
 */
public class QuartzFactory {
	
	/**
	 * 个性化菜单定时上架
	 * @param jobTime 任务调度时间
	 * @param jobName 任务名称
	 * {@link}UpShelvesJob 上架任务类
	 */
	public static void createUpShelvesJob(Date jobDate,String jobName,String id){
		String jobTime = convertTime(jobDate);
		QuartzManager.addJob(jobName, MenuUpShelvesJob.class, jobTime, id);
	}
	
	/**
	 * 个性化菜单定时下架
	 * @param jobTime 任务调度时间
	 * @param jobName 任务名称
	 * {@link}UpShelvesJob 上架任务类
	 */
	public static void createDownShelvesJob(Date jobDate,String jobName,String id){
		String jobTime = convertTime(jobDate);
		QuartzManager.addJob(jobName, MenuDownShelvesJob.class, jobTime, id);
	}
	
	/**
	 * 全网菜单上下架
	 * @param jobDate 任务调度时间
	 * @param jobName 任务名称
	 * {@link}WholeMenuUpOrDownShelvesJob 全网上下架任务类
	 */
	public static void createWholeUpOrDownShelvesJob(Date jobDate,String jobName,String id){
		String jobTime = convertTime(jobDate);
		QuartzManager.addJob(jobName, WholeMenuUpOrDownShelvesJob.class, jobTime, id);
	}
	
	private static String convertTime(Date jobDate){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String time = format.format(jobDate);
		
		String[] times = time.split(" ");
		String[] timesF = times[1].split(":");
		String[] timesT = times[0].split("-");
		
		String jobTime = timesF[2]+" "+timesF[1]+" "+timesF[0]+" "+timesT[2]+" "+
				timesT[1]+" ? "+timesT[0];
		
		return jobTime;
	}

}
id 是我需要传递的参数,根据需要可自行增加。


创建一个定时任务管理类。

import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @Description: 定时任务管理类
 * 
 * @ClassName: QuartzManager
 * 
 * <code>{@link QuartzManager}</code>
 *
 * TODO : document me
 *
 * @author shenlu
 */
public class QuartzManager {
	private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
	private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME";
	private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";

	/**
	 * @Description: 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
	 * 
	 * @param jobName
	 *            任务名
	 * @param cls
	 *            任务
	 * @param time
	 *            时间设置,参考quartz说明文档
	 * 
	 */
	@SuppressWarnings("unchecked")
	public static void addJob(String jobName, Class cls, String time,String id) {
		try {
			Scheduler sched = gSchedulerFactory.getScheduler();
			JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类
			//放入菜单Id
			JobDataMap jobDataMap = jobDetail.getJobDataMap();
			jobDataMap.put("id", id);
			// 触发器
			CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
			trigger.setCronExpression(time);// 触发器时间设定
			sched.scheduleJob(jobDetail, trigger);
			// 启动
			if (!sched.isShutdown()) {
				sched.start();
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * @Description: 添加一个定时任务
	 * 
	 * @param jobName
	 *            任务名
	 * @param jobGroupName
	 *            任务组名
	 * @param triggerName
	 *            触发器名
	 * @param triggerGroupName
	 *            触发器组名
	 * @param jobClass
	 *            任务
	 * @param time
	 *            时间设置,参考quartz说明文档
	 * 
	 */
	@SuppressWarnings("unchecked")
	public static void addJob(String jobName, String jobGroupName,
			String triggerGroupName, Class jobClass,String time,String id) {
		try {
			Scheduler sched = gSchedulerFactory.getScheduler();
			JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任务名,任务组,任务执行类
			//放入菜单Id
			JobDataMap jobDataMap = jobDetail.getJobDataMap();
			jobDataMap.put("id", id);
			// 触发器
			CronTrigger trigger = new CronTrigger(jobName, triggerGroupName);// 触发器名,触发器组
			trigger.setCronExpression(time);// 触发器时间设定
			sched.scheduleJob(jobDetail, trigger);
			// 启动
			if (!sched.isShutdown()) {
				sched.start();
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * @Description: 修改一个任务的触发时间
	 * 
	 * @param triggerName
	 * @param triggerGroupName
	 * @param time
	 * 
	 */
	public static void modifyJobTime(String triggerName,
			String triggerGroupName, String time) {
		try {
			Scheduler sched = gSchedulerFactory.getScheduler();
			CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,triggerGroupName);
			if (trigger == null) {
				return;
			}
			String oldTime = trigger.getCronExpression();
			if (!oldTime.equalsIgnoreCase(time)) {
				CronTrigger ct = (CronTrigger) trigger;
				// 修改时间
				ct.setCronExpression(time);
				// 重启触发器
				sched.resumeTrigger(triggerName, triggerGroupName);
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * @Description: 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
	 * 
	 * @param jobName
	 * 
	 */
	public static void removeJob(String jobName) {
		try {
			Scheduler sched = gSchedulerFactory.getScheduler();
			sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器
			sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器
			sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * @Description: 移除一个任务
	 * 
	 * @param jobName
	 * @param jobGroupName
	 * @param triggerName
	 * @param triggerGroupName
	 * 
	 */
	public static void removeJob(String jobName, String jobGroupName,String triggerGroupName) {
		try {
			Scheduler sched = gSchedulerFactory.getScheduler();
			sched.pauseTrigger(jobName, triggerGroupName);// 停止触发器
			sched.unscheduleJob(jobName, triggerGroupName);// 移除触发器
			sched.deleteJob(jobName, jobGroupName);// 删除任务
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * @Description:启动所有定时任务
	 * 
	 */
	public static void startJobs() {
		try {
			Scheduler sched = gSchedulerFactory.getScheduler();
			sched.start();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * @Description:关闭所有定时任务
	 * 
	 */
	public static void shutdownJobs() {
		try {
			Scheduler sched = gSchedulerFactory.getScheduler();
			if (!sched.isShutdown()) {
				sched.shutdown();
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

动态传参关键在

JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类

//放入菜单Id
JobDataMap jobDataMap = jobDetail.getJobDataMap();

jobDataMap.put("id", id);

获取到jobDataMap 这个对象,向map里put的参数,将在后续方法中获取。

创建一个你需要定时调度任务的类。

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import bingo.alipayApi.alipayService.AlipayMenuOperateService;


/**
 * @Description: 个性化菜单上架执行类
 *
 * @ClassName: QuartzJob
 * 
 * <code>{@link QuartzJob}</code>
 *
 * TODO : document me
 *
 * @author shenlu
 */
public class MenuUpShelvesJob implements Job {

	protected final Logger	log	= LoggerFactory.getLogger(this.getClass());
	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		String id = arg0.getJobDetail().getJobDataMap().getString("id");
		AlipayMenuOperateService alipayMenuOperateService = new AlipayMenuOperateService(id);
		alipayMenuOperateService.updateTaskAlipayMenu();
		alipayMenuOperateService.menuDownShelves();
		alipayMenuOperateService.menuUpShelves();
	}
}

需要获取的参数从jobDataMap 中获取,在arg0中拿到JobDetail对象,再在JobDetail对象中获取jobDataMap 对象。

String id = arg0.getJobDetail().getJobDataMap().getString("id");

定时任务需要做的操作。写在

public void execute(JobExecutionContext arg0) throws JobExecutionException {

}

方法中即可


猜你喜欢

转载自blog.csdn.net/qq_39706128/article/details/80001500