如何在Spring MVC中设置优先级quartz触发器

时间:2016-06-08 09:20:09

标签: java spring spring-mvc quartz-scheduler crontrigger

我使用带有cron表达式的Quartz调度程序,在我的Java Spring MVC应用程序中定期执行的任务很少。在我的root-context.xml文件中,我有以下内容:

<!--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.有没有办法做到这一点。

1 个答案:

答案 0 :(得分:1)

CronTriggerFactoryBean有一个名为priority的属性(spring-context-support:4.2.4.RELEASE)。这又用于设置CronTriggerImpl的优先级,其javadoc表示:

  

触发器的优先级充当平局,如果两个触发器具有相同的预定触发时间,那么Quartz将尽力为具有较高优先级的触发器提供对工作线程的首次访问。

     

如果未明确设置,则默认值为5.

然后,如果两个进程的线程池中有足够的线程,我不确定优先级是否会产生任何影响(取决于优先级是否也分配给实际的工作线程)。 / p>