作业未使用 triggers_jobs.xml 配置文件运行

发布于 2024-12-28 13:26:45 字数 6044 浏览 2 评论 0原文

我的工作没有运行。

我使用quartz 2.1.1版本,我的servlet是tomcat。 当在 triggers_jobs.xml 中写入设置时,我必须运行作业。 该文件如下所示:

<?xml version='1.0' encoding='utf-8'?>
<quartz>
  <job>
    <job-detail>
      <name>my_job1</name>
      <group>my_group</group>
      <job-class>com.crossreader.webapi.scheduler.ScheduledTasksJob</job-class>
    </job-detail>

      <trigger>
          <cron>
              <name>dailyTrigger</name>
              <group>my_group</group>
              <job-name>my_job1</job-name>
              <job-group>my_group</job-group>
              <!-- trigger that fires every 5 minutes -->
              <cron-expression>0 0/5 * * * _</cron-expression>
          </cron>
      </trigger>
  </job>
</quartz>

我创建了一个如下所示的 servlet:

public class SchedulerServlet extends GenericServlet {

  static private final CRLogger LOG = CRLogger.createCRLogger();

  public void init(ServletConfig servletConfig) throws ServletException {
    super.init(servletConfig);

try{
      LOG.info("........ Start SchedulerManager ..............");
      // Grab the Scheduler instance from the Factory
      SchedulerFactory schedulerFactory = new StdSchedulerFactory();
      final Scheduler scheduler = schedulerFactory.getScheduler();

      // start the scheduler
      scheduler.start();

    } catch(SchedulerException e) {
      e.printStackTrace();
    }
  }
}

我创建了一个继承自 Job 的 ScheduledTasksJob 类,它看起来像这样:

public class ScheduledTasksJob implements Job{
  public ScheduledTasksJob() {
    LOG.info("........ ScheduledTasksJob Starts - constructor ..............");
  }

