Quartz Spring CronTrigger发射次数超过配置次数

时间:2010-07-20 10:49:21

标签: java spring quartz-scheduler crontrigger

我有一个cronTrigger工作“digestJob”:

<bean id="digestCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="digestJob" />
    <property name="cronExpression" value="0 35 15 * * ?" />
</bean>

这是我的schedulerFactoryBean配置:

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

问题是,digestCronTrigger应该在每天下午5:35被解雇,但它在指定时间被​​解雇了两次。但是,当我使用SimpleTrigger时:

<bean id="digestTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="digestJob" />
        <property name="startDelay" value="0" />
        <property name="repeatInterval" value="10000" />
    </bean>

一切正常,触发器每10秒触发一次。为什么digestCronTrigger被解雇了两次?我的cron表达式有问题,还是有任何我失踪的属性?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

如果您在启动应用程序并在quartz.properties文件中使用数据源时创建触发器,也会发生这种情况。每次启动服务器时,它都会向QRTZ_CRON_TRIGGERSQRTZ_TRIGGERS表写一个新触发器,并在每次重启时使用所有这些触发器。

答案 2 :(得分:0)

试试这个:

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

    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
      <property name="targetObject" ref="actionObject" />
      <property name="targetMethod" value="actionMethod" />
    </bean>

    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetail"/>
        <property name="cronExpression" value="0 15 17 * * ?"/>
    </bean>

答案 3 :(得分:0)

我也有这个问题,我们终于找到了根本原因。 我们的服务器 Tomcat 设置 /.../Tomcat/conf/server.xml 中存在一些问题
我们的server.xml如下所示,同一个tomcat中有2个<Host>定期运行同一个cronJob,但是同时写入同一个日志文件和数据库,所以它触发了两个按计划进行多次,但如果我们手动运行 cronjob,它只会触发一次...
解决办法当然是删除一台Host,希望对大家有帮助


<Server port="8005" shutdown="SHUTDOWN">
    ...
      <Service name="Catalina">
    ...
        <Engine name="Catalina" defaultHost="localhost">
            <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                       prefix="localhost_access_log." suffix=".txt"
                       pattern="%h %l %u %t &quot;%r&quot; %s %b" />
            </Host>
            <Host name="<domain_name>" appBase="webapps" unpackWARs="true" autoDeploy="true">
                <Alias><domain_name></Alias>
                <Valve className="org.apache.catalina.valves.AccessLogValve"
                     directory="logs"   prefix="localhost_access_log." suffix=".txt"
                     pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false" />
            </Host>
        </Engine>
      </Service>
    </Server>