初始Quartz
Quartz简介Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE和J2SE应用程序相结合,也可以单独使用。Quartz可以用来创建简单或为运行十个、百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或EJBs。Quartz是一个完全有Java编写的开源作业调度框架。主要用到的设计模式有:Builder模..
·
Quartz简介
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE和J2SE应用程序相结合,也可以单独使用。Quartz可以用来创建简单或为运行十个、百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或EJBs。
Quartz是一个完全有Java编写的开源作业调度框架。主要用到的设计模式有:Builder模式、组件模式、Factory模式、链式写法等。三个核心概念:调度器、任务、触发器
第一个Quartz程序
- 创建maven项目,加入Quartz依赖。搜索 https://mvnrepository.com
复制下图中依赖至项目中
- 创建HelloJob类并实现Job接口,在execute方法中编写需要执行的任务。
public class HelloJob implements Job{
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
//打印当前的执行时间,格式为2017-01-01 00:00:00
Date date=new Date();
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间为:"+sf.format(date));
//编写具体的业务逻辑
System.out.println("hello world!");
}
}
- 创建HelloScheduler类,并添加main方法。
public class HelloScheduler {
/**
* @param args
* @throws SchedulerException
* @throws InterruptedException
*/
public static void main(String[] args) throws SchedulerException, InterruptedException {
// TODO Auto-generated method stub
//创建一个JobDetail实例,将该实例与HelloJob Class绑定
JobDetail jobDetail=JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1").build();
//创建一个Trigger实例,定义该Job立即执行,并且每隔两秒钟重复执行一次,直到永远
Trigger trigger=TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")//定义name/group
.startNow() //一旦加入schedular,立即生效
.withSchedule(SimpleScheduleBuilder.simpleSchedule() //使用SimpleTrigger
.withIntervalInSeconds(2) //每隔两秒执行一次
.repeatForever() //一直执行,直到程序死去
).build();
//创建Scheduler实例
SchedulerFactory sFactory=new StdSchedulerFactory();
Scheduler scheduler=sFactory.getScheduler();
//打印当前时间
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("scheduler时间为:"+df.format(date));
scheduler.scheduleJob(jobDetail, trigger);
//启动
scheduler.start();
//运行一段时间关闭
Thread.sleep(10000);
scheduler.shutdown();
}
}
结果如下。
三个核心概念
- Scheduler:调度器,所有的调度都是由它控制。
- Trigger:启动器,定义触发的条件。
- JobDetail & Job : JobDetail 定义的是任务数据,而真正的执行逻辑是在Job中。为什么设计成 JobDetail+Job,而不直接用Job呢?因为任务是有可能并发执行,如果Scheduler直接使用Job,就会存在对同一个Job实例并发访问的问题。而JobDetail & Job 方式,sheduler每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题。
注:Trigger与Job是多对一的关系,即一个Job可以由多个Trigger来启动!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)