问题描述:
在Quartz的任务类中,无法使用autowired注入spring bean
@Component
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class XXJob implements Job{
@Autowired
private XxxService xxxService;
}
原因:
Quartz与SpringMVC的context不同,父context无法访问子context中的bean。
解决方法:
使用org.springframework.web.context.support下的一个工具类叫SpringBeanAutowiringSupport,主要用来对Spring Web Application Context之外的类提供@Autowired注入功能
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
完整代码
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
// 使得job对象可以通过注解实现依赖注入
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
//其他操作
}