动态配置定时任务

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

 

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

  

转载于:https://www.cnblogs.com/AnKangwenqiang/p/9098796.html

Quartz是一个开源的任务调度框架,它允许你方便地在Java应用程序中安排、管理和执行周期性的任务。在Quartz中,动态配置定时任务通常涉及以下几个步骤: 1. **添加依赖**:首先需要将Quartz库添加到项目中,如果你使用Maven,可以在pom.xml文件中添加相应的dependency。 ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. **创建Job和Trigger**:`Job`代表具体的任务,而`Trigger`则用于触发执行该任务的时间规则。你需要编写一个实现了`Job`接口的类,并通过`SimpleTrigger`或更复杂的`CronTrigger`设置执行时间。 ```java import org.quartz.Job; import org.quartz.JobBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.Scheduler; public class MyJob implements Job { // ... 实现Job的方法,比如 execute(JobExecutionContext context) } // 创建并配置简单的触发器 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myJob", "group1") .startAt(Date.now()) // 或者指定未来某个时间点 .repeatForever() // 持续运行直到取消 .build(); ``` 3. **启动Scheduler**:在应用生命周期中,你需要在适当的时候初始化和启动`Scheduler`,将`Job`和`Trigger`注册到其中。 ```java Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); // 启动调度器 ``` 4. **停止或调整任务**:如果需要,你可以随时停止已有的任务,或者修改其触发规则。 5. **动态配置**:虽然Quartz本身是静态配置的,但在实际应用中,你可能会通过Spring等IoC容器或者自定义工具来实现更灵活的动态配置,例如读取配置文件或数据库中的数据来生成和管理Job和Trigger。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值