Quartz Job類無法注入spring bean問題解決方法
阿新 • • 發佈:2018-12-30
問題描述:
在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);
//其他操作
}