由于项目需求,想要定时请求某个接口,或调用某个函数。于是考虑到使用定时器。
java常用的定时器
- Timer java.util.Timer + java.util.TimerTask
- @Scheduled注解 org.springframework.sprig-context-support
- 线程方式 Thread.sleep()
- ScheduledExecutorService java.util.concurrent.ScheduledExecutorService
- Quartz框架 Quartz官网
Quartz框架可以执行上万个任务
简单使用Quartz
- maven 导入quartz和quartz-jobs包
- 调度器。获取一个实例
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
- 任务类。任务需实现job接口
public class MyJob implements org.quartz.Job {
public void execute(JobExecutionContext context) throws JobExecutionException{}
}
- 任务实例对象。任务实例对象的创建
JobDetail jobDetail = JobBulider.newJob(MyJob.class).withIdentity("job1","group1").build();
- 触发器。
Trigger trigger =TriggerBulider.newTrigger()
.withIdentity("trigger1","group1")
.startNow()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5)
.repeatForever())
.build();
- 调度。关联任务对象和触发器,启动实例
scheduler.scheduleJob(jobDetail,trigger)
scheduler.start();
// scheduler.shutdown();
PS:报错org.quartz.SchedulerConfigException:Thread count must be > 0
需要在resource中新建并配置quartz.properties配置文件:
org.quartz.scheduler.instanceName=MyScheduler
org.quartz.threadPool.threadCount=3
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
Quartz设计模式
Builder模式
Factory模式
组件模式
链式编程
Quartz核心概念
- 任务类Job:Job是想要实现的任务类,必须实现org.quartz.job接口,且需实现接口定义的execute()方法。
- 任务实例JobDetail:JobDetail是一个可执行的工作,它本身可能是有状态的。
- 触发器Trigger:Trigger触发器代表一个调度参数的配置,什么时候去调。频率和时间的设定,Trigger主要包含两种SimpleTrigger和CronTrigger两种。
- 调度器Scheduler:Scheduler是一个计划调度器容器,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger设定的时间按部就班自动去执行。当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率。调度器拥有start、stop、pause、resume(启动、停止、暂停、恢复)等方法
这一篇中,拥有一个简单使用Quartz的例子,
下一篇中,将包括对Quartz的一些详细使用。
欢迎指正,随时修改~