我有一个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表达式有问题,还是有任何我失踪的属性?任何帮助将不胜感激。
答案 0 :(得分:4)
答案 1 :(得分:1)
如果您在启动应用程序并在quartz.properties文件中使用数据源时创建触发器,也会发生这种情况。每次启动服务器时,它都会向QRTZ_CRON_TRIGGERS
和QRTZ_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 "%r" %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 "%r" %s %b" resolveHosts="false" />
</Host>
</Engine>
</Service>
</Server>