定时器 quartz 动态时间设置

第一,定义一个任务封装类 

package dynamicSetQuartz;

 

/**

 * 任务封装类

 * @author hwt

 *

 */

public class CustomJob {

public static final int JOB_ENABLED = 0; // 任务启用状态

public static final int JOB_DISABLED = 1; // 任务禁用状态

public static final int JOB_DELETE = 2; // 任务已删除状态

private String jobId// 任务的Id,一般为所定义Bean的ID

private String jobName// 任务的描述

private String jobGroup// 任务所属组的名称

private int jobStatus// 任务的状态,0:启用;1:禁用;2:已删除

private String cronExpression// 定时任务运行时间表达式

private String memos// 任务描述

private Class<?> stateFulljobExecuteClass;//同步的执行类,需要从StatefulMethodInvokingJob继承

private Class<?> jobExecuteClass;//异步的执行类,需要从MethodInvokingJob继承

/**

 * 得到触发器名字

 * 每个job对应于一个trigger

 * @return

 */

public String getTriggerName(){

return this.jobId+"Trigger";

}

/**

 * setter,getter方法

 * @return

 */

public String getJobId() {

return jobId;

}

public void setJobId(String jobId) {

this.jobId = jobId;

}

public String getJobName() {

return jobName;

}

public void setJobName(String jobName) {

this.jobName = jobName;

}

public String getJobGroup() {

return jobGroup;

}

public void setJobGroup(String jobGroup) {

this.jobGroup = jobGroup;

}

public int getJobStatus() {

return jobStatus;

}

public void setJobStatus(int jobStatus) {

this.jobStatus = jobStatus;

}

public String getCronExpression() {

return cronExpression;

}

public void setCronExpression(String cronExpression) {

this.cronExpression = cronExpression;

}

public String getMemos() {

return memos;

}

public void setMemos(String memos) {

this.memos = memos;

}

public Class<?> getStateFulljobExecuteClass() {

return stateFulljobExecuteClass;

}

public void setStateFulljobExecuteClass(Class<?> stateFulljobExecuteClass) {

this.stateFulljobExecuteClass = stateFulljobExecuteClass;

}

public Class<?> getJobExecuteClass() {

return jobExecuteClass;

}

public void setJobExecuteClass(Class<?> jobExecuteClass) {

this.jobExecuteClass = jobExecuteClass;

}

}

 

 

二,然后在定义一个任务管理器类,里面包括有增,删,查,改

package dynamicSetQuartz;

 

import java.text.ParseException;

 

import org.quartz.CronTrigger;

import org.quartz.JobDataMap;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.Trigger;

import org.quartz.impl.StdScheduler;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

/**

 * 定时管理类

 * 包括 启用一个定时器,禁用一个定时器,得到定时器和任务详情

 * @author hwt

 *

 */

