0

我们通过 xml 文件配置了 3 个quartz.net(版本 2.3.3)作业

IInterruptableJob Job1Class 被标记为 DisallowConcurrentExecution 并被 xml 文件中的 Job1 和 Job2(当然具有不同的作业数据)使用。

IInterruptableJob Job3Class 由 Job3 在 xml 文件中使用。

quartz.threadPool.threadCount 通过配置文件设置为 6。

在 3 个作业中,有 2 个作业长时间运行,我们要求所有 3 个作业都应该并行执行,但很多时候我们观察到它不会并行执行。那么为什么它不并行执行。

下面是示例 xml 文件。

<?xml version="1.0" encoding="utf-8" ?>
<job-scheduling-data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://quartznet.sourceforge.net/JobSchedulingData" version="2.0">
  <schedule>
    <job>
      <name>Job1</name>
      <group>JobGroup</group>
      <job-type>Some.Job1.Class, Some.Job1.Class.Assembly</job-type>
      <durable>false</durable>
      <recover>false</recover>
      <job-data-map>
        <entry><key>keys</key><value>values</value></entry>
      </job-data-map>
    </job>
    <trigger>
      <simple>
        <name>Job1Trigger1</name>
        <group>Triggers</group>
        <job-name>Job1</job-name>
        <job-group>JobGroup</job-group>
        <start-time-seconds-in-future>1</start-time-seconds-in-future>
        <repeat-count>0</repeat-count>
        <repeat-interval>1</repeat-interval>
      </simple>
    </trigger>
    <trigger>
      <cron>
        <name>Job1Trigger2</name>
        <group>Triggers</group>
        <job-name>Job1</job-name>
        <job-group>JobGroup</job-group>
        <cron-expression>0 0/1 * * * ?</cron-expression>
      </cron>
    </trigger>
    <job>
      <name>Job2</name>
      <group>JobGroup</group>
      <job-type>Some.Job1.Class, Some.Job1.Class.Assembly</job-type>
      <durable>false</durable>
      <recover>false</recover>
      <job-data-map>
        <entry><key>keys</key><value>values</value></entry>
      </job-data-map>
    </job>
    <trigger>
      <simple>
        <name>Job2Trigger1</name>
        <group>Triggers</group>
        <job-name>Job2</job-name>
        <job-group>JobGroup</job-group>
        <start-time-seconds-in-future>1</start-time-seconds-in-future>
        <repeat-count>1</repeat-count>
        <repeat-interval>1</repeat-interval>
      </simple>
    </trigger>
    <trigger>
      <cron>
        <name>Job2Trigger2</name>
        <group>Triggers</group>
        <job-name>Job2</job-name>
        <job-group>JobGroup</job-group>
        <cron-expression>0 0 2 1/1 * ? *</cron-expression>
      </cron>
    </trigger>
    <job>
      <name>Job3</name>
      <group>JobGroup</group>
      <job-type>Some.Job3.Class, Some.Job3.Class.Assembly</job-type>
      <durable>false</durable>
      <recover>false</recover>
      <job-data-map>
        <entry><key>keys</key><value>values</value></entry>
      </job-data-map>
    </job>
    <trigger>
      <simple>
        <name>Job3Trigger1</name>
        <group>Triggers</group>
        <job-name>Job3</job-name>
        <job-group>JobGroup</job-group>
        <start-time-seconds-in-future>1</start-time-seconds-in-future>
        <repeat-count>1</repeat-count>
        <repeat-interval>1</repeat-interval>
      </simple>
    </trigger>
    <trigger>
      <cron>
        <name>Job3Trigger2</name>
        <group>Triggers</group>
        <job-name>Job3</job-name>
        <job-group>JobGroup</job-group>
        <cron-expression>0/30 * * * * ?</cron-expression>
      </cron>
    </trigger>
  </schedule>
</job-scheduling-data>
4

1 回答 1

0

Job1并且Job2不能并行运行,因为您告诉 QuartzJob1Class具有该DisallowConcurrentExecution属性。此属性适用于类,而不适用于对象。Quartz 不会运行多个 Job1Class 实例。要解决此问题,DisallowConcurrentExecution请从 Job1Class 中删除该属性并从Job1Class. 一个用于 Job1,一个用于 Job2。然后为每个新类赋予属性,它应该像你想要的那样工作。

于 2016-10-10T09:11:17.500 回答