在我们开发中 我们常用定时任务 每次对任务的 修改 或者启停 在传统的方式里 我们需要修改他和spring的 集成后的 xml 这样 导致很麻烦 或者 我们在动态的 添加一个定时任务 每次也是比较麻烦 更具项目的需要 我们最后把 配置的事情 交给数据库来办 从而每次我们只要维护数据库就好 让我们的工程在 初始化的时候 保证我们定时任务 能够加载到spring既可 这是我们初步的 思考 一下使我们的 实现方式 请看代码
我们把他分为四个步骤:
1.库表设计
2.spring的初始化加载
3.读取数据库的定时配置加载到内存
1.库表如下:
2.spring的加载初始化
实现这个接口 ApplicationListener<ContextRefreshedEvent> 覆写它里面的方法 onApplicationEvent
3.在onApplicationEvent 方法里加载 定时任务那个表到 spring里 这时我们的注意 这几个类 Scheduler StdSchedulerFactory
static Scheduler sched = null;
static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
循环的从数据库里查出 定时表 进而在循环的 添加并启动
// 延迟时间
long delayTime = escm.getEsjcJobDelaytime();
if (delayTime > 0) {
starttime = DateUtil.addHour(starttime, Long.valueOf(delayTime).intValue());
log.debug("DateUtil.addHour(new Date(), Long.signum(delayTime)):"
+ DateUtil.parseDateToString(starttime));
}
// Scheduler.DEFAULT_GROUP
JobDetail jobDetail = null;
try {
jobDetail = new JobDetail(strTriggerName, strGroupName,Class.forName(strJobClassName));
jobDetail.getJobDataMap().put("CronParamName", strParam); // TODO 用来添加参数
Trigger trigger = new CronTrigger(strTriggerName, strGroupName,strQuartzCron);
trigger.setStartTime(starttime);
sched.scheduleJob(jobDetail, trigger);
log.info("启动JOB:" + strTriggerName + ",轮询周期:" + strQuartzCron);
从而我们简单的 操作 就这样结束了 如有问题 可以沟通 因为时间原因写的可能有点模糊 想集群的下的定时任务 在我们后期的项目也有使用,如果大家 在碰到这方面问题 也可以进行沟通 互相学习