zoukankan      html  css  js  c++  java
  • springboot集成quartz定时任务课动态执行

     1 <dependency>
     2             <groupId>org.quartz-scheduler</groupId>
     3             <artifactId>quartz</artifactId>
     4             <version>2.2.1</version>
     5         </dependency>
     6         <dependency><!-- 该依赖必加,里面有sping对schedule的支持 -->
     7             <groupId>org.springframework</groupId>
     8             <artifactId>spring-context-support</artifactId>
     9         </dependency>
    10         <!--必须添加,要不然会出错,项目无法启动-->
    11         <dependency>
    12             <groupId>org.springframework</groupId>
    13             <artifactId>spring-tx</artifactId>
    14             <version>4.3.16.RELEASE</version>
    15         </dependency>
      1 **
      2  * 描述:
      3  * task-任务调度处理
      4  *
      5  * @Author zuoxh
      6  * @create 2018-12-19 20:38
      7  */
      8 @Configuration
      9 public class QuartzConfig {
     10 
     11     @Resource
     12     private Scheduler scheduler;
     13 
     14     /**
     15      * 开始执行所有任务
     16      *
     17      * @throws SchedulerException
     18      */
     19     public void startJob() throws SchedulerException {
     20         startJob1(scheduler);
     21         startJob2(scheduler);
     22         scheduler.start();
     23     }
     24 
     25     /**
     26      * 获取Job信息
     27      *
     28      * @param name
     29      * @param group
     30      * @return
     31      * @throws SchedulerException
     32      */
     33     public String getJobInfo(String name, String group) throws SchedulerException {
     34         TriggerKey triggerKey = new TriggerKey(name, group);
     35         CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
     36         return String.format("time:%s,state:%s", cronTrigger.getCronExpression(),
     37                 scheduler.getTriggerState(triggerKey).name());
     38     }
     39 
     40     /**
     41      * 修改某个任务的执行时间
     42      *
     43      * @param name
     44      * @param group
     45      * @param time
     46      * @return
     47      * @throws SchedulerException
     48      */
     49     public boolean modifyJob(String name, String group, String time) throws SchedulerException {
     50         Date date = null;
     51         TriggerKey triggerKey = new TriggerKey(name, group);
     52         CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
     53         String oldTime = cronTrigger.getCronExpression();
     54         if (!oldTime.equalsIgnoreCase(time)) {
     55             CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(time);
     56             CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(name, group)
     57                     .withSchedule(cronScheduleBuilder).build();
     58             date = scheduler.rescheduleJob(triggerKey, trigger);
     59         }
     60         return date != null;
     61     }
     62 
     63     /**
     64      * 暂停所有任务
     65      *
     66      * @throws SchedulerException
     67      */
     68     public void pauseAllJob() throws SchedulerException {
     69         scheduler.pauseAll();
     70     }
     71 
     72     /**
     73      * 暂停某个任务
     74      *
     75      * @param name
     76      * @param group
     77      * @throws SchedulerException
     78      */
     79     public void pauseJob(String name, String group) throws SchedulerException {
     80         JobKey jobKey = new JobKey(name, group);
     81         JobDetail jobDetail = scheduler.getJobDetail(jobKey);
     82         if (jobDetail == null)
     83             return;
     84         scheduler.pauseJob(jobKey);
     85     }
     86 
     87     /**
     88      * 恢复所有任务
     89      *
     90      * @throws SchedulerException
     91      */
     92     public void resumeAllJob() throws SchedulerException {
     93         scheduler.resumeAll();
     94     }
     95 
     96     /**
     97      * 恢复某个任务
     98      *
     99      * @param name
    100      * @param group
    101      * @throws SchedulerException
    102      */
    103     public void resumeJob(String name, String group) throws SchedulerException {
    104         JobKey jobKey = new JobKey(name, group);
    105         JobDetail jobDetail = scheduler.getJobDetail(jobKey);
    106         if (jobDetail == null)
    107             return;
    108         scheduler.resumeJob(jobKey);
    109     }
    110 
    111     /**
    112      * 删除某个任务
    113      *
    114      * @param name
    115      * @param group
    116      * @throws SchedulerException
    117      */
    118     public void deleteJob(String name, String group) throws SchedulerException {
    119         JobKey jobKey = new JobKey(name, group);
    120         JobDetail jobDetail = scheduler.getJobDetail(jobKey);
    121         if (jobDetail == null)
    122             return;
    123         scheduler.deleteJob(jobKey);
    124     }
    125 
    126     private void startJob1(Scheduler scheduler) throws SchedulerException {
    127         // 通过JobBuilder构建JobDetail实例,JobDetail规定只能是实现Job接口的实例
    128         // JobDetail 是具体Job实例
    129         JobDetail jobDetail = JobBuilder.newJob(FirstTask.class).withIdentity("firstTask", "firstTask").build();
    130         // 基于表达式构建触发器
    131         CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
    132         // CronTrigger表达式触发器 继承于Trigger
    133         // TriggerBuilder 用于构建触发器实例
    134         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("firstTask", "firstTask")
    135                 .withSchedule(cronScheduleBuilder).build();
    136         scheduler.scheduleJob(jobDetail, cronTrigger);
    137     }
    138 
    139     private void startJob2(Scheduler scheduler) throws SchedulerException {
    140         JobDetail jobDetail = JobBuilder.newJob(SecondTask.class).withIdentity("secondTask", "secondTask").build();
    141         CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
    142         CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("secondTask", "secondTask")
    143                 .withSchedule(cronScheduleBuilder).build();
    144         scheduler.scheduleJob(jobDetail, cronTrigger);
    145     }
    146 }

    配置任务和配置quartz

     1 /**
     2  * 描述:
     3  * task-
     4  *
     5  * @Author zuoxh
     6  * @create 2018-12-19 20:22
     7  */
     8 public class FirstTask implements Job {
     9     @Override
    10     public void execute(JobExecutionContext context) throws JobExecutionException {
    11         // TODO 业务
    12         System.out.println("结束1:"+System.currentTimeMillis());
    13     }
    14 }
     1 /**
     2  * 描述:
     3  * task-
     4  *
     5  * @Author zuoxh
     6  * @create 2018-12-19 20:25
     7  */
     8 public class SecondTask implements Job {
     9     @Override
    10     public void execute(JobExecutionContext context) throws JobExecutionException {
    11         // TODO 业务
    12         System.out.println("结束2:"+System.currentTimeMillis());
    13     }
    14 }

    配置多多个任务

     1 /**
     2  * 描述:
     3  * task-
     4  *
     5  * @Author zuoxh
     6  * @create 2018-12-19 20:47
     7  */
     8 @Controller
     9 public class QuartzApiController {
    10     
    11     @Autowired
    12     private QuartzConfig quartzConfig;
    13 
    14     @RequestMapping("/start")
    15     @ResponseBody
    16     public String startQuartzJob() {
    17         try {
    18             quartzConfig.startJob();
    19             return "start";
    20         } catch (SchedulerException e) {
    21             e.printStackTrace();
    22         }
    23         return "start";
    24     }
    25 
    26     @RequestMapping("/info")
    27     @ResponseBody
    28     public String getQuartzJob(String name, String group) {
    29         String info = null;
    30         try {
    31             info = quartzConfig.getJobInfo(name, group);
    32             System.out.println("name="+name);
    33         } catch (SchedulerException e) {
    34             e.printStackTrace();
    35         }
    36         return info;
    37     }
    38 
    39     @RequestMapping("/modify")
    40     @ResponseBody
    41     public boolean modifyQuartzJob(String name, String group, String time) {
    42         boolean flag = true;
    43         try {
    44             flag = quartzConfig.modifyJob(name, group, time);
    45         } catch (SchedulerException e) {
    46             e.printStackTrace();
    47         }
    48         return flag;
    49     }
    50 
    51     @RequestMapping(value = "/pause")
    52     @ResponseBody
    53     public String pauseQuartzJob(String name, String group) {
    54         try {
    55             quartzConfig.pauseJob(name, group);
    56         } catch (SchedulerException e) {
    57             e.printStackTrace();
    58         }
    59         return "pause "+name;
    60     }
    61 
    62     @RequestMapping(value = "/pauseAll")
    63     @ResponseBody
    64     public String pauseAllQuartzJob() {
    65         try {
    66             quartzConfig.pauseAllJob();
    67         } catch (SchedulerException e) {
    68             e.printStackTrace();
    69         }
    70         return "stopAll";
    71     }
    72     @RequestMapping(value = "/resumeAllJob")
    73     @ResponseBody
    74     public String resumeAllJob(){
    75         try {
    76             quartzConfig.resumeAllJob();
    77         } catch (SchedulerException e) {
    78             e.printStackTrace();
    79         }
    80         return "resumeAllJob";
    81     }
    82 
    83     @RequestMapping(value = "/delete")
    84     public void deleteJob(String name, String group) {
    85         try {
    86             quartzConfig.deleteJob(name, group);
    87         } catch (SchedulerException e) {
    88             e.printStackTrace();
    89         }
    90     }
    91 
    92 }

    配置controller

  • 相关阅读:
    npm常用命令
    关于事件委托和时间冒泡(以及apply和call的事项)
    js 杂记
    angular中关于ng-repeat的性能问题
    关于日期的一些东西
    杂记
    angular中关于自定义指令——repeat渲染完成后执行动作
    angular中事件戳转日期的格式
    ES6-promise
    angular中ng-class的一些用法
  • 原文地址:https://www.cnblogs.com/zuoxh/p/10157345.html
Copyright © 2011-2022 走看看