如何在spring中运行多个schedulers quartz 实例

Posted 再见理想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在spring中运行多个schedulers quartz 实例相关的知识,希望对你有一定的参考价值。

http://wzping.iteye.com/blog/468263

 

1、定义一个JOB 
<!-- 使用pojo来做job,指定pojo和method --> 
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
        <property name="targetObject" ref="pojoObject"/> 
        <property name="targetMethod" value="execute"/> 
    </bean> 

2、定义一个触发时间 
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
        <property name="jobDetail" ref="jobDetail"/> 
        <!--朝九晚五工作时间内每半小时执行一次--> 
        <property name="cronExpression" value="0 0/30 9-17 *,* * ?"/> 
    </bean> 

3、定义管理器 
    <bean name="quartzScheduler" 
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
        <property name="triggers"> 
            <list> 
                <ref bean="cronTrigger"/> 
            </list> 
        </property> 
    </bean> 

一般的应用,只要配置上面这些东东就可以了。 

但如果有大量的定时执行程序,而且有时需要分别启动,这个时候就要用到两个Scheduler, 在spring中是怎么实现的呢?简单地配置两个SchedulerFactoryBean是不解决问题的。原因如下: 

看一下SchedulerFactoryBean的代码,里面一个参数叫做:schedulerName,SchedulerFactoryBean通过 StdSchedulerFactory返回一个具体的Scheduler的。而且每个Scheduler是注册在 SchedulerRepository中的。 
SchedulerRepository中的每个Scheduler都是放在一个MAP中的,根据名字作为KEY。 

private HashMap schedulers; 

这样就比较好办了。 
    <bean name="quartzScheduler" 
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
        <property name="triggers"> 
            <list> 
                <ref bean="cronTrigger"/> 
            </list> 
        </property> 
        <property name="schedulerName"><value>first</value></property> 
    </bean> 
可以声明多个。并设上不同名字,这样scheduler就分有多个实例,可以分别启动、停止了。

以上是关于如何在spring中运行多个schedulers quartz 实例的主要内容,如果未能解决你的问题,请参考以下文章

在Spring中运行SAME cron作业的多个实例

Spring Boot 中的 @Schedule 不会在我们提供的日期运行

如何评估在应用程序中是使用spring batch还是scheduler?

spring boot @Scheduled未生效原因

Spring使用@Scheduled注解配置定时任务

在每个 Spring 计划(@Scheduled)运行之前重置状态