Quartz 中的 Job 和 JobDetail 有什么区别?

Whats the difference between the Job and JobDetail exactly in Quartz?

为什么 Quartz 想出了像 JobDetail 这样的单独的 class?当他们可以 仅容纳 Job class 中的所有属性

是否是作者的实现缺陷?

首先两者都是接口

Job 的实现,即。它唯一的方法 void execute(JobExecutionContext) 是 quartz 调度程序为了执行所需任务而调用的方法

The interface to be implemented by classes which represent a 'job' to be performed.


JobDetails 是与 Job 实现相关的元数据,它们包含对您想要 运行 的 Job 的引用,并允许您提供一些额外的数据给你的 Job

Conveys the detail properties of a given Job instance. JobDetails are to be created/defined with JobBuilder.

Quartz does not store an actual instance of a Job class, but instead allows you to define an instance of one, through the use of a JobDetail.

Jobs have a name and group associated with them, which should uniquely identify them within a single Scheduler.


这里做出的这个设计决定似乎是合理的,因为它遵循 关注点分离 方法。

要执行的 Job 通过其 JobExecutionContext 获取所有输入数据,并且不需要关心任何其他与 quartz 相关的属性,例如作业的名称或组。

然而,quartz 调度器需要一些额外的信息才能运行 你的Job。因此,需要 JobDetail 实现来保存此信息。