最近要再次使用quartz,下载来发现是2.1.7版本,记得以前用的是1.X版本的,网上找了个例子发现类都有问题,感觉2.X版本是个重要升级,结构可能会改变,再次度娘发现quartz2的资源比较少,于是再次从文档研究起来了.
下载地址:http://www.quartz-scheduler.org/downloads,最下面有跳过注册连接,并非一定注册哦
下载后的gz文件解压竟然是个无后缀名的文件,下了2次都是的,于是试着再次把这个解压后的文件名加上后缀.gz,再次解压,终于成功解压出了quartz2.1.7的文件夹...
不多说了,在eclipse中建立java项目,把quartz的quartz.jar和lib目录下的jar放到项目中...运行起来还是没问题的,关键是我想要使用数据库持久化quartz的运行情况...于是找到了example的example13,一个个看example太麻烦了,不是有examples_guide.txt嘛...想怎么用自己看了..
如果要数据库持久化quartz,数据库中要先建立对应的表,项目目录docs\dbTables下有各种数据库初始化sql.
在example13中找到properties文件,改名为quartz.properties,修改起其中的地方时:
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate#==我的是hsqldb,同志们使用的嘛数据库看Other Example Delegates...
然后将# Configure Datasources 下面的数据源配置修改成自己的数据库,配置文件部分就改完了.
把example文件夹中的源文件全部拷贝下来,对了还要log4j.xml放到根目录下,然后就运行ClusterExample.java,控制台输出log信息了,说明你已经成功了...运行完毕,
看看数据库的情况,应该已经记录了,那么在此启动程序,使用下面代码:
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
sched.start();
发现控制台的日志输出信息,还是5个任务,说明调度器已经成功启动了...
最后终结:
1.quartz2的发布时间是2011年,而quartz1.8.6是2012,说明现在是2个版本,应该都可以用.
2.利用数据库持久化调度情况下,再次启动quartz时,会自动加载数据库中任务,不用手动..
3.多看例子和源码,少百度,example13中的例子tigger的时间设置只有SimpleScheduleBuilder,那么cron的tigger时间哪里来呢?找到SimpleScheduleBuilder的父类ScheduleBuilder,ctrl+T,发现CronScheduleBuilder,那么搞个试下
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = newJob(SimpleRecoveryJob.class)
.withIdentity("job_corn", sched.getSchedulerInstanceId()) // put
// triggers
// in
// group named after
// the cluster node
// instance just to
// distinguish (in
// logging) what was
// scheduled from
// where
.requestRecovery() // ask scheduler to re-execute this job
// if it was in progress when the
// scheduler went down...
.build();
CronTrigger trigger = newTrigger()
.withIdentity("triger_corn", sched.getSchedulerInstanceId())
.startAt(new Date())
.withSchedule(CronScheduleBuilder.cronSchedule("0/8 * * * * ?")).build();
sched.scheduleJob(job, trigger);
sched.start();
通过源码,还发现Scheduler其实是单例的.. 并发不用太担心
4.Spring整合下,没搞呢,下篇吧