public class QuartzManager {

private static Scheduler scheduler;

static{

//得到scheduler对象

ApplicationContext context = new ClassPathXmlApplicationContext(

"applicationContext.xml");

scheduler = (StdScheduler) context.getBean("schedulerFactory");

}

/**

 * 启动一个trigger

 * @param job   任务封装对象

 * @param paramsMap  参数

 * @param isStateFull  是否是一个同步定时任务,true:同步,false:异步

 * @return

 */

public static boolean enableCronScheduler(CustomJob job,JobDataMap paramsMap,boolean isStateFull) {

if (job == null) {

return false;

}else {

try {

CronTrigger trigger = (CronTrigger) scheduler.getTrigger(job.getTriggerName(), job.getJobGroup());

if (trigger == null) { //如果没有对应的trigger

JobDetail jobDetail = null;

if (isStateFull) {//任务同步执行

jobDetail = new JobDetail(job.getJobId(), job.getJobGroup(), job.getStateFulljobExecuteClass());

}else {//任务异步执行

jobDetail = new JobDetail(job.getJobId(), job.getJobGroup(), job.getJobExecuteClass());

}

jobDetail.setJobDataMap(paramsMap);//设置传入参数

//注意:得到trigger或者创建trigger时,是使用的任务封装类中的 jobID+"Trigger"

trigger = new CronTrigger(job.getTriggerName(), job.getJobGroup(),job.getCronExpression());

scheduler.scheduleJob(jobDetail, trigger); //启用用个trigger

}else {//如果存在对应的trigger

trigger.setCronExpression(job.getCronExpression());//修改时间规则

scheduler.rescheduleJob(job.getTriggerName(), job.getJobGroup(), trigger);//重新触发

}

return true;

catch (SchedulerException e) {

e.printStackTrace();

return false;

catch (ParseException e) {

e.printStackTrace();

return false;

}

}

}

/**

 * 改变job的定时时间

 * @param jobId

 * @param groupId

 * @param newCron

 * @return

 */

public static boolean changeJobCron(String jobId,String groupId,String newCron) {

if ("".equals(jobId) || "".equals(groupId) || jobId == null

|| groupId == null || newCron == null || "".equals(newCron)) {

return false;

}else {

try {

CronTrigger trigger = (CronTrigger) scheduler.getTrigger(jobId+"Trigger", groupId);

if (trigger == null) { //如果没有对应的trigger

return false;

}else {//如果存在对应的trigger

trigger.setCronExpression(newCron);//修改时间规则

scheduler.rescheduleJob(jobId+"Trigger", groupId, trigger);//重新触发

return true;

}

catch (SchedulerException e) {

e.printStackTrace();

return false;

catch (ParseException e) {

e.printStackTrace();

return false;

}

}

}

/**

 * 得到job对应的Trigger,trigger的ID是 JObID+"Trigger"

 * @param jobId  任务ID

 * @param groupId  组ID

 * @return

 */

public static Trigger getJobTrigger(String jobId,String groupId){

if ("".equals(jobId) || "".equals(groupId) || jobId == null

|| groupId == null) {

return null;

}else {

try {

return scheduler.getTrigger(jobId+"Trigger", groupId);

catch (SchedulerException e) {

e.printStackTrace();

return null;

}

}

}

/**

 * 得到jobDetail

 * @param jobId

 * @param groupId

 * @return

 */

public static JobDetail getJobDetail(String jobId,String groupId){

if ("".equals(jobId) || "".equals(groupId) || jobId == null

|| groupId == null) {

return null;

}else {

try {

return scheduler.getJobDetail(jobId, groupId);

catch (SchedulerException e) {

e.printStackTrace();

return null;

}

}

}

/**

 * 禁用job

 * @param jobId

 * @param groupId

 * @return

 */

public static boolean disableScheduler(String jobId,String groupId){

if ("".equals(jobId) || "".equals(groupId) || jobId == null

|| groupId == null) {

return false;

}else {

//得到对应的trigger

Trigger trigger = getJobTrigger(jobId, groupId);

if (trigger != null) { //如果存在,删除对应的job任务

try {

scheduler.deleteJob(jobId, groupId);

return true;

catch (SchedulerException e) {

e.printStackTrace();

return false;

}

}else {

return false;

}

}

}

}

 

三,测试任务类

package test;

 

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean.StatefulMethodInvokingJob;

 

import dynamicSetQuartz.QuartzManager;

 

/**

 * 任务类

 * @author hwt

 *

 */

public class JobOne extends StatefulMethodInvokingJob {

private static int i = 0;

private int j = 0; /*说明每次执行都是new了一个新的执行类,具有线程安全性*/

/**

 * 此处编写需要执行的任务内容

 * 通过context.getJobDataMap().get("id名字");得到传入的参数

 */

@Override

protected void executeInternal(JobExecutionContext context)

throws JobExecutionException {

i++;

j++; 

System.out.println("j====>" + j);/*说明每次执行都是new了一个新的执行类,具有线程安全性*/

System.out.println("这是我得第" + i + "次执行");

System.out.println("my name is QuartzJobOne");

System.out.println(context.getJobDetail().getJobDataMap().get("p2"));/*得到传入的数据*/

if(i == 3){

System.out.println("我只执行三次.....");

QuartzManager.disableScheduler("job1","job1_group");

}

}

}

 

4,测试类

public class Test {

public static void main(String[] args) {

CustomJob job = new CustomJob();

job.setJobId("job1");

job.setJobGroup("job1_group");

job.setJobName("第一个测试定时器");

job.setMemos("我是第一个测试定时器的描述");

job.setCronExpression("0/5 * * * * ?");//每五秒执行一次

job.setJobExecuteClass(JobOne.class);

JobDataMap paramsMap = new JobDataMap();

ArrayList<String> paramList = new ArrayList<String>();

paramList.add("one");

paramList.add("two");

paramList.add("three");

paramsMap.put("p1","p1");

paramsMap.put("p2",paramList);//传入的参数\

//启用scheduler

QuartzManager.enableCronScheduler(job, paramsMap, false);

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值