如何在quartz的job中實現spring的依賴注入

quarz的job通常會依賴業務對象執行操作,通常這些業務對象可以在job初始化時通過dataMap傳入,但是在採用數據庫持久化Job的模式下,這些業務對象會被持久化,所以需要對業務對象進行序列化操作,但由於很多業務對象無法進行序列化,所以持久化的過程就會報錯。
如果能夠在job中實現業務對象的依賴注入就能避開上面的問題,那麼如何實現呢?

下面這種方式就可以輕鬆實現:
只需要在Job的execute方法中加入SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this)即可

示例如下:

@Component
public class DataMigrationJob implements Job {

    @Autowired
    private DataMigrationService dataMigrationService;

    public static final Logger logger = LoggerFactory.getLogger(DataMigrationJob.class);

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 使得job對象可以通過註解實現依賴注入
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

        CronTaskRequestBO migrationInfo = (CronTaskRequestBO) jobExecutionContext.getMergedJobDataMap().get("migrationInfo");
        DataMigrationRequestBO request = getDataMigrationRequestBO(migrationInfo);
        logger.info("start migration task");
        dataMigrationService.startMigration(request);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章