用quartz可以实现web或非web模式的定时器
1、配置文件
quartz_job.xml
- <!---->xml version="1.0" encoding="UTF-8"?>
- <quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- overwrite-existing-jobs="true">
-
- <job>
- <job-detail>
- <name>yayaittname>
- <group>CRAWLER_JOB_GROUPgroup>
-
- <description>send task per daydescription>
- <job-class>com.yahaitt.quartz.QuartzSystemjob-class>
-
- <job-data-map allows-transient-data="true">
- <entry>
- <key>usernamekey>
- <value>wujinlivalue>
- entry>
- <entry>
- <key>passwordkey>
- <value>mahaibovalue>
-
- entry>
- job-data-map>
- job-detail>
- <trigger>
- <cron>
- <name>hourTaskJob-triggername>
- <group>CRAWLER_TRIGGER_GROUPgroup>
- <job-name>yayaittjob-name>
- <job-group>CRAWLER_JOB_GROUPjob-group>
-
-
- <cron-expression>1/12 * * * * ?cron-expression>
-
- cron>
- trigger>
- job>
-
-
-
-
-
- quartz>
该定时器实现了每12秒触发类com.yahaitt.quartz.QuartzSystem的execute函数,并通过java-data-map标签来实现参数的传递,如果不需要传递参数,可以将整个java-data-map标签去除。
需要注意的是job-detail与trigger中各子标签间的关系,比如trigger中job-name和job-group要与job-detail中的name和group对应。
可以通过在quartz标签中添加多个job来实现多个定时器的管理。
2、定义org.quartz.Job接口的实现类
QuartzSystem.java
- package com.yahaitt.quartz;
-
- import org.quartz.Job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
-
- public class QuartzSystem implements Job {
-
- public void execute(JobExecutionContext context) throws JobExecutionException {
-
-
- String username = context.getJobDetail().getJobDataMap().getString("username");
- String password = context.getJobDetail().getJobDataMap().getString("password");
- System.out.println("username:" + username);
- System.out.println("password:" + password);
- }
-
- }
通过调用JobExecutionContext 的getJobDetail().getJobDataMap().getString(String paramname)来取得配置文件中定义的参数的值。
当定时器触发时,将执行该类的execute函数。
3、设置监听器
TaskScheduler.java
- package com.yahaitt.quartz;
-
- import java.util.Properties;
-
- import org.apache.log4j.Logger;
- import org.quartz.Scheduler;
- import org.quartz.SchedulerException;
- import org.quartz.SchedulerFactory;
- import org.quartz.impl.StdSchedulerFactory;
- import org.quartz.xml.JobSchedulingDataProcessor;
-
-
- public class TaskScheduler {
-
- private static Logger logger = Logger.getLogger(TaskScheduler.class);
-
- private static Scheduler scheduler;
-
- private String jobsConfigFile = "quartz-jobs.xml";
-
- public TaskScheduler() {
- initScheduler();
- }
-
-
-
-
-
-
- public void initScheduler() {
- try {
- StdSchedulerFactory factory = new StdSchedulerFactory();
-
- Properties properties = new Properties();
- properties.put("org.quartz.scheduler.instanceName","DefaultQuartzScheduler");
- properties.put("org.quartz.scheduler.rmi.export","false");
- properties.put("org.quartz.scheduler.rmi.proxy","false");
- properties.put("org.quartz.scheduler.wrapJobExecutionInUserTransaction","false");
- properties.put("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool");
- properties.put("org.quartz.threadPool.threadCount","20");
- properties.put("org.quartz.threadPool.threadPriority","5");
- properties.put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread","true");
- properties.put("org.quartz.jobStore.misfireThreshold","60000");
- properties.put("org.quartz.jobStore.class","org.quartz.simpl.RAMJobStore");
-
-
-
-
-
-
- factory.initialize(properties);
- SchedulerFactory sf = (StdSchedulerFactory)factory;
- scheduler = sf.getScheduler();
-
-
- } catch (SchedulerException e) {
- e.printStackTrace();
- logger.error(e);
- }
- }
-
-
-
-
-
-
- public void initJobs(String jobsConfig) throws Exception {
-
- this.jobsConfigFile = jobsConfig;
-
- JobSchedulingDataProcessor xmlProcessor = new JobSchedulingDataProcessor();
-
- xmlProcessor.processFileAndScheduleJobs(jobsConfigFile, scheduler, true);
- }
-
-
-
-
-
- public void startScheduler() throws SchedulerException {
-
- scheduler.start();
- }
-
-
-
-
-
- public void shutdownScheduler() throws SchedulerException {
- scheduler.shutdown();
- }
-
-
-
-
- public static void main(String[] args) {
- String jobsConfigfile = "E:/workspace/crawler/conf/quartz_job.xml";
- TaskScheduler scheduler = new TaskScheduler();
- try {
- scheduler.initJobs(jobsConfigfile);
- scheduler.startScheduler();
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
-
- }
分享到:
相关推荐
quartz的web整合简单小例子,比较适合做一些方便的工作,定时器可以轻松搞定。
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成...
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的...
0 0 12 * * ? 每天12点运行 0 15 10 ? * * 每天10:15运行 0 15 10 * * ? 每天10:15运行 0 15 10 * * ? * 每天10:15运行 0 15 10 * * ? 2008 在2008年的每天10:15运行 0 * 14 * * ? 每天14点到15点之间每分钟运行一...
NULL 博文链接:https://medbricom.iteye.com/blog/1782765
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成...
并非应用系统中发生的所有事情都是由用户的动作引起的。...在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例:
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,...
Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过 Spring 来...
我们通常写的timer都是用main方法写的定时器,但同样我们也需要根据服务器启动后定时器也启动的 定时执行任务。不过有个致命伤就是集群方面跟quartz不能比,此方法代码做参考不错,如果要用,那么这个方法在一台...
作业调度框架插件及帮助文档,Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行...
SpringQuartz定时任务Use technologyspring.version 4.3.16quartz.version 2.3.0CN1.RAMJobStore实现定时任务:最佳性能,因为所有数据都保存在内存中,但是应用程序或系统崩溃时,所有信息都会丢失。2.JDBC+...
Spring定时器在SSH框架中的应用,Java的Timer类和OpenSymphony的Quartz来执行调度任务
Quartz是一个功能强大的java计划任务系统,它通过简单的配置和代码完成各种计划人数,定时单机应用到分布式的计算机间远程任务调度,都可以做到。 quartz是一个按照设定的时间规则来调度作业的调度器,比如可以...
Quartz能嵌入到任何独立的应用中运行。 Quartz能在应用服务器或者Servlet容器中实例化,并且能够参与XA事务。 Quartz能够以独立的方式运行(在它自己的Java虚拟机中),可以通过RMI使用