最近工作中用了个任务调度,学的不好,就把它记下来,为了以后参考
一般的 quartz都允许有一个名为quartz.properties的配置文件,通过它可以修改quartz框架运行时的环境:
Quartz提供两种基本作业存储类型。
第一种类型叫做RAMJobStore,它利用通常的内存来持久化调度程序信息。这种作业存储类型最容易配置、构造和运行。对许多应用来说,这种作业存储 已经足够了。然而,因为调度程序信息是存储在被分配给JVM的内存里面,所以,当应用程序停止运行时,所有调度信息将被丢失。
第二种类型称为JDBC作业存储。Quartz提供两种不同的实现,但两种实现一般都需要JDBC驱动程序和后台数据库来持久化调度程序信息。这两种类型 的不同在于你是否想要控制数据库事务或这释放控制给应用服务器例如BEA's WebLogic或Jboss。(这类似于J2EE领域中,Bean管理的事务和和容器管理事务之间的区别)这两种JDBC作业存储是:
· JobStoreTX:当你想要控制事务或工作在非应用服务器环境中是使用 (注:自己控制事务)。
· JobStoreCMT:当你工作在应用服务器环境中和想要容器控制事务时使用 (web服务器控制事务)。
2.quartz里的作业
作业是一个执行任务的java类,当quartz调用某个java任务执行时,实际就是执行该任务对象的execute()方法。定义作业类,要实现Job接口。
示例代码:
3、关于触发器
Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。
典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。
另一方面,如果你有许多复杂的作业调度,那么或许需要CronTrigger。
CronTrigger很强大,使用复杂的时间判断来使用,效果很好。
4.关于调度器
调度器用于将任务与触发器关联起来,一个任务可以关联多个触发器,一个触发器也可以用于控制多个任务。
quartz的调度器由Scheduler接口体现。有如下方法:、
a.void addJob(JobDetail jobDetail,boolean replace): 将给定的JobDetail实例添加到高度器里。
b.Date schduleJob(JobDetail jobDetail,Trigger trigger):将指定的JobDetail实例与给定的trigger关联起来,即使用该trigger来控制该任务。
c.Date scheduleJob(Trigger trigger): 添加触发器trigger来调度作业。
下面来定义一个主程序来调度前面所定义的任务,代码如下:
这样运行这个程序就可以调度前面的作业了。
=========================================
在spring中使用quartz
创建quartz的作业bean 有以下两个方法:
1.利用JobDetailBean 包装QuartzJobBean子类的实例
2.利用MethodInvokingJobDetailFactoryBean工厂Bean包装普通java对象。
采用第一种方法实例如下:
spring 配置如下:
采用第二种方法需要指定以下两个属性:
targetObject:指定包含任务执行体的bean实例
targetMethod:指定将指定bean 实例的该方法包装成任务执行体。
示例代码如下:
spring 配置如下: