首页 > 代码库 > Quartz.NET总结(三)Quartz 配置

Quartz.NET总结(三)Quartz 配置

  本来来源:http://www.cnblogs.com/zhangweizhong/p/4894354.html

  前两篇文章,已经介绍了Quartz.NET的使用和Cron表达式表达式的写法,今天说一说Quartz的配置,Quartz相关的配置有三个quartz.config、quartz_jobs.xml、log4net.config。其中quartz.config是基本的配置, quartz_jobs.xml是相关的job 任务配置文件,log4net.config则是日志记录的配置。

 

1.  quartz.config ,是Quartz.NET是基本的配置,主要是配置quartz_jobs.xml 的路径,及其他相关的参数。默认的quartz任务配置文件为quartz_jobs.xml,在quartz服务的根目录下,可以通过quartz.config中quartz.plugin.xml.fileNames = ~/quartz_jobs.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
31
32
33
34
35
36
37
38
39
# You can configure your scheduler in either <quartz> configuration section
 
# or in quartz properties file
 
# Configuration section has precedence
 
  
quartz.scheduler.instanceName = ServerScheduler
 
 
# configure thread pool info
 
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
 
quartz.threadPool.threadCount = 10
 
quartz.threadPool.threadPriority = Normal
 
  
 
# job initialization plugin handles our xml reading, without it defaults are used
 
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
 
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
 
  
 
# export this server to remoting context
 
quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
 
quartz.scheduler.exporter.port = 555
 
quartz.scheduler.exporter.bindName = QuartzScheduler
 
quartz.scheduler.exporter.channelType = tcp
 
quartz.scheduler.exporter.channelName = httpQuartz

 

2. quartz_jobs.xml,是相关的job 任务配置文件。主要是有job和trigger两个组要的节点。

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
92
93
<?xml version="1.0" encoding="UTF-8"?>
 
<!-- This file contains job definitions in schema version 2.0 format -->
 
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
 
  <processing-directives>
 
    <overwrite-existing-data>true</overwrite-existing-data>
 
  </processing-directives>
 
  <schedule>
 
    <!--定义Job1-->
 
    <job>
 
      <name>Job1</name>
 
      <group>JobGroup</group>
 
      <description>Quartz Job1</description>
 
      <job-type>Quartz.Net.Jobs.Job1,Quartz.Net.Jobs</job-type>
 
      <durable>true</durable>
 
      <recover>false</recover>
 
    </job>
 
    <!--定义Job2-->
 
    <job>
 
      <name>Job2</name>
 
      <group>JobGroup</group>
 
      <description>Quartz Job2</description>
 
      <job-type>Quartz.Net.Jobs.Job2,Quartz.Net.Jobs</job-type>
 
      <durable>true</durable>
 
      <recover>false</recover>
 
    </job>
 
    <!--定义Job1 触发器 每30秒执行一次Job1任务-->
 
    <trigger>
 
      <cron>
 
        <name>Job1Trigger</name>
 
        <group>JobTriggerGroup</group>
 
        <job-name>Job1</job-name>
 
        <job-group>JobGroup</job-group>
 
        <cron-expression>0/30 * * * * ?</cron-expression>
 
      </cron>
 
    </trigger>
 
    <!--定义Job2 触发器 每分钟执行一次Job2任务-->
 
    <trigger>
 
      <cron>
 
        <name>Job2Trigger1</name>
 
        <group>JobTriggerGroup</group>
 
        <job-name>Job2</job-name>
 
        <job-group>JobGroup</job-group>
 
        <cron-expression>0 * * * * ?</cron-expression>
 
      </cron>
 
    </trigger>
 
  </schedule>
 
</job-scheduling-data>

job 任务,这个节点是用来定义每个具体的任务的,多个任务请创建多个job节点即可。

 

1. name  任务名称,同一个group中多个job的name不能相同,如:<name>Job1</name>

2. group 任务所属分组,用于标识任务所属分组,如:<group>JobGroup</group>

3. job-type 任务的具体类型及所属程序集,实现了IJob接口的包含完整命名空间的类名,程序集名称,如: <job-type>Quartz.Net.Jobs.Job1,Quartz.Net.Jobs</job-type>

 

其余节点按照默认设置即可。

 

trigger 任务触发器,主要定义在什么时间,以何种方式触发任务(job),同一个job可以定义多个trigger ,各个trigger 各自独立的执行调度,每个trigger 中必须定义一种触发器类型(calendar-interval、simple、cron)。

calendar-interval使用比较少,一般都是simple和cron,这里就不做说明。

 

simple 简单任务的触发器,可以调度用于重复执行的任务

1. name 触发器名称,同一个分组中的名称必须不同

2. group 触发器组

3. job-name 要调度的任务名称,该job-name必须和对应job节点中的name完全相同 ,如:<job-name>Job1</job-name>

4. job-group 调度任务(job)所属分组,该值必须和job中的group完全相同,如:<job-group>JobGroup</job-group>

5. repeat-count  任务执行次数,如:<repeat-count>-1</repeat-count>表示无限次执行,<repeat-count>10</repeat-count>表示执行10次

6. repeat-interval 任务触发间隔,单位为毫秒,如:<repeat-interval>10000</repeat-interval> 每10秒执行一次

 

cron 复杂任务触发器,主要使用cron表达式定制任务调度,一般用的较多的都是cron触发器。关于cron表达式的写法,请参考前一篇博客《Quartz.NET总结(二)CronTrigger和Cron表达式》。

1. name 触发器名称,同一个分组中的名称必须不同

2. group 触发器组

3. description 触发器描述

4. job-name 要调度的任务名称,注意该job-name必须和对应job节点中的name完全相同,如:<job-name>Job1</job-name>

5. job-group 调度任务(job)所属分组,该值必须和job中的group完全相同,如:<job-group>JobGroup</job-group>

6. cron-expression 任务执行的cron表达式,如:<cron-expression>0/30 * * * * ?</cron-expression> 每30秒执行一次

 

其余节点按照默认设置即可。

根据实际项目中的需要灵活配置quartz_jobs.xml,不需要再进行额外的修改其他后台代码,实现灵活的多任务调度,需要注意的是修改了quartz_jobs.xml文件后,quartz服务默认不会重新加载该文件,需要重启下服务才行。

 

3. log4net.config

(略),请参考其他关于log4net的配置。

 前两篇文章,已经介绍了Quartz.NET的使用和Cron表达式表达式的写法,今天说一说Quartz的配置,Quartz相关的配置有三个quartz.config、quartz_jobs.xml、log4net.config。其中quartz.config是基本的配置, quartz_jobs.xml是相关的job 任务配置文件,log4net.config则是日志记录的配置。

 

1.  quartz.config ,是Quartz.NET是基本的配置,主要是配置quartz_jobs.xml 的路径,及其他相关的参数。默认的quartz任务配置文件为quartz_jobs.xml,在quartz服务的根目录下,可以通过quartz.config中quartz.plugin.xml.fileNames = ~/quartz_jobs.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
31
32
33
34
35
36
37
38
39
# You can configure your scheduler in either <quartz> configuration section
 
# or in quartz properties file
 
# Configuration section has precedence
 
  
quartz.scheduler.instanceName = ServerScheduler
 
 
# configure thread pool info
 
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
 
quartz.threadPool.threadCount = 10
 
quartz.threadPool.threadPriority = Normal
 
  
 
# job initialization plugin handles our xml reading, without it defaults are used
 
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
 
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
 
  
 
# export this server to remoting context
 
quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
 
quartz.scheduler.exporter.port = 555
 
quartz.scheduler.exporter.bindName = QuartzScheduler
 
quartz.scheduler.exporter.channelType = tcp
 
quartz.scheduler.exporter.channelName = httpQuartz

 

2. quartz_jobs.xml,是相关的job 任务配置文件。主要是有job和trigger两个组要的节点。

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
92
93
<?xml version="1.0" encoding="UTF-8"?>
 
<!-- This file contains job definitions in schema version 2.0 format -->
 
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
 
  <processing-directives>
 
    <overwrite-existing-data>true</overwrite-existing-data>
 
  </processing-directives>
 
  <schedule>
 
    <!--定义Job1-->
 
    <job>
 
      <name>Job1</name>
 
      <group>JobGroup</group>
 
      <description>Quartz Job1</description>
 
      <job-type>Quartz.Net.Jobs.Job1,Quartz.Net.Jobs</job-type>
 
      <durable>true</durable>
 
      <recover>false</recover>
 
    </job>
 
    <!--定义Job2-->
 
    <job>
 
      <name>Job2</name>
 
      <group>JobGroup</group>
 
      <description>Quartz Job2</description>
 
      <job-type>Quartz.Net.Jobs.Job2,Quartz.Net.Jobs</job-type>
 
      <durable>true</durable>
 
      <recover>false</recover>
 
    </job>
 
    <!--定义Job1 触发器 每30秒执行一次Job1任务-->
 
    <trigger>
 
      <cron>
 
        <name>Job1Trigger</name>
 
        <group>JobTriggerGroup</group>
 
        <job-name>Job1</job-name>
 
        <job-group>JobGroup</job-group>
 
        <cron-expression>0/30 * * * * ?</cron-expression>
 
      </cron>
 
    </trigger>
 
    <!--定义Job2 触发器 每分钟执行一次Job2任务-->
 
    <trigger>
 
      <cron>
 
        <name>Job2Trigger1</name>
 
        <group>JobTriggerGroup</group>
 
        <job-name>Job2</job-name>
 
        <job-group>JobGroup</job-group>
 
        <cron-expression>0 * * * * ?</cron-expression>
 
      </cron>
 
    </trigger>
 
  </schedule>
 
</job-scheduling-data>

job 任务,这个节点是用来定义每个具体的任务的,多个任务请创建多个job节点即可。

 

1. name  任务名称,同一个group中多个job的name不能相同,如:<name>Job1</name>

2. group 任务所属分组,用于标识任务所属分组,如:<group>JobGroup</group>

3. job-type 任务的具体类型及所属程序集,实现了IJob接口的包含完整命名空间的类名,程序集名称,如: <job-type>Quartz.Net.Jobs.Job1,Quartz.Net.Jobs</job-type>

 

其余节点按照默认设置即可。

 

trigger 任务触发器,主要定义在什么时间,以何种方式触发任务(job),同一个job可以定义多个trigger ,各个trigger 各自独立的执行调度,每个trigger 中必须定义一种触发器类型(calendar-interval、simple、cron)。

calendar-interval使用比较少,一般都是simple和cron,这里就不做说明。

 

simple 简单任务的触发器,可以调度用于重复执行的任务

1. name 触发器名称,同一个分组中的名称必须不同

2. group 触发器组

3. job-name 要调度的任务名称,该job-name必须和对应job节点中的name完全相同 ,如:<job-name>Job1</job-name>

4. job-group 调度任务(job)所属分组,该值必须和job中的group完全相同,如:<job-group>JobGroup</job-group>

5. repeat-count  任务执行次数,如:<repeat-count>-1</repeat-count>表示无限次执行,<repeat-count>10</repeat-count>表示执行10次

6. repeat-interval 任务触发间隔,单位为毫秒,如:<repeat-interval>10000</repeat-interval> 每10秒执行一次

 

cron 复杂任务触发器,主要使用cron表达式定制任务调度,一般用的较多的都是cron触发器。关于cron表达式的写法,请参考前一篇博客《Quartz.NET总结(二)CronTrigger和Cron表达式》。

1. name 触发器名称,同一个分组中的名称必须不同

2. group 触发器组

3. description 触发器描述

4. job-name 要调度的任务名称,注意该job-name必须和对应job节点中的name完全相同,如:<job-name>Job1</job-name>

5. job-group 调度任务(job)所属分组,该值必须和job中的group完全相同,如:<job-group>JobGroup</job-group>

6. cron-expression 任务执行的cron表达式,如:<cron-expression>0/30 * * * * ?</cron-expression> 每30秒执行一次

 

其余节点按照默认设置即可。

根据实际项目中的需要灵活配置quartz_jobs.xml,不需要再进行额外的修改其他后台代码,实现灵活的多任务调度,需要注意的是修改了quartz_jobs.xml文件后,quartz服务默认不会重新加载该文件,需要重启下服务才行。

 

3. log4net.config

(略),请参考其他关于log4net的配置。

Quartz.NET总结(三)Quartz 配置