Dreampie / jfinal-quartz

jfinal quartz plugin
21 stars 17 forks source link

tomcat下任务重复执行多次 #2

Closed ghostsf closed 7 years ago

ghostsf commented 7 years ago

tomcat下运行,任务同时重复执行了4次。 排查了tomcat本身host和context加载两次,重复执行两次的问题, 那么为什么会重复4次呢?

tomcat启动日志:

[2017-04-10 15:08:23] INFO [org.quartz.simpl.SimpleThreadPool.initialize()]:268 - Job execution threads will use class loader of thread: RMI TCP Connection(3)-127.0.0.1
[2017-04-10 15:08:23] INFO [org.quartz.core.SchedulerSignalerImpl.<init>()]:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[2017-04-10 15:08:23] INFO [org.quartz.core.QuartzScheduler.<init>()]:240 - Quartz Scheduler v.2.2.1 created.
[2017-04-10 15:08:23] INFO [org.quartz.simpl.RAMJobStore.initialize()]:155 - RAMJobStore initialized.
[2017-04-10 15:08:23] INFO [org.quartz.core.QuartzScheduler.initialize()]:305 - Scheduler meta-data: Quartz Scheduler (v2.2.1) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

[2017-04-10 15:08:23] INFO [org.quartz.impl.StdSchedulerFactory.instantiate()]:1339 - Quartz scheduler 'DefaultQuartzScheduler' initialized from an externally provided properties instance.
[2017-04-10 15:08:23] INFO [org.quartz.impl.StdSchedulerFactory.instantiate()]:1343 - Quartz scheduler version: 2.2.1
[2017-04-10 15:08:23] INFO [org.quartz.core.QuartzScheduler.start()]:575 - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[2017-04-10 15:08:23] DEBUG [org.quartz.core.QuartzSchedulerThread.run()]:276 - batch acquisition of 0 triggers
[2017-04-10 15:08:23] INFO [org.quartz.core.QuartzScheduler.start()]:575 - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[2017-04-10 15:08:23] DEBUG [org.quartz.core.QuartzSchedulerThread.run()]:276 - batch acquisition of 0 triggers
[2017-04-10 15:08:23] INFO [cn.dreampie.quartz.QuartzPlugin.startPropertiesJobs()]:102 - This  job  has started,id:3,name:channel3,group:default
[2017-04-10 15:08:23] INFO [cn.dreampie.quartz.QuartzPlugin.startPropertiesJobs()]:102 - This  job  has started,id:3,name:channel3,group:default
[2017-04-10 15:08:23] INFO [cn.dreampie.quartz.QuartzPlugin.startPropertiesJobs()]:102 - This  job  has started,id:3,name:channel3,group:default
[2017-04-10 15:08:23] INFO [cn.dreampie.quartz.QuartzPlugin.startPropertiesJobs()]:102 - This  job  has started,id:3,name:channel3,group:default

日志里显示,似乎这个job start了4次。

使用配置文件创建的job

Dreampie commented 7 years ago

你调试plugin 创建的任务有几个?

ghostsf commented 7 years ago

本来是4个任务,为了测试这个问题我改为了1个任务。 这个问题我知道是什么原因了现在。 原因是tomcat server.xml的配置 配置了两个Host和context,这样host和context都会加载一次jobs的配置文件,每加载一次,定时任务就会开启一次,这样就会让定时任务执行四次了。 目前我是直接修改了server.xml的配置去掉了一个host context的配置,然后将另外一个host设置了 autoDeploy="false" deployOnStartup="false",该问题得以解决。 另外,直接用java代码创建job的方式也会存在此问题(这一点不知是何原因)

Dreampie commented 7 years ago

嗯 好的,插件已经转到 Resty项目下了 https://github.com/Dreampie/Resty ,这个项目不会更新了,如果有影响使用的问题可以即时沟通解决