springmvc+easyui实现界面控制quartz的暂停、恢复、修改、添加

来源:互联网 发布:破解版软件大全 编辑:程序博客网 时间:2024/06/05 18:31

1、把quartz的表达式信息放到数据库中:

package cn.edu.nuc.entity;public class ScheduleJob {private Integer id; /** 任务id */    private String jobId;          /** 任务名称 */    private String jobName;          /** 任务分组 */    private String jobGroup;          /** 任务状态 0禁用 1启用 2删除*/    private int jobStatus;          /** 任务运行时间表达式 */    private String cronExpression;          /** 任务描述 */    private String desc;    public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}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 getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public ScheduleJob() {        super();    }     public ScheduleJob(String jobId, String jobName, String jobGroup,            int jobStatus, String cronExpression, String desc) {        super();        this.jobId = jobId;        this.jobName = jobName;        this.jobGroup = jobGroup;        this.jobStatus = jobStatus;        this.cronExpression = cronExpression;        this.desc = desc;    }}


2、spring集成quartz

quartz.xml

<bean name="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">     </bean>  
使用quartz的本身调度(集成Job类)

import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import cn.edu.nuc.entity.ScheduleJob;public class QuartzJobFactory implements Job{@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {// TODO Auto-generated method stub System.out.println("任务成功运行");           ScheduleJob scheduleJob = (ScheduleJob)context.getMergedJobDataMap().get("scheduleJob");           System.out.println("任务名称 = [" + scheduleJob.getJobName() + "]");  }}

3、系统启动时从数据库中读取调度信息,初始化quartz

public void init() throws Exception {Scheduler scheduler = schedulerFactoryBean.getScheduler();  // 可执行的任务列表  List<ScheduleJob> taskList = quartzService.getJobs();  for (ScheduleJob job : taskList) {   TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(),job.getJobGroup());   CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);   // 不存在,创建一个   if (null == trigger) {   JobDetail jobDetail = JobBuilder.newJob(QuartzJobFactory.class)   .withIdentity(job.getJobName(),job.getJobGroup()).build();   jobDetail.getJobDataMap().put("scheduleJob", job);   // 表达式调度构建器   CronScheduleBuilder scheduleBuilder = CronScheduleBuilder   .cronSchedule(job.getCronExpression());   // 按新的表达式构建一个新的trigger   trigger = TriggerBuilder.newTrigger()   .withIdentity(job.getJobName(),job.getJobGroup())   .withSchedule(scheduleBuilder).build();   scheduler.scheduleJob(jobDetail, trigger);   } else {   // trigger已存在,则更新相应的定时设置   CronScheduleBuilder scheduleBuilder = CronScheduleBuilder   .cronSchedule(job.getCronExpression());   // 按新的cronExpression表达式重新构建trigger   trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)   .withSchedule(scheduleBuilder).build();   // 按新的trigger重新设置job执行   scheduler.rescheduleJob(triggerKey, trigger);   }  }}

4、动态暂停、恢复、修改、添加:

//暂停、恢复public void pauseQuartz(String id,int flag) throws Exception {ScheduleJob scheduleJob = quartzJobDao.get(Integer.parseInt(id));Scheduler scheduler = schedulerFactoryBean.getScheduler();          JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());          if (flag == 0) {        scheduler.pauseJob(jobKey);        } else {        scheduler.resumeJob(jobKey);         }                        /** 任务状态 0禁用 1启用 2删除*/        Map map = new HashMap();        map.put("id", id);        map.put("jobStatus", flag);quartzJobDao.updateParam(map, "updateJob");}//新增或修改public void updateQuartz(ScheduleJob job) throws Exception {        Scheduler scheduler = schedulerFactoryBean.getScheduler();          if(null!=job){            //获取触发器标识              TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());              //获取触发器trigger              CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);                          if(null==trigger){//不存在任务                  //创建任务                  JobDetail jobDetail = JobBuilder.newJob(QuartzJobFactory.class)                          .withIdentity(job.getJobName(), job.getJobGroup())                          .build();                                     jobDetail.getJobDataMap().put("scheduleJob", job);                                     //表达式调度构建器                  CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job                          .getCronExpression());                                     //按新的cronExpression表达式构建一个新的trigger                  trigger = TriggerBuilder.newTrigger()                          .withIdentity(job.getJobName(), job.getJobGroup())                          .withSchedule(scheduleBuilder)                          .build();                                     scheduler.scheduleJob(jobDetail, trigger);                                     //把任务插入数据库          quartzJobDao.insert(job);            }else{//存在任务                 // Trigger已存在,那么更新相应的定时设置                  //表达式调度构建器                  CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());                  //按新的cronExpression表达式重新构建trigger                  Trigger newtrigger = trigger.getTriggerBuilder()                          .withIdentity(triggerKey)                          .withSchedule(scheduleBuilder)                          .build();                  //按新的trigger重新设置job执行                  scheduler.rescheduleJob(triggerKey, newtrigger);                                   //更新数据库中的任务                  Map map = new HashMap();                map.put("jobName", job.getJobName());                map.put("jobGroup", job.getJobGroup());                map.put("cronExpression", job.getCronExpression());        quartzJobDao.updateParam(map, "updateJobTriger");                           }                         }  }








1 0
原创粉丝点击