quartz2 小结

        最近要再次使用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整合下,没搞呢,下篇吧

           

猜你喜欢

转载自charyle.iteye.com/blog/1832117