版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DWL0208/article/details/82667349
在实际项目开发中,有时候定时任务太多不好管理,而且配置在xml中显杂乱。所以今天写一篇文章介绍如何从数据库中加载定时任务。
1.InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法
2.实现InitializingBean接口
package com.dwl.rep.common.quartz;
import java.util.List;
import org.apache.log4j.Logger;
import org.quartz.CronExpression;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.dwl.rep.pojo.ChartInfo;
import com.dwl.rep.pojo.ReportInfo;
import com.dwl.rep.service.ChartService;
import com.dwl.rep.service.RepService;
/**
* 项目加载后启动定时任务
* @author dwl
*
*/
@Component
public class JobsInitializingBean implements InitializingBean {
private static Logger logger = Logger.getLogger(JobsInitializingBean.class);
@Autowired
private RepService repService;
@Autowired
private ChartService chartService;
@Override
public void afterPropertiesSet() throws Exception {
//获取需要定时更新的报表
List<ReportInfo> reportInfos = repService.getCacheRepInfo();
if(null != reportInfos){
reportInfos.forEach(info->{
//corn表达式校验
if(CronExpression.isValidExpression(info.getCornTime())){
QuartzManager.removeJob(info.getRepId());
QuartzManager.addJob(info.getRepId(), RepJobs.class, info.getCornTime());
logger.info(info.getRepName()+":开始定时任务");
}else{
logger.warn(info.getRepName()+":corn表达式不合法");
}
});
}
//获取需要定时更新的图表
List<ChartInfo> chartInfos = chartService.getChartCacheList();
if(null != chartInfos){
chartInfos.forEach(chart->{
if(CronExpression.isValidExpression(chart.getCornTime())){
QuartzManager.removeJob(chart.getChartId());
QuartzManager.addJob(chart.getChartId(), ChartJobs.class,chart.getCornTime());
logger.info(chart.getChartName()+":开始定时任务");
}else{
logger.warn(chart.getChartName()+":corn表达式不合法");
}
});
}
}
}
3.在spring的xml中注册该bean
<!-- 启动任务调度 -->
<bean id="JobsInitializingBean" class="com.dwl.rep.common.quartz.JobsInitializingBean" ></bean>
4.QuartzManager,调度管理类的使用与介绍。
5.启动项目可以从日志中看到已经从数据库中加载了定时任务。
6.项目的源码与数据库结构https://github.com/daiwenlong/reports