quartz定时调度使用感想
在每月最后一天对这个月的所有数据统计过程中,发现用timer有很明显的问题,因为间隔时间随着月份的不同而不一致。后来在网上认识了quartz定时调度。
没有用网上大多数人用的spring结合quartz。而是单纯的通过tomcat自动启动servlet,调用quartz服务。
最初的时候到官网下载quartz2.1.6包,按照网上的例子试验才发现一个问题,部分代码如下,
public void init() throws ServletException { try { //①创建一个JobDetail实例,指定SimpleJob JobDetail jobDetail = new JobDetail("job1_1","jGroup1", PreOperationJob.class); //②通过SimpleTrigger定义调度规则:马上启动,每2秒运行一次,共运行100次 CronTrigger cronTrigger=new CronTrigger("trigger1_1","tgroup1"); String cronExpresion=this.getInitParameter("cronExpresion"); cronTrigger.setCronExpression(cronExpresion); //③通过SchedulerFactory获取一个调度器实例 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.scheduleJob(jobDetail, cronTrigger);//④ 注册并进行调度 scheduler.start();//⑤调度启动 } catch (Exception e) { e.printStackTrace(); } }应用这个例子,才发现有个问题,不能实例化JobDetail这个类,
JobDetail jobDetail = new JobDetail("job1_1","jGroup1", PreOperationJob.class);
后来找原因,打开quartz2.1.6的源码,才发现JobDetail没提供该构造方法。最后下载quartz1.8.6,打开源码发现这个里面的JobDetail这个类提供了该构造方法,后果断用换quartz1.8.6.解决成功。