4

我有一个用于工作“digestJob”的 cronTrigger:

<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

4 回答 4

4

在 springsource 论坛上发布了同样的问题,在那里我得到了帮助以找出问题背后的原因:我加载了两次应用程序上下文。后来我从这篇文章中发现了如何避免两次加载上下文。现在一切正常。

于 2010-07-26T07:45:13.837 回答
1

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

于 2016-06-30T18:07:17.773 回答
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>
于 2010-07-20T18:19:55.887 回答
0

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


<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>
于 2021-05-20T06:34:54.277 回答