通过查看在 spring boot 应用程序中运行 quartz 作业的一些示例,我发现其中许多实际上是使用
Job
注释声明 @Component
:
这似乎完全没用,因为每次触发作业时作业工厂都会创建一个新实例。
我可以在我的应用程序中看到,每次执行作业时都会调用方法 SpringBeanJobFactory.createJobInstance。我删除了
@Component
注释并且它工作得很好,那么将 Job 声明为 spring bean 有什么好处吗?
在某些情况下,您需要将 spring 管理的组件注入到您的作业中,例如一些服务或存储库(以获取一些数据以按作业处理)。在这种情况下,您想创建一个作业作为组件并允许 spring 将所需的 bean 注入其中。在这种情况下,您的作业的超类可以扩展 QuartzJobBean。