gpt4 book ai didi

quartz-scheduler - 是否可以杀死当前正在运行的 Quartz Job?

转载 作者:行者123 更新时间:2023-12-03 22:27:53 26 4
gpt4 key购买 nike

我记得我们不能终止当前正在运行的 Quartz Job,但我们可以中断并在必要时进行 bool 检查,是否需要进一步进行后续操作。

即使我们实现 InterruptableJob并调用scheduler.interrupt中断作业,当前执行的作业仍将在服务器中运行。

前任:

  • 作业通过 Hibernate 触发了一个命名 SQL 查询,这需要很长时间
  • 已调用第三方服务器,第三方服务器响应时间较长

  • http://neopatel.blogspot.in/2011/05/quartz-stop-job.html
    http://forums.terracotta.org/forums/posts/list/3191.page

    有人可以纠正我的理解并解释我如何杀死或停止“当前”执行的 Job 吗?

    最佳答案

    您可以创建名为 JobBase 的新抽象类,例如实现 IJob 接口(interface)并插入抽象方法:public abstract void ExecuteJob(IJobExecutionContext context);
    在 JobBase 上,您可以像这样实现方法 Execute

    public abstract class JobBase : IJob,IInterruptableJob
    {
    private Thread currentThread;
    private ILog logger;
    public JobBase(ILog logger)
    {
    this.logger=logger;
    }
    public void Execute(IJobExecutionContext context)
    {

    var thread = new Thread(()=>
    {
    try
    {
    this.ExecuteJob(context);
    }
    catch(Exception ex)
    {
    this.logger.ErrorFormat("Unhandled exception {0}",ex.ToString());

    }
    });

    thread.Start();
    this.currentThread = thread;
    this.currentThread.Join();
    }
    public abstract void ExecuteJob(IJobExecutionContext context);

    public void Interrupt()
    {
    currentThread.Abort();
    }
    }

    每个 Job 都会实现 JobExecute 方法。
      public class TestJob :JobBase
    {
    private ILog logger;
    public TeJob(ILog logger):base(logger)
    {
    }

    public override ExecuteJob(IJobExecutionContext context)
    {
    }
    }

    假设使用一些工厂来创建作业

    对于停止作业,您将调用方法 scheduler.Interrupt(new JobKey(jobName));

    关于quartz-scheduler - 是否可以杀死当前正在运行的 Quartz Job?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13081385/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com