您可以创建新的名为JobBase例如抽象类,它实现IJob接口,并插入抽象方法: public abstract void ExecuteJob(IJobExecutionContext context);
在JobBase可以实现的方法来执行这样的
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();
}
}
每个作业都将执行JobExecute方法。
public class TestJob :JobBase
{
private ILog logger;
public TeJob(ILog logger):base(logger)
{
}
public override ExecuteJob(IJobExecutionContext context)
{
}
}
假设条件是,利用一些工厂创建工作
停止作业,你会调用方法scheduler.Interrupt(new JobKey(jobName));
我同意我们不能在JAVA中残酷地杀死Quartz中的工作。另外,同意我们可以通过ExecutorService实现相同的功能。出于我的好奇,它提出了另一个问题,为什么Quartz没有实现ExecutorService,以便他们能够为我们提供一种杀死Job的方法?或者Quartz增强功能中有未来计划。感谢您的澄清,请让我知道您的想法。 – Kathir
为什么它没有实现可能是因为它已经被设计为在jvm中提供这种缺乏的替代方案。它可以与旧的jvms协同工作,如果他们实现了ExecutorService,那么quartz将与最近的jvm和强制项目进行链接 – poussma
可能他们可以通过配置提供额外的或广泛的支持。通过这种方式,他们可以实现提供向下兼容性以及新...我是否缺少任何东西?无论如何感谢您的时间和解释... – Kathir