/**
* 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("超过有效期的手册账册已暂不能使用!");
}
}
}