Quartz 中的job类中存在注入的bean 使用时注入的bean为null的具体解决代码
时间: 2024-03-22 19:38:52 浏览: 59
在 Quartz 中,Job 类是通过反射创建的,因此无法通过 Spring 的自动注入来注入依赖的 bean。解决这个问题的方法是在 Job 类中手动获取 Spring 的 ApplicationContext,然后通过 ApplicationContext 获取需要的 bean。
以下是示例代码:
```java
public class MyJob implements Job {
private MyService myService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
ApplicationContext applicationContext = (ApplicationContext) context.getJobDetail().getJobDataMap().get("applicationContext");
myService = applicationContext.getBean(MyService.class);
// 使用 myService 执行任务
}
}
```
然后在调度任务时,需要将 ApplicationContext 作为 JobDataMap 的一部分传递给 Job 类:
```java
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity("myJob")
.usingJobData("applicationContext", applicationContext)
.build();
```
这样,当 Quartz 调用 MyJob 类时,就能够通过 ApplicationContext 获取到需要的 bean。
阅读全文