2016-06-08 51 views
0

我在我的Java Spring MVC應用程序中定期執行Quartz調度器並使用cron表達式來執行少量任務。在我的root-context.xml文件,我有以下幾點:我如何在Spring MVC中設置優先級石英觸發器

<!--Quartz Scheduler Beans --> 

    <bean id="emailNotificationJob" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 

    <property name="targetObject" ref="eventsService" /> 
    <property name="targetMethod" value="sendEventEmailNotification" /> 
    <property name="concurrent" value="false" /> <!-- this is the property to prevent concurrent execution --> 
    </bean> 

    <bean id="deleteWebContentsJob" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 

    <property name="targetObject" ref="webContentDefinitionService" /> 
    <property name="targetMethod" value="deleteWebContents" /> 
    <property name="concurrent" value="false" />  
    </bean> 


    <bean id="saveStaticContentsJob" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 

    <property name="targetObject" ref="webContentDefinitionService" /> 
    <property name="targetMethod" value="saveStaticContents" /> 
    <property name="concurrent" value="false" />  
    </bean> 

    <bean id="emailTrigger" 
       class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 

    <property name="jobDetail" ref="emailNotificationJob" /> 
    <property name="cronExpression" value="0 0/1 * 1/1 * ? *" /> 

    </bean> 

    <bean id="deleteWebContentsTrigger" 
       class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 

    <property name="jobDetail" ref="deleteWebContentsJob"/> 
    <property name="cronExpression" value="0 1 0 1/1 * ? *" /> 

    </bean> 


    <bean id="staticContentsUploadTrigger" 
       class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 

    <property name="jobDetail" ref="saveStaticContentsJob" /> 
    <property name="cronExpression" value="0 0/1 * 1/1 * ? *" /> 

    </bean> 

    <!-- Scheduler factory bean to glue together jobDetails and triggers to Configure Quartz Scheduler --> 
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="jobDetails"> 
      <list> 
       <ref bean="emailNotificationJob" /> 
       <ref bean="deleteWebContentsJob" /> 
       <ref bean="saveStaticContentsJob" /> 
      </list> 
     </property> 

     <property name="triggers"> 
      <list> 
       <ref bean="emailTrigger" /> 
       <ref bean="deleteWebContentsTrigger" /> 
       <ref bean="staticContentsUploadTrigger" /> 
      </list> 
     </property> 
    </bean> 

    <!-- Quartz Bean End --> 

我在應用程序中使用Quartz Scheduler 2.2.1

我想爲各種觸發器設置優先級。在這裏我有兩個觸發器被設置爲以相同的時間間隔觸發。我試圖將其中一個設置爲優先級1,另一個優先級爲2.有沒有辦法做到這一點。

+0

有關[觸發優先級](http://www.quartz-scheduler.org/documentation/quartz-2.x/examples/Example14.html),請參閱石英文檔。 – yishaiz

回答

1

CronTriggerFactoryBean有一個名爲priority(spring-context-support:4.2.4.RELEASE)的屬性。這反過來用來設置CronTriggerImpl的優先級,其中有一個javadoc,指出:

觸發器的優先級作爲一個決勝例如,如果兩個觸發器具有相同的預定發射時間,然後石英將盡最大努力給予具有更高優先級的人首次訪問工作者線程。

如果沒有明確設置,默認值是5

話又說回來,如果有足夠的線程在這兩個進程的線程池,我不知道,如果優先級會產生什麼影響(取決於優先級是否也分配給實際工作線程)。