Quartz的具体任务类(实现Job接口)无法注入业务逻辑service对象的问题

/**
 * Quartz定时任务Impl
 *
 * @author ZhangChao
 * @date 2019/6/10 13:24
 * @since 1.0.0
 */
@Remote
@Transactional(rollbackFor=Exception.class)
@Service
public class QuartzServiceImpl implements QuartzService {

    @Autowired
    private QuartzTaskManager quartzTaskManager;

    /**
     * 增加任务
     * @param scheduleJob
     * @return
     */
    @Override
    public ResponseMessage addJob(ScheduleJob scheduleJob) {
        String allClass = "com.yorma.enterprise.zbus.provider.config.quartz."+scheduleJob.getClazz();
        String result = null;
        try {
            result = quartzTaskManager.addJob(scheduleJob, getClass(allClass).getClass());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ResponseMessage(true, result);
    }

}
/**
     * 获取任务调度类
     * @param classname
     * @return
     * @throws Exception
     */
    public static BaseJob getClass(String classname) throws Exception {
        Class<?> class1 = Class.forName(classname);
        return (BaseJob)class1.newInstance();
    }

通过newInstance()获取的具体任务执行类,所以在Job类里无法自动注入Service:

/**
 * 更新手册账册可用状态
 *
 * @author ZHANGCHAO
 * @date 2019/11/12 15:53
 * @since 1.0.0
 */
@Component
public class QuartzUpdatePtsEmsStatusJob implements BaseJob {
    private static final Logger logger = LoggerFactory.getLogger(QuartzUpdatePtsEmsStatusJob.class);

    @Autowired
    private PtsEmsHeadService ptsEmsHeadService;  //这里注入的是Null !!!

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        ResponseMessage responseMessage = ptsEmsHeadService.updateStatusExpiredPtsEms();
        if (responseMessage.getSuccess()){
            logger.info("超过有效期的手册账册已暂不能使用!");
        }
    }
}

要改成如下这样的,@Autowired直接在set方法上:


/**
 * 更新手册账册可用状态
 *
 * @author ZHANGCHAO
 * @date 2019/11/12 15:53
 * @since 1.0.0
 */
@Component
public class QuartzUpdatePtsEmsStatusJob implements BaseJob {
    private static final Logger logger = LoggerFactory.getLogger(QuartzUpdatePtsEmsStatusJob.class);

    private static PtsEmsHeadService ptsEmsHeadService;
    @Autowired
    public void setPtsEmsHeadService(PtsEmsHeadService ptsEmsHeadService) {
        QuartzUpdatePtsEmsStatusJob.ptsEmsHeadService = ptsEmsHeadService;  //PtsEmsHeadService 可以正常注入了!!
    }

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        ResponseMessage responseMessage = ptsEmsHeadService.updateStatusExpiredPtsEms();
        if (responseMessage.getSuccess()){
            logger.info("超过有效期的手册账册已暂不能使用!");
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值