java怎么拦截某个对象
287
2022-09-06
Quartz 基础知识及示例代码(一)
Quartz 是一个完全由 Java 编写的开源企业级作业调度框架。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。
Quartz的基础知识:
1) Job(调度器): 是一个接口,只定义一个方法execute(JobExecutionContext context),execute方法中定义所需要执行的任务。Job运行时的信息保存在JobDataMap实例中,调度应用信息保存在JobExecutionContext类中。
2) JobDetail(任务): JobDetail描述Job的实现类及其它相关信息,如Job名字、描述、关联监听器等,Quartz每次调度Job时接收一个Job实现类。
3)Trigger(触发器): 是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和CronTrigger这两个子类。 如果要求以固定时间间隔执行调度或者只调度一次时,选择SimpleTrigger,否则选择CronTrigger,CronTrigger可以使用Cron表达式配置出复杂的时间调度规则,CronTrigger表达式见Quartz Cron 表达式(二)。
4)Calendar:org.quartz.Calendar是一些日历特定时间点的集合, 一个Trigger可以和多个Calendar关联。
5) Scheduler: 代表一个Quartz的独立运行容器, Trigger和JobDetail可以注册到Scheduler中, 两者在Scheduler中拥有各自的组及名称, 组及名称是Scheduler查找定位容器中某一对象的依据, Trigger的组及名称必须唯一, JobDetail的组和名称也必须唯一。Scheduler定义了多个接口方法, 允许外部通过组及名称访问和控制容器中Trigger和JobDetail。 6) ThreadPool: Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提高运行效率。
示例代码: QuartzJob.java
public class QuartzJob implements Job{ public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("I am QuartzJob!"); }}
QuartzDemo.java
public class QuartzDemo { public static void main(String[] args) { // 通过schedulerFactory获取一个调度器 SchedulerFactory schedulerfactory = new StdSchedulerFactory(); Scheduler scheduler = null; try { // 通过schedulerFactory获取一个调度器 scheduler = schedulerfactory.getScheduler(); // 创建jobDetail实例,绑定Job实现类 // 指明job的名称,所在组的名称,以及绑定job类 JobDetail job = JobBuilder.newJob(QuartzJob.class).withIdentity("JobName", "JobGroupName").build(); // 定义调度触发规则 // SimpleTrigger Trigger trigger=TriggerBuilder.newTrigger().withIdentity("SimpleTrigger","SimpleTriggerGroup") .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(3).withRepeatCount(6)).startNow().build(); // corn表达式 每五秒执行一次 //Trigger trigger = TriggerBuilder.newTrigger().withIdentity("CronTrigger1", "CronTriggerGroup") // .withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ?")).startNow().build(); // 把作业和触发器注册到任务调度中 scheduler.scheduleJob(job, trigger); // 启动调度 scheduler.start(); try { Thread.sleep(100000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 停止调度 scheduler.shutdown(); } catch
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~