初识Quartz(2)

上一篇完成了一个Quartz 的小Demo,现在来看看这些code怎么工作的吧。
在我们创建一个Job的时候,对于每个Quartz Job必须有一个实现了org.quartz.job接口的具体类。这个接口仅有一个是要你在Job中实现的方法,execute()方法,它的原型:
pubilc void execute(JobExecutionContext context) throws JobExecutionException;

    当Quartz scheduler确定到时间要激发一个Job时,它就会生成一个Job实例,并调用这个实例的execute()方法。scheduler只管调用execute()方法,而不关心执行的结果,(除Job执行的过程中抛出org.quartz.JobExecutionException)
    这样我们可以在execute()方法中实现我们的业务逻辑,(发送一个电子邮件、调用一个工作流、FTP传一个文件等等)
    在我们的作业Job执行的时候调用execute()方法的同时会传递一个org.quartz.JobExecutionContext上下文变量,在这个变量里封装了Quartz运行时环境和当前执行的Job。我们可以用过这个JobExecutionContext获得到调度器scheduler的信息、trigger的信息等等。
     execute()剩下的code就是我们java的标准code来实现我们的业务逻辑。但是目前我们只是创建了一个Quartz Job,然而怎么处理它们呢?下面我们显然需要为这个Job指定一个它工作的时间表schedule。这时Scheduler 会帮助我们为所有的Job进行注册,必要时还可创建Job实例并执行实例中的execute()方法。 但是Scheduler每次执行实例时都会为Job创建新的实例。那么job中的任何变量在执行结束之后就会消失,但这样也就避免了俩个相同状态的Job实例的并发执行。
   so我们得先通过createScheduler()方法从Scheduler工厂获取Scheduler实例。然后创建JobDetail来“封装”我们自定义的Job:
JobDetail job = JobBuilder.newJob(xxx.class).withIdentity("作业名","组名").build();


public JobDetail(String name,String group,Class jobClass);

对于Trigger我们可以选择SimpleTrigger或CronTrigger来创建一个trigger实例,SimpleTrigger较为简单,而CronTrigger较为复杂而且强大。
最后我们通过Scheduler的SchedulerJob()方法将Job同Scheduler进行关联。
    

猜你喜欢

转载自sydhappy.iteye.com/blog/1731184