2016-10-05 2 views
0

Nous avons 3 travail quartz.net (version 2.3.3) configurée via un fichier xmlquartz.net 2.0 emploi ne pas exécuter en parallèle

IInterruptableJob Job1Class est marquée par DisallowConcurrentExecution et utilisé par les deux Job1 & Job2 (bien sûr avec des données de travail différentes) dans le fichier XML.

IInterruptableJob Job3Class est utilisé par Job3 dans un fichier XML. Quartz.threadPool.threadCount est défini sur 6 via le fichier de configuration.

Sur 3 travaux, 2 travail est en cours d'exécution et nous exigeons que tous les 3 travaux doivent s'exécuter en parallèle, mais nous avons observé plusieurs fois qu'il ne s'exécute pas en parallèle. Alors pourquoi il ne s'exécute pas en parallèle.

Voici l'exemple de fichier 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> 

Répondre

0

Job1 et Job2 ne peut pas fonctionner en parallèle, parce que vous dit que Quartz Job1Class a l'attribut DisallowConcurrentExecution. Cet attribut fonctionne sur les classes, pas sur les objets. Quartz n'exécutera pas plus d'une instance de Job1Class. Pour résoudre ce problème, supprimez l'attribut DisallowConcurrentExecution de votre Job1Class et créez deux sous-classes à partir de Job1Class. Un pour Job1 et un pour Job2. Ensuite, donnez à chaque nouvelle classe l'attribut et cela devrait fonctionner comme vous le souhaitez.