首页 > 解决方案 > cron 调度程序在调度程序的预定时间被调用两次

问题描述

这是 cron 调度程序的 bean 代码。runMeTask 和 runMeJob 的声明

<bean id="runMeTask" class="com.ascent.fieldomobify.cornScheduler.RunMeTask"/>
<bean name="runMeJob" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="com.ascent.fieldomobify.cornScheduler.RunMeJob" />
    <property name="jobDataAsMap">
        <map>
            <entry key="runMeTask" value-ref="runMeTask" />
        </map>
    </property>
</bean>

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="runMeJob"/>
    <property name="cronExpression" value="0 0 13 * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger" />
        </list>
    </property>
</bean>

它直接从bean调度器配置 中调用第一类是RunMeJob

public class RunMeJob extends QuartzJobBean {
private RunMeTask runMeTask;

public void setRunMeTask(RunMeTask runMeTask) {
    this.runMeTask = runMeTask;
  }

protected void executeInternal(JobExecutionContext context)
    throws JobExecutionException {

    try {
        runMeTask.printMe();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

  }
}

在这里我调用控制器的方法,该方法具有逻辑 第二类 RunMeTask

public class RunMeTask{
@Autowired
WorkOrderController workorderContoller; 

public void setWorkorderContoller(WorkOrderController workorderContoller) {
    this.workorderContoller = workorderContoller;
  }


public void printMe() throws ParseException {
    workorderContoller.printSysOut();
  }
}

标签: javaspringspring-mvccron

解决方案


在某些情况下您可以获得该行为,请检查此线程:Java Spring @Scheduled tasks execution two


推荐阅读