1. 程式人生 > >Quartz Job類無法注入spring bean問題解決方法

Quartz Job類無法注入spring bean問題解決方法

問題描述:
在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);

   //其他操作

}