Java-Spring-quartz :why is the job being fired in a loop?

标签 java spring quartz-scheduler

我正在努力解决一个奇怪的问题,这让我发疯。

我在这里遵循了很好的教程:http://www.mkyong.com/spring/spring-quartz-scheduler-example/

我选择了 cron 触发器,并将其更改为在上午 10:45 运行。但是一旦作业开始,它就会循环并一遍又一遍地打印相同的消息。

这是我的软件:

  • Spring :3.0.5
  • quartz :1.8.5
  • java: 1.6.31

我没有更改上述教程附带的 spring-quartz.xml(除了 cron 表达式)。

已编辑(添加了 beans xml 内容):

<bean id="runMeTask" class="com.test.RunMeTask" />
<bean name="runMeJob"
class="org.springframework.scheduling.quartz.JobDetailBean">

    <property name="jobClass" value="com.test.RunMeJob" />

    <property name="jobDataAsMap">
        <map>
            <entry key="runMeTask" value-ref="runMeTask" />
        </map>
    </property>

</bean>
<!-- Simple Trigger -->
<bean id="simpleTrigger"
    class="org.springframework.scheduling.quartz.SimpleTriggerBean">

    <property name="jobDetail" ref="runMeJob" />
    <property name="repeatInterval" value="5000" />
    <property name="startDelay" value="1000" />

</bean>
<!-- Cron Trigger -->
<bean id="cronTrigger"
    class="org.springframework.scheduling.quartz.CronTriggerBean">

    <property name="jobDetail" ref="runMeJob" />
    <property name="cronExpression" value="* 45 10 * * ?" />

</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="jobDetails">
        <list>
        <ref bean="runMeJob" />
        </list>
    </property>
    <property name="triggers">
        <list>
        <ref bean="cronTrigger" />
        </list>
    </property>
</bean>

编辑(添加代码作业和任务代码):

public class RunMeTask 
{
public void printMe() {
    try{
    System.out.println("Run Me ~");
    }
    catch(Exception e){
        e.printStackTrace();
    }
}
}

这是工作类别

public class RunMeJob extends QuartzJobBean
 {
private RunMeTask runMeTask;

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

protected void executeInternal(JobExecutionContext context){
    try{

    runMeTask.printMe();
    }
    catch(Exception e){
            e.printStackTrace();
    }

}
  } 

最佳答案

为什么你认为这是不正确的?

<property name="cronExpression" value="* 45 10 * * ?" />

此 CRON 表达式的意思是:每天的 10:45 运行作业 每天运行作业每天 10:45 的第二个(第一个星号是第二个)。按设计工作。也许在您的情况下(在给定时间运行一次)SimpleTrigger 更合适(请参阅: SimpleTriggerBean )。

更新:如果您想每天 10:45 运行一次作业,这是正确的表达式:

<property name="cronExpression" value="0 45 10 * * ?" />

关于Java-Spring-quartz :why is the job being fired in a loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379088/

相关文章:

java - 在对象数组中搜索值

java - 这种在Spring Boot应用程序中启动无限循环的方式有什么问题吗?

java - Spring Data Redis JedisConnectionException : Unexpected end of stream 错误

cron - QUARTZ : Both, 不支持星期几和月份参数

java - 单表策略在 Hibernate 中不起作用

java - 你能在初始化时实现一个接口(interface)吗?

java - 如何在自定义查询中加载@ElementCollection?

java - 使用 JDBC JobStore 进行 Quartz 持久作业失火恢复

java - 如何在单个主机上运行quartz作业

java - Java 中 For 循环的停止和继续循环