quartz代码
来源:互联网 发布:淘宝延迟收货可以几单 编辑:程序博客网 时间:2024/05/20 19:16
import java.util.Map;
import org.quartz.Job;
/**
* 调度服务接口
* @author Admin
*
*/
public interface IScheduleService {
/**
* 周期性调度任务(主要处理固定时间间隔的任务,如每隔30秒执行一次,每隔10秒执行一次等)
* @param jobName 任务名
* @param task 任务
* @param repeatInterval 重复间隔
* @param repeatCount 重复次数,如果为null,则无限
* @param param 任务所需的参数
* @return
* @throws Exception
*/
boolean schedule(String jobName,Class<? extends Job> task,Long repeatInterval,Integer repeatCount,Map<String,Object> param)throws Exception;
/**
* 周期性调度任务(主要处理每月15号或每天下午的3点的任务)
* @param jobName 任务名
* @param task 任务所代表的类
* @param cronExpre cron 表达式
* @param params 参数对象
* @return
* @throws Exception
*/
boolean schedule(String jobName,Class<? extends Job> task,String cronExpre,Map<String,Object> params) throws Exception;
/**
* 指定的任务是否已在队列中
* @param jobName 任务名
* @return true:存在 false:不存在
* @throws Exception
*/
boolean existsInScheduler(String jobName) throws Exception;
/**
* 修改任务的时间
* @param jobName 任务名称
* @param time cron表达式
* @param so 任务参数
* @throws Exception
*/
void modifyJobTime(String jobName,String time,Map<String,Object> param) throws Exception;
/**
* 修改任务时间(主要是固定重复间隔、重复次数)
* @param jobName 任务名
* @param repeatInterval 重复间隔
* @param repeatCount 重复次数
* @param param 任务所需的参数
* @throws Exception
*/
void modifyJobTime(String jobName,Long repeatInterval,Integer repeatCount,Map<String,Object> param) throws Exception;
/**
* 得到所有队列中的任务名称
* @return 任务名称数组
* @throws Exception
*/
String[] getAllJobNames() throws Exception;
/**
* 从调度器中移除指定的任务
* @param jobName 任务名
* @throws Exception
*/
void removeJobFromScheduler(String jobName)throws Exception;
}
/**###############################################implementation#####################################################*/
package com.sugon.example.service.quartz.intf.impl;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.PostConstruct;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import com.sugon.example.service.quartz.intf.export.IScheduleService;
/**
* 调度服务实现类
* @author Admin
* @see IScheduleService
*/
@Service("scheduleService")
public class ScheduleServiceImpl implements IScheduleService {
private static IScheduleService scheduleService = null;
private static SchedulerFactory schedulerFactory = null;
private static Scheduler scheduler=null;
private static final String DEFAULT_JOB_GROUP="defaultJobGroup";
private static final String DEFAULT_TRIGGER_NAME="defaultTriggerName";
private static final String DEFAULT_TRIGGER_GROUP="defaultTriggerGroup";
private static Object obj = new Object();
private ScheduleServiceImpl(){}
static{
schedulerFactory = new StdSchedulerFactory();
try {
scheduler = schedulerFactory.getScheduler();
} catch (SchedulerException e) {
System.out.println("obtain scheduler obj error!!");
};
}
public static IScheduleService getInstance(){
synchronized (obj) {
if (null == scheduleService){
scheduleService = new ScheduleServiceImpl();
}
}
return scheduleService;
}
@Override
public boolean schedule(String jobName,Class<? extends Job> task, Long repeatInterval,
Integer repeatCount,Map<String,Object> param) throws Exception {
Assert.notNull(task,"task can't be null!!");
Assert.notNull(repeatInterval,"repeat interval can't be null!!");
if (!existsInScheduler(jobName)) {// 如果给定的任务不在任务队列中
JobDetail jobDetail = new JobDetail(jobName,DEFAULT_JOB_GROUP,task);
JobDataMap jdm = convertToJobDataMap(param);
jobDetail.setJobDataMap(jdm);
SimpleTrigger simpleTrigger=new SimpleTrigger(jobName,DEFAULT_TRIGGER_GROUP);
simpleTrigger.setStartTime(new Date());
simpleTrigger.setRepeatInterval(repeatInterval);
simpleTrigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
if (null != repeatCount) {
simpleTrigger.setRepeatCount(repeatCount);
}
scheduler.scheduleJob(jobDetail, simpleTrigger);
if (!scheduler.isStarted()) {
scheduler.start();
}
}
return true;
}
@Override
public boolean schedule(String jobName,Class<? extends Job> task, String cronExpre,Map<String,Object> params)
throws Exception {
Assert.notNull(task,"task can't be null!!");
Assert.notNull(cronExpre,"cron expression can't be null!!");
if (!existsInScheduler(jobName)) {// 如果给定的任务不在任务队列中
JobDetail jobDetail = new JobDetail(jobName,DEFAULT_JOB_GROUP,task);
JobDataMap jdm = convertToJobDataMap(params);
jobDetail.setJobDataMap(jdm);
CronTrigger cronTrigger = new CronTrigger(jobName,DEFAULT_TRIGGER_GROUP);
cronTrigger.setCronExpression(cronExpre);
scheduler.scheduleJob(jobDetail, cronTrigger);
if (!scheduler.isStarted()) {
scheduler.start();
}
}
return true;
}
@Override
public boolean existsInScheduler(String jobName)
throws Exception {
Assert.notNull(jobName,"jobName can't be null!!");
JobDetail jobDetail = scheduler.getJobDetail(jobName, DEFAULT_JOB_GROUP);
return (null == jobDetail ? false:true);
}
@Override
public String[] getAllJobNames() throws Exception {
String[] jobNames = scheduler.getJobNames(DEFAULT_JOB_GROUP);
return (null == jobNames?new String[0]:jobNames);
}
public void modifyJobTime(String jobName,String time,Map<String,Object> param) throws Exception{
JobDetail jobDetail = scheduler.getJobDetail(jobName, DEFAULT_JOB_GROUP);
if (null != jobDetail) {
@SuppressWarnings("unchecked")
Class<? extends Job> jobClass = jobDetail.getJobClass();
JobDataMap jobDataMap = jobDetail.getJobDataMap();
Map<String,Object> so = convertToMap(jobDataMap);
if (null !=param && !param.isEmpty()){
so = param;
}
removeJobFromScheduler(jobName);
schedule(jobName,jobClass,time,so);
}
}
@Override
public void removeJobFromScheduler(String jobName) throws Exception {
scheduler.pauseTrigger(jobName,DEFAULT_TRIGGER_NAME);// 停止触发器
scheduler.unscheduleJob(jobName, DEFAULT_TRIGGER_NAME);// 移除触发器
scheduler.deleteJob(jobName, DEFAULT_JOB_GROUP);// 删除任务
}
/**
* 将jobDataMap转换为map
* @param jobDataMap
* @return
*/
private Map<String,Object> convertToMap(JobDataMap jobDataMap) {
Map<String,Object> so = new HashMap<String,Object>();
if (null != jobDataMap) {
@SuppressWarnings("unchecked")
Set<Map.Entry<String,Object>> keys = jobDataMap.entrySet();
Iterator<Map.Entry<String,Object>> iterator = keys.iterator();
while(iterator.hasNext()) {
Entry<String,Object> entry = iterator.next();
so.put(entry.getKey(),entry.getValue());
}
}
return so;
}
/**
* 将map转换为JobDataMap
* @param so
* @return
*/
private JobDataMap convertToJobDataMap(Map<String,Object> so) {
JobDataMap jdm = new JobDataMap();
if (null != so) {
Set<Map.Entry<String,Object>> keys = so.entrySet();
Iterator<Map.Entry<String,Object>> iterator = keys.iterator();
while(iterator.hasNext()) {
Entry<String,Object> entry = iterator.next();
jdm.put(entry.getKey(),entry.getValue());
}
}
return jdm;
}
@Override
public void modifyJobTime(String jobName, Long repeatInterval,
Integer repeatCount, Map<String, Object> param) throws Exception {
JobDetail jobDetail = scheduler.getJobDetail(jobName,DEFAULT_JOB_GROUP);
if (null != jobDetail) {
@SuppressWarnings("unchecked")
Class<? extends Job> jobClass = jobDetail.getJobClass();
JobDataMap jobDataMap = jobDetail.getJobDataMap();
Map<String,Object> so = convertToMap(jobDataMap);
if (null !=param && !param.isEmpty()){
so = param;
}
removeJobFromScheduler(jobName);
schedule(jobName,jobClass,repeatInterval,repeatCount,so);
}
}
}
- quartz代码
- Quartz总体代码结构
- [Java代码] quartz集群
- quartz定时设置代码
- Quartz初始化plugin的代码
- C#调用Quartz实例代码
- C#调用Quartz实例代码
- C#调用Quartz实例代码 Quartz 定时作业
- Spring结合java Quartz配置实例代码
- 代码控制Quartz的启动和停止
- quartz spring配置实例代码demo下载
- quartz spring配置实例代码demo下载
- quartz Cron自动生成的 相关代码
- Spring结合java Quartz配置实例代码
- Spring结合java Quartz配置实例代码
- quartz 首页的几行代码
- Quartz 基础知识及示例代码(一)
- Quartz
- hdu4484(模拟)
- Emacs基本操作
- cocos2d-x2.1.2精灵表单与表单编辑器
- NYOJ-457-大小写互换-2013年7月25日08:51:17
- 最小表示法求两个字符串是否循环相等
- quartz代码
- Stockbroker Grapevine
- llinux根文件系统/etc/passwd文件详解
- NYOJ-75-日期计算-2013年7月25日10:26:18
- 13山东ACM省赛(第四届)problem A Rescue The Princess
- NYOJ-260-数数小木块-2013年7月25日11:00:56
- 微信公众帐号开发教程
- java内部类的作用分析
- NAS, BRAS