Quartzscheduler在本月的第1个和第3个星期一运行

时间:2016-09-15 11:57:11

标签: java cron quartz-scheduler

我想在每个月的第一个和第三个星期一开办一份工作。我使用的是CronTriggerBean,我尝试使用以下表达式进行配置,但我不能工作:

<property name="cronExpression" value="0 0 12 ? * MON#1,3 *" />

<property name="cronExpression" value="0 0 12 ? * MON#1,MON#3 *" />

第一个表达式仅在第一个星期一运行作业,而第二个表达式在第三个星期一运行作业。

有什么办法可以用CronTriggerBean实现这个目的吗?我使用带有XML配置的quartz-1.6.5,所以我不认为我可以配置SimpleTriggerBean来实现它。

2 个答案:

答案 0 :(得分:1)

您将无法使用单个触发器bean执行此操作。您将需要创建2个单独的并使用调度程序注册它们:

<bean id="cronTriggerJobFirstMonday"
            class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="YourQuartzJobBean" />
    <property name="cronExpression" value="0 0 12 ? * MON#1 *" />
</bean>

<bean id="cronTriggerJobThirdMonday"
            class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="yourQuartzJobBean" />
    <property name="cronExpression" value="0 0 12 ? * MON#3 *" />
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTriggerJobFirstMonday" />
            <ref bean="cronTriggerJobThirdMonday" />
        </list>
    </property>
</bean>

答案 1 :(得分:1)

为什么不配置两个触发相同模块的Quartz-cron作业?

每个月的第一个星期一 - 0 0 12? 1/1 MON#1 *

每个月的第二个星期一 - 0 0 12? 1/1 MON#2 *

  • 希望这会简化您的解决方案。