Quartz
来源:互联网 发布:java教程视频下载 编辑:程序博客网 时间:2024/06/06 02:08
Quartz框架核心概念
Quartz对任务调度进行了高度抽象,提出了3个核心概念,并在org.quartz包中通过接口和类进行了描述
任务:就是执行的工作内容。Quartz提供Job接口来支持任务定义
触发器:定义触发Job执行的时间触发规则。Quartz提供Trigger类及其子类支持触发器功能,
调度器:Quartz提供了Scheduler接口,将工作任务和触发器绑定,保证任务可以在正确的时间执行
cron表达式
示例
一 框架基础
类1 任务类
public class RemindJob implements Job {
/**
* 业务实现
*
* 开发时间:2016-3-2 下午6:10:06
*
* @author:
* @param context
* @throws JobExecutionException
*/
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("您有一封邮件没有阅读。");
}
}
调用类
public class Demo implements Serializable {
/**
* 入口函数值
*
* 开发时间:2016-3-2 下午6:11:59
*
* @author:
* @param:args-传入的参数
* @return void
* @param args
*/
public static void main(String[] args) {
try {
// 创建job实例
JobDetail jobDetail = new JobDetail("刘", "g1",
RemindJob.class);
// 创建一个触发器
SimpleTrigger trigger = new SimpleTrigger("remindJobTrigger",
SimpleTrigger.REPEAT_INDEFINITELY, 3000);
// 设置启动时间
trigger.setStartTime(new Date(System.currentTimeMillis() + 15000));
// 创建调度者工厂
SchedulerFactory factory = new StdSchedulerFactory();
// 创建一个调度者
Scheduler scheduler = factory.getScheduler();
// 注册并进行调度
scheduler.scheduleJob(jobDetail, trigger);
// 启动调度 多线程 分出一个线程执行此任务
scheduler.start();
// sleep10s
Thread.sleep(25000);
// 关闭调度
scheduler.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
}
代码二 时间配置 传参 Map
类1
public class RemindJob implements Job {
/**
* 业务实现
*
* 开发时间:2016-3-2 下午6:10:06
*
* @author:
* @param context
* @throws JobExecutionException
*/
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
// 数据集合
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
// 真实姓名
String trueName = dataMap.getString("trueName");
System.out.println(trueName + ",您有一封邮件没有阅读。");
}
}
类2
public class Demo implements Serializable {
/**
* 入口函数值
*
* 开发时间:2016-3-2 下午6:11:59
*
* @author:
* @param:args-传入的参数
* @return void
* @param args
*/
public static void main(String[] args) {
try {
// 创建job实例
JobDetail jobDetail = new JobDetail("remindJob", "g1",
RemindJob.class);
// 数据集合
JobDataMap dataMap = jobDetail.getJobDataMap();
// 存储姓名
dataMap.put("trueName", "张三");
// 创建一个触发器
CronTrigger trigger = new CronTrigger("remindJobTrigger", "g1",
"0/3 * * ? * * *");
// 设置启动时间
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
// 创建调度者工厂
SchedulerFactory factory = new StdSchedulerFactory();
// 创建一个调度者
Scheduler scheduler = factory.getScheduler();
// 注册并进行调度
scheduler.scheduleJob(jobDetail, trigger);
// 启动调度
scheduler.start();
// sleep10s
Thread.sleep(10000);
// 关闭调度
scheduler.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
}
项目三 实例 插入 移除
类1
public class RemindJob implements Job {
/**
* 业务实现
*
* 开发时间:2016-3-2 下午6:10:06
*
* @author:
* @param context
* @throws JobExecutionException
*/
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
// 数据集合
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
// 真实姓名
String trueName = dataMap.getString("trueName");
System.out.println(trueName + ",您有一封邮件没有阅读。");
}
}
类2
public class Demo implements Serializable {
/**
* 入口函数值
*
* 开发时间:2016-3-2 下午6:11:59
*
* @author:
* @param:args-传入的参数
* @return void
* @param args
*/
public static void main(String[] args) {
try {
// 创建job实例
JobDetail jobDetail = new JobDetail("remindJob", "g1",
RemindJob.class);
// 数据集合
JobDataMap dataMap = jobDetail.getJobDataMap();
// 存储姓名
dataMap.put("trueName", "张三");
// 创建一个触发器
CronTrigger trigger = new CronTrigger("remindJobTrigger", "g1",
"0/3 * * ? * * *");
// 设置启动时间
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
// 创建调度者工厂
SchedulerFactory factory = new StdSchedulerFactory();
// 创建一个调度者
Scheduler scheduler = factory.getScheduler();
// 创建Calendar
AnnualCalendar cal = new AnnualCalendar();
// 构建日期
Calendar myCal1 = GregorianCalendar.getInstance();
myCal1.set(Calendar.MONTH, Calendar.JUNE);
myCal1.set(Calendar.DATE, 21);
Calendar myCal2 = GregorianCalendar.getInstance();
myCal2.set(Calendar.MONTH, Calendar.JUNE);
myCal2.set(Calendar.DATE, 20);
// 设定要排除的日期 如果设置为false则为包含
cal.setDayExcluded(myCal1, true);
cal.setDayExcluded(myCal2, true);
// 注册Calendar replace,updateTriggers
// 如果updateTriggers为true,Scheduler中已引用Calendar的Trigger将得到更新。
scheduler.addCalendar("calendar1", cal, true, true);
// 和触发器进行关联
trigger.setCalendarName("calendar1");
// 注册并进行调度
scheduler.scheduleJob(jobDetail, trigger);
// 启动调度
scheduler.start();
// sleep1000s
Thread.sleep(2000);
// 添加新的排除 此为下面的方法 插入进来
replaceAndUpdate(scheduler, trigger);
// sleep1000s
Thread.sleep(1000000);
// 关闭调度
scheduler.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 添加新的排除
*
*
* 开发时间:2016-3-2 下午6:40:53
*
* @author:
* @param scheduler
* @param trigger
*/
protected static void replaceAndUpdate(Scheduler scheduler,
CronTrigger trigger) {
try {
// 创建Calendar
AnnualCalendar cal = new AnnualCalendar();
// 构建日期
Calendar myCal1 = GregorianCalendar.getInstance();
myCal1.set(Calendar.MONTH, Calendar.JUNE);
myCal1.set(Calendar.DATE, 22);
Calendar myCal2 = GregorianCalendar.getInstance();
myCal2.set(Calendar.MONTH, Calendar.JUNE);
myCal2.set(Calendar.DATE, 23);
// 设定要排除的日期 如果设置为false则为包含
cal.setDayExcluded(myCal1, true);
cal.setDayExcluded(myCal2, true);
// 注册Calendar replace,updateTriggers
// 如果updateTriggers为true,Scheduler中已引用Calendar的Trigger将得到更新。 true覆盖 立即执行
scheduler.addCalendar("calendar1", cal, true, true);
// 和触发器进行关联
trigger.setCalendarName("calendar1");
} catch (Exception e) {
e.printStackTrace();
}
}
}
1 0
- Quartz
- quartz
- Quartz
- Quartz
- quartz
- quartz
- quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- Quartz
- quartz
- Quartz
- Quartz
- quartz
- sql语句获取想要字段中值与实际值不一样时的拼写
- 安卓SQLite打开数据库的错误
- Linux UDP套接字编程
- 【LeetCode】1. Two Sum
- imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2)
- Quartz
- 02JVM-内存溢出
- Objective-C类的静态数据成员
- 提升树GBDT 详解
- Why is it faster to process a sorted array than an unsorted array?
- Java中Math.pow( )的使用
- 内存越界
- 使用router.post()无法获取到req.body
- windows下mongodb搭建和使用