spring项目启动时从数据库中加载定时任务

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/DWL0208/article/details/82667349
今日推荐