动态配置定时任务

在我们开发中 我们常用定时任务   每次对任务的 修改 或者启停  在传统的方式里 我们需要修改他和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);

 

             从而我们简单的 操作 就这样结束了   如有问题 可以沟通 因为时间原因写的可能有点模糊    想集群的下的定时任务  在我们后期的项目也有使用,如果大家 在碰到这方面问题 也可以进行沟通 互相学习

  

posted on 2018-05-28 10:26  AnkangWenqiang  阅读(577)  评论(0编辑  收藏  举报

导航