Quartz(04) Quartz 基本配置

匿名 (未验证) 提交于 2019-12-03 00:19:01

上一章节地址Quartz(03) cron 表达式
Quartz 为每个job的配置可以硬编码在Java代码里,但是这显然不是理想的效果.比如以前每分钟执行一次的任务,需求变了,需要改成每小时执行一次,那么我们还需要去修改Java代码,重新编,译这是一件很繁琐的事情.本文主要讲解 Quartz 的基本配置和一个重要插件的使用.这样的的话,我们硬编码的部分就是自定义JOB类的编写,其他的都是通过配置文件来完成,非常方便快捷. Quartz的基本配置文件很简单,就是quartz.proerties 文件,存放在class目录下.如果使用插件还需要quartz_jobx.xml的配置,存放位置相同.

源码下载地址

下面是一份quartz.proerties 的配置文件.里面写了注释

# Default Properties file for use by StdSchedulerFactory # to create a Quartz Scheduler Instance, if a different # properties file is not explicitly specified. # #配置scheduler信息,这一部分基本一致,无需修改 org.quartz.scheduler.instanceName=DefaultQuartzScheduler org.quartz.scheduler.rmi.export=false org.quartz.scheduler.rmi.proxy=false org.quartz.scheduler.wrapJobExecutionInUserTransaction=false #线程池的配置 org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount=10 org.quartz.threadPool.threadPriority=5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true  org.quartz.jobStore.misfireThreshold=60000 #Job存储方式的配置 #jobStore 方式为RAM存储没有实现持久化 org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore #===============================================================      #Configure Plugins      #插件的配置 job和trigger的配置可以写在fileNames 定义的xml文件中 #比如这里是配置在quartz_jobx.xml 文件中,该文件也存放在classpath下 # 这样在启动Quartz的时候,Quartz 自动到quartz_jobx.xml 文件中获取#job 和trigger的配置. #===============================================================        org.quartz.plugin.jobInitializer.class=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames=quartz_jobx.xml 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

再看下quartz_jobx.xml 得配置,配置了三个job

<?xml version='1.0' encoding='utf-8'?>   <job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd"      version="2.0">     <schedule>         <job>             <name>my_job1</name>             <group>my_group1</group>             <description>配置定时任务1</description>             <job-class>com.quartz.job.Q1</job-class>             <durability>false</durability>             <recover>false</recover>             <job-data-map>                 <entry>                     <key>param1</key>                     <value>123</value>                 </entry>                 <entry>                     <key>param2</key>                     <value>456</value>                 </entry>             </job-data-map>         </job>         <trigger>             <cron>                 <name>my_trigger1</name>                 <group>my_trigger_group_1</group>                 <job-name>my_job1</job-name>                 <job-group>my_group1</job-group>                 <cron-expression>0/5 * * * * ?</cron-expression>             </cron>         </trigger>         <job>             <name>my_job2</name>             <group>my_group1</group>             <description>配置定时任务2</description>             <job-class>com.quartz.job.Q2</job-class>             <durability>false</durability>             <recover>false</recover>             <job-data-map>                 <entry>                     <key>param1</key>                     <value>ABC</value>                 </entry>                 <entry>                     <key>param2</key>                     <value>DEF</value>                 </entry>             </job-data-map>         </job>         <trigger>             <cron>                 <name>my_trigger2</name>                 <group>my_trigger_group_1</group>                 <job-name>my_job2</job-name>                 <job-group>my_group1</job-group>                 <cron-expression>0/5 * * * * ?</cron-expression>             </cron>         </trigger>         <job>             <name>my_job3</name>             <group>my_group1</group>             <description>配置定时任务3</description>             <job-class>com.quartz.job.Q3</job-class>             <durability>false</durability>             <recover>false</recover>             <job-data-map>                 <entry>                     <key>param1</key>                     <value>ABC</value>                 </entry>                 <entry>                     <key>param2</key>                     <value>DEF</value>                 </entry>             </job-data-map>         </job>         <trigger>             <cron>                 <name>my_trigger3</name>                 <group>my_trigger_group_1</group>                 <job-name>my_job3</job-name>                 <job-group>my_group1</job-group>                 <cron-expression>0/5 * * * * ?</cron-expression>             </cron>         </trigger>     </schedule> </job-scheduling-data>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91

三个实现了job接口的类,这里只贴出Q1

package com.quartz.job;  import java.text.SimpleDateFormat; import java.util.Date;  import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException;  public class Q1 implements Job {      @Override     public void execute(JobExecutionContext context) throws JobExecutionException {         System.out.println("------------------------");         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hh:mm:ss");         System.out.println(sdf.format(new Date()));         System.out.println("------------------------");     }  } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

最后就是如何启动Quartz了,如下代码

package com.quartz.test;  import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.StdSchedulerFactory; import org.quartz.jobs.FileScanJob;  /**  * 使用配置文件来创建任务  *   * 1.quartz.properties 文件配置了Quartz 的基本信息 2.org.quartz.plugin.jobInitializer.class 从fileNames 中获取schedule的配置  *   * @author Administrator  *  */ public class FileConfigTest {     public static void classTest() {         org.quartz.impl.jdbcjobstore.JobStoreTX j = null;         FileScanJob fs;     }      public static void main(String[] args) {         try {             Scheduler shceScheduler = StdSchedulerFactory.getDefaultScheduler();             shceScheduler.start();         } catch (SchedulerException e) {             e.printStackTrace();         }     } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

这样的话,只要运行FileConfigTest 这个类,Quartz就运行了.而且有三个job在执行. 梳理一下运行过程.启动FileConfigTest 的时候,Scheduler shceScheduler = StdSchedulerFactory.getDefaultScheduler(); 代码在创建的时候,Quartz默然去找quartz.proerties 文件,如果在classpath下有我们定义的该文件,那么从该文件中读取配置信息.没有找到用户配置的quartz.proerties文件,那么Quartz就到jar包中找到默认的Quartz配置文件. 当Quartz 读取quartz.proerties 配置文件的时候,发现我们使用的XMLSchedulingDataProcessorPlugin 插件,并且配置了fileNames=quartz_jobx.xml,这个时候,Quartz 就到quartz_jobx.xml 文件下我们对schedule(job and trigger) 的信息,并且实现初始化. 当运行shceScheduler.start();的时候,启动quartz_jobx.xml 中配置的所有任务.

综上所述,我们需要做四件事,1.定义自己Job类,2.配置quartz.proerties文件,3.配置quartz_jobx.xml 文件 4.编写启动Quartz的类.

目录文件大致如下.
下一章节地址Quartz(05) job 的持久化

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!