  public void execute(JobExecutionContext context) throws JobExecutionException {

    try{
      MyServletClass.runAllJobs();
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

这是我的quartz.properties 文件:

# This scheduler's name will be "MyQuartzScheduler"
org.quartz.scheduler.instanceName: MyQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
# There are 3 threads in the thread pool, which means that a maximum of 3 jobs can be run simultaneously.
org.quartz.threadPool.threadCount: 3

# All of Quartz's data, such as details of jobs and triggers, is held in memory (rather than in a database).
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = jobs/triggers_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true

这是我在 LOG 文件中得到的内容:

INFO: QuartzInitializer: Quartz Initializer Servlet loaded, initializing Scheduler...
[11:38:10] [hread-1] [INFO] [StdSchedulerFactory] > Using default implementation for ThreadExecutor
[11:38:10] [hread-1] [INFO] [SimpleThreadPool] > Job execution threads will use class loader of thread: pool-2-thread-1
[11:38:10] [hread-1] [INFO] [SchedulerSignalerImpl] > Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[11:38:10] [hread-1] [INFO] [QuartzScheduler] > Quartz Scheduler v.2.1.1 created.
[11:38:10] [hread-1] [INFO] [RAMJobStore] > RAMJobStore initialized.
[11:38:10] [hread-1] [INFO] [QuartzScheduler] > Scheduler meta-data: Quartz Scheduler (v2.1.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.

[11:38:10] [hread-1] [INFO] [StdSchedulerFactory] > Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[11:38:10] [hread-1] [INFO] [StdSchedulerFactory] > Quartz scheduler version: 2.1.1
[11:38:10] [hread-1] [INFO] [QuartzScheduler] > Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[11:38:10] [rThread] [DEBUG] [QuartzSchedulerThread] > batch acquisition of 0 triggers
??? 22, 2012 11:38:10 AM org.apache.catalina.core.ApplicationContext log
INFO: QuartzInitializer: Scheduler has been started...
??? 22, 2012 11:38:10 AM org.apache.catalina.core.ApplicationContext log
INFO: QuartzInitializer: Storing the Quartz Scheduler Factory in the servlet context at key: org.quartz.impl.StdSchedulerFactory.KEY
[11:38:10] [hread-1] [INFO] [SchedulerManager] > ........ Start SchedulerManager ..............
[11:38:10] [hread-1] [INFO] [QuartzScheduler] > Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[11:38:10] [rThread] [DEBUG] [QuartzSchedulerThread] > batch acquisition of 0 triggers
??? 22, 2012 11:38:10 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
??? 22, 2012 11:38:10 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
??? 22, 2012 11:38:10 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 25379 ms
Connected to server
[11:38:11] [Timer-0] [DEBUG] [UpdateChecker] > Checking for available updated version of Quartz...
[11:38:12] [Timer-0] [INFO] [UpdateChecker] > New Quartz update(s) found: 2.1.2 [http://www.terracotta.org/kit/reflector?kitID=default&pageID=QuartzChangeLog]
[11:38:34] [rThread] [DEBUG] [QuartzSchedulerThread] > batch acquisition of 0 triggers
.
.
.
[11:44:46] [rThread] [DEBUG] [QuartzSchedulerThread] > batch acquisition of 0 triggers

为什么 ScheduledTasksJob 类没有运行?

感谢您的帮助。

My jobs not running.

I use version 2.1.1 of quartz and my servlet is tomcat.
I have to run jobs when there setting written in triggers_jobs.xml.
The file looks like this:

<?xml version='1.0' encoding='utf-8'?>
<quartz>
  <job>
    <job-detail>
      <name>my_job1</name>
      <group>my_group</group>
      <job-class>com.crossreader.webapi.scheduler.ScheduledTasksJob</job-class>
    </job-detail>

      <trigger>
          <cron>
              <name>dailyTrigger</name>
              <group>my_group</group>
              <job-name>my_job1</job-name>
              <job-group>my_group</job-group>
              <!-- trigger that fires every 5 minutes -->
              <cron-expression>0 0/5 * * * _</cron-expression>
          </cron>
      </trigger>
  </job>
</quartz>

I created a servlet that looks like this:

public class SchedulerServlet extends GenericServlet {

  static private final CRLogger LOG = CRLogger.createCRLogger();

  public void init(ServletConfig servletConfig) throws ServletException {
    super.init(servletConfig);

try{
      LOG.info("........ Start SchedulerManager ..............");
      // Grab the Scheduler instance from the Factory
      SchedulerFactory schedulerFactory = new StdSchedulerFactory();
      final Scheduler scheduler = schedulerFactory.getScheduler();

      // start the scheduler
      scheduler.start();

    } catch(SchedulerException e) {
      e.printStackTrace();
    }
  }
}

And I created a ScheduledTasksJob class that is inheriting from Job, and it looks like this:

public class ScheduledTasksJob implements Job{
  public ScheduledTasksJob() {
    LOG.info("........ ScheduledTasksJob Starts - constructor ..............");
  }

  public void execute(JobExecutionContext context) throws JobExecutionException {

    try{
      MyServletClass.runAllJobs();
    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

This is my quartz.properties file:

# This scheduler's name will be "MyQuartzScheduler"
org.quartz.scheduler.instanceName: MyQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
# There are 3 threads in the thread pool, which means that a maximum of 3 jobs can be run simultaneously.
org.quartz.threadPool.threadCount: 3

# All of Quartz's data, such as details of jobs and triggers, is held in memory (rather than in a database).
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = jobs/triggers_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true

This is what I get in the LOG file:

INFO: QuartzInitializer: Quartz Initializer Servlet loaded, initializing Scheduler...
[11:38:10] [hread-1] [INFO] [StdSchedulerFactory] > Using default implementation for ThreadExecutor
[11:38:10] [hread-1] [INFO] [SimpleThreadPool] > Job execution threads will use class loader of thread: pool-2-thread-1
[11:38:10] [hread-1] [INFO] [SchedulerSignalerImpl] > Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
[11:38:10] [hread-1] [INFO] [QuartzScheduler] > Quartz Scheduler v.2.1.1 created.
[11:38:10] [hread-1] [INFO] [RAMJobStore] > RAMJobStore initialized.
[11:38:10] [hread-1] [INFO] [QuartzScheduler] > Scheduler meta-data: Quartz Scheduler (v2.1.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.

[11:38:10] [hread-1] [INFO] [StdSchedulerFactory] > Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[11:38:10] [hread-1] [INFO] [StdSchedulerFactory] > Quartz scheduler version: 2.1.1
[11:38:10] [hread-1] [INFO] [QuartzScheduler] > Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[11:38:10] [rThread] [DEBUG] [QuartzSchedulerThread] > batch acquisition of 0 triggers
??? 22, 2012 11:38:10 AM org.apache.catalina.core.ApplicationContext log
INFO: QuartzInitializer: Scheduler has been started...
??? 22, 2012 11:38:10 AM org.apache.catalina.core.ApplicationContext log
INFO: QuartzInitializer: Storing the Quartz Scheduler Factory in the servlet context at key: org.quartz.impl.StdSchedulerFactory.KEY
[11:38:10] [hread-1] [INFO] [SchedulerManager] > ........ Start SchedulerManager ..............
[11:38:10] [hread-1] [INFO] [QuartzScheduler] > Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[11:38:10] [rThread] [DEBUG] [QuartzSchedulerThread] > batch acquisition of 0 triggers
??? 22, 2012 11:38:10 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
??? 22, 2012 11:38:10 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
??? 22, 2012 11:38:10 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 25379 ms
Connected to server
[11:38:11] [Timer-0] [DEBUG] [UpdateChecker] > Checking for available updated version of Quartz...
[11:38:12] [Timer-0] [INFO] [UpdateChecker] > New Quartz update(s) found: 2.1.2 [http://www.terracotta.org/kit/reflector?kitID=default&pageID=QuartzChangeLog]
[11:38:34] [rThread] [DEBUG] [QuartzSchedulerThread] > batch acquisition of 0 triggers
.
.
.
[11:44:46] [rThread] [DEBUG] [QuartzSchedulerThread] > batch acquisition of 0 triggers

Why class ScheduledTasksJob not running?

Thanks for the help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文