`

动态创建定时任务

 
阅读更多


import java.text.ParseException;

import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
/**
 * <pre>
 *  动态创建定时任务
 * </pre>
 *
 * @author xueyunlong
 * @create 2013年12月9日 下午3:10:20
 * @modify
 * @since   JDK1.6
 */
public class QuartzManager {

    private static SchedulerFactory sf = new StdSchedulerFactory();
       private static String TRIGGER_GROUP_NAME = "trigger1";
     
      
       /**
        *  添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
        * @param jobName 任务名
        * @param job     任务
        * @param time    时间设置,参考quartz说明文档
        * @throws SchedulerException
        * @throws ParseException
        */
       public static void addJob(String jobName,Job job,String time)
                                   throws SchedulerException, ParseException{
           Scheduler sched = sf.getScheduler();
           JobDetail jobDetail = new JobDetail(jobName, Scheduler.DEFAULT_GROUP, job.getClass());//任务名,任务组,任务执行类
           //触发器
           CronTrigger  trigger =
                new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组
           trigger.setCronExpression(time);//触发器时间设定
           sched.scheduleJob(jobDetail,trigger);
           //启动
           if(!sched.isShutdown())
              sched.start();
       }
      
      
       /**
        *  添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
        * @param jobName 任务名
        * @param job     任务
        * @param time    时间设置,参考quartz说明文档
        * @throws SchedulerException
        * @throws ParseException
        */
       public static void addJob(String jobName,Job job,String time,JobDetail jobDetail)
                                   throws SchedulerException, ParseException{
           Scheduler sched = sf.getScheduler();
           //触发器
           CronTrigger  trigger =
                new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组
           trigger.setCronExpression(time);//触发器时间设定
           sched.scheduleJob(jobDetail,trigger);
           //启动
           if(!sched.isShutdown())
              sched.start();
       }
      
       /**
        * 添加一个定时任务
        * @param jobName 任务名
        * @param jobGroupName 任务组名
        * @param triggerName  触发器名
        * @param triggerGroupName 触发器组名
        * @param job     任务
        * @param time    时间设置,参考quartz说明文档
        * @throws SchedulerException
        * @throws ParseException
        */
       public static void addJob(String jobName,String jobGroupName,
                                 String triggerName,String triggerGroupName,
                                 Job job,String time)
                                   throws SchedulerException, ParseException{
           Scheduler sched = sf.getScheduler();
           JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类
           //触发器
           CronTrigger  trigger =
                new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组
           trigger.setCronExpression(time);//触发器时间设定
           sched.scheduleJob(jobDetail,trigger);
           if(!sched.isShutdown())
              sched.start();
       }
      
       /**
        * 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
        * @param jobName
        * @param time
        * @throws SchedulerException
        * @throws ParseException
        */
       public static void modifyJobTime(String jobName,String time)
                                      throws SchedulerException, ParseException{
           Scheduler sched = sf.getScheduler();
           Trigger trigger =  sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
           if(trigger != null){
               CronTrigger  ct = (CronTrigger)trigger;
               ct.setCronExpression(time);
               sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);
           }
       }
      
       /**
        * 修改一个任务的触发时间
        * @param triggerName
        * @param triggerGroupName
        * @param time
        * @throws SchedulerException
        * @throws ParseException
        */
       public static void modifyJobTime(String triggerName,String triggerGroupName,
                                        String time)
                                      throws SchedulerException, ParseException{
           Scheduler sched = sf.getScheduler();
           Trigger trigger =  sched.getTrigger(triggerName,triggerGroupName);
           if(trigger != null){
               CronTrigger  ct = (CronTrigger)trigger;
               //修改时间
               ct.setCronExpression(time);
               //重启触发器
               sched.resumeTrigger(triggerName,triggerGroupName);
           }
       }
      
       /**
        * 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
        * @param jobName
        * @throws SchedulerException
        */
       public static void removeJob(String jobName)
                                   throws SchedulerException{
           Scheduler sched = sf.getScheduler();
           sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止触发器
           sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除触发器
           sched.deleteJob(jobName,Scheduler.DEFAULT_GROUP);//删除任务
       }
      
       /**
        * 移除一个任务
        * @param jobName
        * @param jobGroupName
        * @param triggerName
        * @param triggerGroupName
        * @throws SchedulerException
        */
       public static void removeJob(String jobName,String jobGroupName,
                                    String triggerName,String triggerGroupName)
                                   throws SchedulerException{
           Scheduler sched = sf.getScheduler();
           sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器
           sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器
           sched.deleteJob(jobName,jobGroupName);//删除任务
       }
    }

测试类:

public class QuartzTest {
   
   public static void main(String[] args) {
       // TODO Auto-generated method stub
   ServerExceptionJob job = new ServerExceptionJob();
         String job_name ="11";
       try {
           JobDetail jobDetail = new JobDetail(job_name, Scheduler.DEFAULT_GROUP, TestJob.class);

         //传送数据
           jobDetail.getJobDataMap().put("ip", "127.0.0.1");
           jobDetail.getJobDataMap().put("port", "8010");
           jobDetail.getJobDataMap().put("commonDAO",
                                    commonDAO); // 注入commaonDao
           QuartzManager.addJob(job_name,job,"0 9/10 * * * ?",jobDetail);
          
//           Thread.sleep(10000);
//           System.out.println("【修改时间】");
//           QuartzManager.modifyJobTime(job_name,"0/10 * * * * ?");
//           Thread.sleep(20000);
//           System.out.println("【移除定时】");
//           QuartzManager.removeJob(job_name);
//           Thread.sleep(10000);
//          
//           System.out.println("\n【添加定时任务】");
//           QuartzManager.addJob(job_name,job,"0/5 * * * * ?");
          
       }  catch (Exception e) {
           e.printStackTrace();
       }
   }

 

 


/**
 * <pre>
 *  异常的服务,新的定时任务业务处理
 * </pre>
 *
 * @author xueyunlong
 * @create 2013年12月9日 下午3:18:16
 * @modify
 * @since JDK1.6
 */
public class ServerExceptionJob implements Job, StatefulJob {

    protected Log logger = LogFactory.getLog(getClass());

    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        String ip = dataMap.get("ip").toString();
        String port = dataMap.get("port").toString();
        logger.info("新的定时任务开户执行 ip:" + ip + "端口:" + port);

       //获取注入的bean
        CommonDAO commonDAO = (CommonDAO) dataMap.get("commonDAO");

}

}

 

 

分享到:
评论

相关推荐

    spring boot task实现动态创建定时任务的方法

    Spring Boot Task 实现动态创建定时任务的方法 Spring Boot Task 提供了一种简单的方式来实现定时任务,但是在实际开发中,我们经常需要动态创建定时任务,以适应不同的业务需求。在这篇文章中,我们将介绍如何使用...

    C#实现的自定义定时任务 可定时运行 多任务运行

    创建自定义定时任务的关键在于设计一个任务调度器,它可以存储和管理多个定时任务。这个调度器应该包含以下功能: 1. **任务注册**:允许用户注册新的定时任务,提供任务的执行间隔、任务函数等信息。 2. **任务...

    详解SpringBoot 创建定时任务(配合数据库动态执行)

    在SpringBoot中创建定时任务,主要有两种方式:一种是通过注解(@Scheduled)创建静态定时任务,另一种是通过实现接口(SchedulingConfigurer)创建动态定时任务。 静态定时任务的创建非常简单,只需几行代码便可以完成...

    java 动态增加定时任务示例

    _java动态增加定时任务示例 Java动态增加定时任务示例是指在Java中使用Quartz框架实现动态增加定时任务的示例代码。Quartz是一个功能强大且灵活的开源作业调度框架,能够轻松地实现复杂的作业调度任务。 Java动态...

    springboot动态配置定时任务(schedule)

    在Spring Boot应用中,动态配置定时任务是提升系统灵活性和可维护性的重要手段。Spring Boot集成了Spring Framework的TaskExecution和TaskScheduling模块,使得我们可以方便地创建和管理定时任务。本文将深入探讨...

    java动态管理定时任务

    总结来说,通过Spring和Quartz的整合,我们可以构建一个强大的定时任务管理系统,不仅可以方便地创建和调度任务,还能根据业务需求进行动态管理,同时保证任务的稳定性和持久性。这在企业级应用中有着广泛的应用价值...

    springboot定时任务的动态开启关闭

    2. **创建定时任务** 在Spring Boot中,我们可以使用`@Scheduled`注解来创建一个定时任务。这个注解可以放在方法上,指定任务的执行周期、延迟等参数: ```java @Component public class MyTask { @Scheduled...

    furion内置的定时任务使用学习,动态添加定时任务代码

    在本教程中,我们将深入探讨Furion内置的定时任务系统,以及如何动态地添加定时任务。 首先,Furion的定时任务模块允许开发者方便地创建和管理计划任务,无需依赖外部库如Quartz.NET或Hangfire。通过简单的API调用...

    spring+springMVC+mybatis+quartz动态定时任务创建

    例如,可以使用Spring的ApplicationContext来初始化Quartz的Scheduler,然后在运行时通过Spring的Bean工厂动态创建和管理Job。Quartz的JobDetail和Trigger可以被配置为动态加载,这样就能根据业务逻辑或外部输入来...

    spring+quartz动态定时任务创建 +mybatis

    将Spring与Quartz结合,我们可以方便地在运行时动态创建和修改定时任务。首先,我们需要在Spring配置文件中声明一个SchedulerFactoryBean,然后定义JobDetail和Trigger,分别表示任务内容和触发条件。JobDetail可以...

    spring动态配置定时任务

    首先,Spring提供了`@Scheduled`注解来创建定时任务。在类或方法上使用这个注解,可以定义一个定时执行的任务。例如: ```java import org.springframework.scheduling.annotation.Scheduled; import org.spring...

    Springboot2-Quartz 后台可动态配置的定时任务

    本项目“Springboot2-Quartz 后台可动态配置的定时任务”是基于SpringBoot 2.x版本与Quartz Scheduler整合的一个示例,它展示了如何在后台管理系统中动态地创建、更新和删除定时任务,以及监控这些任务的状态,为...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    3. **动态增删改查**:为了实现动态的定时任务管理,我们需要创建一个服务层,该层负责与数据库交互,进行CRUD操作。例如,我们可以创建`JobService`,包含添加、删除、更新和查询作业的方法。这些方法需要更新...

    Spring普通定时任务和动态设置定时任务

    4. **动态创建 Job 和 Trigger**:同样通过 Scheduler 实例,可以动态创建新的 Job 和 Trigger。 ```java JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("newJob", "group1") .build()...

    (动态多)定时任务源码自动运行调度后台执行

    1、spring 定时任务demo ...9、spring+quartz动态定时任务创建 +mybatis(包含quartz动态定时任务的) 10、C#实现的自定义定时任务 可定时运行 多任务运行 11、ETL定时任务(数据同步)(没有数据库,仅供参

    quartz 动态执行定时任务

    以下是一个简单的示例代码,展示了如何根据数据库中的配置动态创建和管理定时任务: ```java // 创建 JobDetail 对象 JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1") .build()...

    springboot+quartz 动态化配置定时任务

    总结,SpringBoot+Quartz的动态化配置使得定时任务管理变得更加灵活和直观,结合前端页面,为开发者和运营人员提供了便捷的操作平台。通过理解上述步骤并实际操作,你可以轻松构建出自己的动态定时任务管理系统。在...

    Spring boot定时任务的原理及动态创建详解

    在Spring Boot 中,我们可以通过编程式配置来动态创建定时任务。例如,我们可以使用 `ScheduledAnnotationBeanPostProcessor` 来创建定时任务: ```java @Bean public ScheduledAnnotationBeanPostProcessor ...

    动态创建quartz定时任务

    quartz定时

    SpringBoot实现动态定时任务

    在Spring Boot框架中,动态定时任务的实现是一个重要的功能,尤其对于需要实时处理或调度的业务场景至关重要。本文将深入探讨如何使用Spring Boot来构建一个能够动态管理的任务调度系统,包括暂停、恢复、添加和删除...

Global site tag (gtag.js) - Google Analytics