我在想 这个有个间隔时间比如10s 执行一次taskJob这个。
但是如果上次启动了taskJob,十秒后它依然在执行。在这种情况下就不启动新的taskJob。
我应该怎么做?!!!是不是把<bean name="taskJob" class="cn.infohow.kpi.wfmanager.job.service.impl.JobScannerImpl" />这个bean设置成singleton呢??????
<!--作业调度 -->
<bean name="taskJob" class="cn.infohow.kpi.wfmanager.job.service.impl.JobScannerImpl" />
 
    <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject">
           <ref bean="taskJob" />
       </property>
       <property name="targetMethod">
           <value>execute</value>
       </property>
    </bean>
    
    <!-- 配置触发器 -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <!-- 这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下 -->
       <property name="jobDetail">
           <ref bean="methodInvokingJobDetail" />
       </property>
       <!-- 每天的8点到21点每隔1分钟触发,具体说明见附录 -->
       <property name="cronExpression">
           <value>0/10 * 08-21 * * ?</value>
       </property>
    </bean>
    
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <!-- 这里不可以直接在属性jobDetail中引用taskJob,因为他要求的是一个jobDetail类型的对象,所以我们得通过MethodInvokingJobDetailFactoryBean来转一下 -->
       <property name="jobDetail">
           <ref bean="methodInvokingJobDetail" />
       </property>
       <property name="startDelay" value="10000" />
       <property name="repeatInterval" value="2000" /> 
    </bean>
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <!-- 添加触发器 -->
       <property name="triggers">
           <list>
              <ref local="cronTrigger" />
           </list>
       </property>
    </bean>

解决方案 »

  1.   

    可以在调用的那个类里面设置一个参数public static boolean isRun=false;运行时设置为true,据此判断若为true则不调用,不知如何
      

  2.   

    <bean id="methodInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
           <property name="targetObject">
               <ref bean="taskJob" />
           </property>
           <property name="targetMethod">
               <value>execute</value>
           </property>
           property name="concurrent" value="false"/>  
        </bean>
    这样估计就可以了