1. quartz (开源项目)
1. 百度解释 : Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,
它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来
创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。
Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0。
2.个人理解:
quartz 就是做日程管理的;
日程: 什么时间干什么事,执行频率是怎么样,执行频率是依据时间还是依据日历?
概念阐述:
1. job: 就是要干的事情,核心问题; 代码示例:
// 定义一个job对象
JobDetail job = JobBuilder.newJob(Demo2job.class)
.withIdentity("job1", "group1").build();
2. trigger: 这触发器不是job触发器,而是频率触发器,就是说它的定义不是
也不能触发job的执行,而是触发 执行频率的生效,所以确切地说,它不是
一个触发器,而是一个频率定义器, 它解决了 job被执行后的执行频率问题;
//关于这个执行频率的定义还有两种:
1.依据时间 time 使用: SimpleScheduleBuilder(比如说多长时间间隔执行一次) 代码示例:
// 定义一个触发器
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(
SimpleScheduleBuilder.repeatSecondlyForever(1))
.build();
2.依据日历 calender 使用cron(比如说哪个固定的年/周/月/日/时/分/秒 执行;)
// 定义一个触发器
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0 52 19 * * ?") )
.build();
其中 "0 52 19 * * ?" 是CronExpression 就是Cron表达式:
总共7个位:各位表达意义如下:
1. 秒 0-59
2. 分 0-59
3. 时 0-23
4. 月中某一天 0-31(这个不是 0-30 吗?)
5. 月 0-11 或者英文前三个字母大写: FEB 表示二月 , MAR表示三月
6. 周中某一天 1-7 (1表示周日)
7. 年
注意: 1. * 表示通配全选,
2. ? 用在day-of-moth 和 day-of-week中, 表示没有指定,
3. L (last简写) 用在day-of-moth 和 day-of-week中, 表示最后;
4. / 表示增量 : '3/20' 表示每隔20分钟从第三分钟开始; 等价于: '3,23,43'
5. 月中某一天 和 周中某一天,不能同时 用* 也不能同时用?;必须要有一个指定,有一个不指定;
6. 年 可选项(就是说可以不写);
3. scheduler 这个是日程对象:它的作用是:
1.将job 和 trigger 整合起来,也就是将任务 和 任务执行频率整合起来,
就生成了一个日程;代码示例:
scheduler.scheduleJob(job, trigger);
2.当然它 整合以后可以开启日程 也可以关闭日程:
// 调度任务开启
scheduler.start();
// 调度任务结束
scheduler.shutdown();