java定时任务调度工具-quartz
来源:互联网 发布:弯刀对着瓢切菜 知乎 编辑:程序博客网 时间:2024/05/24 06:50
一.核心概念
调度器:执行任务
任务:任务的业务逻辑
触发器:执行任务的时间
二.体系结构
JobDetail :任务描述,装载任务的详细业务逻辑
trigger :触发器,规定任务详细的触发规则
scheduler:任务表,装载JobDetail和trigger,执行任务
三.hello quartz
1.添加maven依赖
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version></dependency>2.创建一个Job
public class HelloJob implements Job{ public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //所需实现的业务逻辑 Date time = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); System.out.println(sdf.format(time)); System.out.println("hello quartz"); }}3.创建一个scheduler
public class HelloScheduler { public static void main(String[] args) throws SchedulerException { //创建任务 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("first_quartz", "group_one").build(); /** 创建触发器 startNow()立即启动 withIntervalInSeconds()间隔多少时间调度任务,单位秒 repeatForever()重复循环任务 */ Trigger trigger = TriggerBuilder.newTrigger().withIdentity("first_quartz_trigger", "group_one"). startNow().withSchedule( SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever() ).build(); //创建调度器 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); }}四.浅谈Job与JobDetail
Job:实现业务逻辑的任务接口
Job在quartz中的生命周期
每次调度器执行job时,它在调用execute方法前会创建一个新的job实例。当调用完成后,关联的job对象实例会被释放,释放的实例会被垃圾回收机制回收。
JobDetail
JobDetail为Job实例提供了许多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,调度器需要借助JobDetail来添加Job实例。
JobDetail属性
name:任务的名字
group:任务所在的组
jobClass:任务的映射
jobDataMap:任务的参数集合
JobDetail部分方法
jobDetail.getKey().getName(); 获取名字
jobDetail.getKey().getGroup(); 获取组名
jobDetail.getJobClass(); 获取job
五.浅谈JobExecutionContext和JobDataMap
1.JobExecutionContext:
当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的execution()方法;
Job能通过JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的明细数据。
2.JobDataMap:
在进行任务调度时JobDataMap存储在JobExecutionContext中,非常方便获取;
JobDataMap可以用来装载任何可序列化的数据对象,当Job实例对象被执行时这些参数对象会传递给它;
JobDataMap实现了JDK的map接口,并且添加了其他的存储基本数据类型。
3.获取JobDataMap的两种方式
传参
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("first_quartz", "group_one") .usingJobData("jobDetail_message", "jobDetail_message") .usingJobData("jobDetail_number",3.14).build();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("first_quartz_trigger", "group_one"). usingJobData("trigger_message", "trigger_message") .usingJobData("trigger_number", 1314d).startNow().withSchedule( SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
从map中获取
//若map中的key相同,则优先打印trigger中的valueJobDataMap jobDataMap = jobExecutionContext.getMergedJobDataMap();String jobDetail = jobDataMap.getString("jobDetail_message");String trigger = jobDataMap.getString("trigger_message");通过setter和getter注入(Quartz框架默认的JobFactory实现类在初始化job实例对象时会自动地调用这些setter方法)
private double jobDetail_number;private double trigger_number;public double getJobDetail_number() { return jobDetail_number;}public void setJobDetail_number(double jobDetail_number) { this.jobDetail_number = jobDetail_number;}public double getTrigger_number() { return trigger_number;}public void setTrigger_number(double trigger_number) { this.trigger_number = trigger_number;}六.触发器
触发器的通用属性:
1.jobkey:标识job实例的标识,触发器被触发时,该指定的job实例会执行。
2.startTime:表示触发器的时间表首次被触发的时间。
3.endTime:表示触发器不再被触发的时间。
//TriggerTrigger trigger = TriggerBuilder.newTrigger().withIdentity("first_quartz_trigger", "group_one"). startAt(start).endAt(end).withSchedule( SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
//JobTrigger trigger1 = jobExecutionContext.getTrigger();System.out.println("startTime" + trigger1.getStartTime());System.out.println("endTime" + trigger1.getEndTime());JobKey jobKey = trigger1.getJobKey();System.out.println(jobKey.getName() + " : "+ jobKey.getGroup());
- Quartz---Java定时任务调度工具
- java定时任务调度工具-quartz
- Java定时任务调度工具详解之Quartz篇
- java定时任务调度工具Timer和Quartz
- java定时调度工具quartz
- 定时任务调度工具之Quartz(一)
- 定时任务调度工具Quartz【进阶】
- Java定时任务调度工具
- Quartz 定时任务调度
- quartz定时任务调度
- Quartz定时任务调度
- Java定时任务调度之Quartz
- Java Quartz 构建定时调度任务
- [译]Java定时任务调度-Quartz Cron 调度
- quartz定时任务调度学习
- quartz实现定时任务调度
- Spring+Quartz定时任务调度
- quartz的定时调度任务
- ROS学习笔记(十一):两台计算机之间的网络通信
- Mybatis $和#的区别
- Android 7.0 Power 按键处理流程
- [bzoj3687]简单题
- C++对象模型之详述C++对象的内存布局
- java定时任务调度工具-quartz
- 物联网仿真 ns-allinone-2.35 安装教程 ubuntu16.04下安装 与使用
- Zookeeper应用场景
- 横划菜单 HorizontalScrollView
- L2-022. 重排链表
- IAT
- 关于EasyUI的combobox的data属性以及它的运作过程
- SpringMVC 拦截器不拦截静态资源的三种处理方式
- 超励志:82岁日本老太自学编程获库克接见