Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 石英弹簧CronTrigger触发次数超过配置次数_Java_Spring_Quartz Scheduler_Crontrigger - Fatal编程技术网

Java 石英弹簧CronTrigger触发次数超过配置次数

Java 石英弹簧CronTrigger触发次数超过配置次数,java,spring,quartz-scheduler,crontrigger,Java,Spring,Quartz Scheduler,Crontrigger,我有一个作业“digestJob”的cronTrigger: 以下是我的schedulerFactoryBean配置: <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="digestCronTr

我有一个作业“digestJob”的cronTrigger:


以下是我的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秒触发一次。为什么触发两次?我的cron表达式是否有问题,或者是否缺少任何属性?任何帮助都将不胜感激。

试试以下方法:

    <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>

我在那里发布了帮助,以找出问题背后的原因:
我加载了两次应用程序上下文。后来我发现了如何避免两次加载上下文。现在一切正常。

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

我也有这个问题,我们最终找到了根本原因。 我们的服务器Tomcat设置中存在一些问题,
/…/Tomcat/conf/server.xml

我们的
server.xml
如下所示,同一个tomcat中有2个
定期运行同一个cronJob,但同时写入同一个日志文件和数据库,因此它按计划启动两次,但如果我们手动运行cronJob,它只启动一次。。。
当然,解决方案是删除一个主机,希望这有帮助



...
...

对于下午5:35,正确的cron表达式将是(0 35 17**?),除此之外,cron表达式是完美的。我不在乎这条评论是否会被标记为“太健谈”,我反对我的诚信,因为我为此提出了很多标记。伙计,你救了我一天。工匠,帖子的结尾是“我遇到了这个问题。你能发布你的解决方案吗?谢谢。”。你的最终解决方案是什么?你如何避免这种情况?我通过确保我的工作和触发器有一个名称来避免这种情况。如果不设置此属性,则在应用程序每次启动时都会添加新的触发器。
    <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>
<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>