如何在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);
    }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值