springmvc+easyui实现界面控制quartz的暂停、恢复、修改、添加
2015-07-16 16:04
621 查看
1、把quartz的表达式信息放到数据库中:
2、spring集成quartz
quartz.xml
3、系统启动时从数据库中读取调度信息,初始化quartz
4、动态暂停、恢复、修改、添加:
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{ @Override public 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"); } } }
相关文章推荐
- eclipse template里面的${user}更改
- javassist学习一
- Spring -- 第一个简单的Spring程序
- javassist学习二
- java-银行业务调度系统《十一》
- Java 自动装箱与拆箱详解
- AVL树的插入与删除---Java实现
- Java高级个人笔记(java常用集合总结)
- Java反射机制:表单数据自动封装到JavaBean中【IT】
- JavaWeb的各种中文乱码解决方法
- eclipse项目导入androidstudio
- spring利用javamail,quartz…
- java正则表达式
- JAVA读取Excel的实现[转]
- java在线预览txt、word、ppt、exec…
- JAVA反射机制
- Spring Rmi配置
- 【转载】Spring&nbsp;RMI&amp;nb…
- Spring Quartz定时器
- java中POJO类为什么要实现序列化