腾讯云做网站怎么样,百度联盟怎么赚钱,网站建设保报价文档,湖南专业建站按效果付贿使用Quartz实现定时功能 Quartz是一个完全由java编写的开源作业调度框架,具体的介绍可到http://www.opensymphony.com/quartz/官方网站查看。 Quartz的几个核心的接口和类为#xff1a; Job接口#xff1a;自己写的“定时程序”实现此接口的void execute(… 使用Quartz实现定时功能 Quartz是一个完全由java编写的开源作业调度框架,具体的介绍可到http://www.opensymphony.com/quartz/官方网站查看。 Quartz的几个核心的接口和类为 Job接口自己写的“定时程序”实现此接口的void execute(JobExecutionContext arg0)方法,Job还有一类为有状态的StatefulJob接口如果我们需要在上一个作业执行完后根据其执行结果再进行下次作业的执行则需要实现此接口。 Trigger抽象类调度类(Scheduler)在时间到时调用此类再由trigger类调用指定的定时程序。 Quertz中提供了两类触发器为SimpleTrigger,CronTrigger。前者用于实现比较简单的定时功能例如几点开始几点结束隔多长时间执行共执行多少次等后者提供了使用表达式来描述定时功能因此适用于比较复杂的定时描述例如每个月的最后一个周五每周的周四等。 JobDetail类具体某个定时程序的详细描述包括Name,Group,JobDataMap等。 JobExecutionContext类定时程序执行的run-time的上下文环境用于得到当前执行的Job的名字配置的参数等。 JobDataMap类用于描述一个作业的参数参数可以为任何基本类型例如String,float等也可为某个对象的引用. JobListener,TriggerListener接口用于监听触发器状态和作业扫行状态在特写状态执行相应操作。 JobStore类在哪里执行定进程序可选的有在内存中在数据库中。 简单的定时程序 public class TestJob implements Job { public TestJob(){} public void execute(JobExecutionContext arg0) throws JobExecutionException { String name context.getJobDetail().getJobDataMap().getString(name); System.out.println(job executing...name); } } public class QuartzTest { public static void main(String[] args) { QuartzTest test new QuartzTest(); try { test.startSchedule(); } catch (Exception e) { e.printStackTrace(); } } public void startSchedule() throws Exception { Scheduler scheduler StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail new JobDetail(testJob, Scheduler.DEFAULT_GROUP, TestJob.class); //结束时间 long end System.currentTimeMillis() 9000L; //执行10次每3秒执行一次到9秒后结束 SimpleTrigger trigger new SimpleTrigger(test,null,new Date(),new Date(end),10,3000L); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); } } 执行上面这个类基本实现了一个简单的定时程序。但问题是现在这个类只能应用在application中在web环境里执行还需要添加一些配置,例如添加servlet,添加配置文件quartz.properties或者quartz-job.xml(在文件里以配置方式定义triiger,定时描述等。 web应用中使用 在web.xml中添加QuartzInitializerServletQuartz为能够在web应用中使用提供了一个QuartzInitializerServlet和一个QuartzInitializerListener用于在加载web应用时对quartz进行初始化。我在使用servlet时加载成功在使用listener时不成功不知道怎么回事 servlet配置 servlet servlet-nameQuartzInitializer/servlet-name servlet-classorg.quartz.ee.servlet.QuartzInitializerServlet/servlet-class init-param param-nameshutdown-on-unload/param-name param-valuetrue/param-value /init-param init-param param-nameconfig-file/param-name param-valuequartz.properties/param-value /init-param load-on-startup2/load-on-startup /servlet listener配置可以看源码主要的上面的参数配置为context-param,再加一个listener. 上面提到了quartz.properties,这是自行指定的Quartz提供了一个默认的配置文件可以满足基本的j2se应用如果在web应用中我们想把job,trigger配置都写到文件中就需要自己来写并指定在初始化时加载我们自己的quratz.properties位置放在classes下。 # # Configure Main Scheduler Properties # org.quartz.scheduler.instanceName org.quartz.scheduler.instanceId AUTO # # Configure ThreadPool # org.quartz.threadPool.class org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount 3 org.quartz.threadPool.threadPriority 5 # # Configure Plugins # org.quartz.plugin.triggHistory.class org.quartz.plugins.history.LoggingJobHistoryPlugin org.quartz.plugin.jobInitializer.class org.quartz.plugins.xml.JobInitializationPlugin org.quartz.plugin.jobInitializer.fileName /scheduler/quartz_jobs.xml org.quartz.plugin.jobInitializer.overWriteExistingJobs true org.quartz.plugin.jobInitializer.failOnFileNotFound true org.quartz.plugin.jobInitializer.scanInterval 10 quartz要使用插件来加载自己的xml配置文件上边我们指定了在初始化时加载classes/scheduler/quartz_jobs.xml默认的是加载classes/quartz_jobs.xml文件。 quartz_jobs.xml文件 ?xml version1.0 encodingutf-8? quartz job job-detail nametest/name groupDEFAULT/group descriptiontestJobhere/description job-classTestJob/job-class job-data-map allows-transient-datatrue entry keyname/key valuetest/value /entry /job-data-map /job-detail trigger cron nametestCron/name groupDEFAULT/group job-nametest/job-name job-groupDEFALUT/job-group cron-expression0/3 * * * * ?/cron-expression /cron /trigger /job /quartz 上面配置了一个作业并声明一个参数Name配置了一个CronTrigger,每三秒执行一次。如果要配置SimpleTrigger ,可以使用simple标签。 上面与Job对应的类为TestJob源码为 public class TestJob implements Job { public TestJob(){} public void execute(JobExecutionContext context) throws JobExecutionException { String name context.getJobDetail().getJobDataMap().getString(name); System.out.println(job executing...name); } } 在quartz_job.xml文件中还可以指定TriggerListener,JobListener等可以使用trigger-listener,job-listener标签来指定。 由于quartz目前文档不是很多大部分都是看源码。总体看Quartz提供的CronTrigger使用表达式方式描述定时规律这个功能还是很强大的在其源码中有很多例子。 spring已经把quartz集成在一起并进行了封装使用起来还是很方便的。 转载于:https://www.cnblogs.com/liaomin416100569/archive/2010/04/13/9331850.html