zoukankan      html  css  js  c++  java
  • SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源码

    • 页面展现

    • 后台任务处理:恢复任务 15s执行一次

      后台打印消息

    • 不BB了,直接上代码
      import...
      
      /**
       * 调度工厂类
       * Created by jinyu on 2018/4/14/014.
       */
      @Service
      @Component
      public class MySchedulerFactory {
          private static Logger logger = LoggerFactory.getLogger(MySchedulerFactory.class);
          @Autowired
          SchedulerFactoryBean schedulerFactoryBean;
      
          // 任务配置读取服务
          @Autowired
          private AsyncQuartzConfService asyncQuartzConfService;
      
          public void scheduleJobs() throws SchedulerException {
              Scheduler scheduler = getScheduler();
              startJob(scheduler);
          }
      
          // 获取scheduler
          private Scheduler getScheduler(){
             return schedulerFactoryBean.getScheduler();
          }
          // 项目启动 开启任务
          private void startJob(Scheduler scheduler)  {
              try {
                  List<Quartz_Config> jobList = asyncQuartzConfService.getJobList();
                  for (Quartz_Config config : jobList) {
                      // 1-暂停的任务 0-正常运行任务
                      if (1l==config.getStatus()){
                          continue;
                      }
                      @SuppressWarnings("unchecked")
                      Class<? extends Job> clazz = (Class<? extends Job>) Class.forName(config.getQuartz_Class());
                      JobDetail jobDetail = JobBuilder.newJob(clazz)
                              .withIdentity(config.getName(), config.getGroup()).build();
                      CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(config.getCron());
                      CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(config.getName(), config.getGroup())
                              .withSchedule(scheduleBuilder).build();
                      scheduler.scheduleJob(jobDetail, cronTrigger);
                  }
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              }catch (SchedulerException e) {
                  e.printStackTrace();
              }
          }
      
          // 任务暂停
          public void pauseJob(long id) throws SchedulerException {
              Scheduler scheduler = getScheduler();
              Quartz_Config quartz_config = asyncQuartzConfService.findById(id);
              JobKey jobKey = JobKey.jobKey(quartz_config.getName(), quartz_config.getGroup());
              scheduler.deleteJob(jobKey);
          }
      
          // 任务恢复
          public void resumeJob(long id) throws SchedulerException, ClassNotFoundException {
              Scheduler scheduler = getScheduler();
              Quartz_Config quartz_config = asyncQuartzConfService.findById(id);
              JobKey jobKey = JobKey.jobKey(quartz_config.getName(), quartz_config.getGroup());
              Class<? extends Job> clazz = (Class<? extends Job>) Class.forName(quartz_config.getQuartz_Class());
              JobDetail jobDetail1 = scheduler.getJobDetail(jobKey);
              if (jobDetail1==null){
                  JobDetail jobDetail = JobBuilder.newJob(clazz)
                          .withIdentity(quartz_config.getName(), quartz_config.getGroup()).build();
                  CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartz_config.getCron());
                  CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(quartz_config.getName(), quartz_config.getGroup())
                          .withSchedule(scheduleBuilder).build();
                  scheduler.scheduleJob(jobDetail, cronTrigger);
              }else {
                  scheduler.resumeJob(jobKey);
              }
          }
      }

    • 启动Springboot监听
      import ...
      
      /**
       * 定时任务运行工厂类
       * Created by jinyu on 2018/4/12/012.
       */
      @Configuration
      public class StartSchedulerListener implements ApplicationListener<ContextRefreshedEvent> {
          @Autowired
          public MySchedulerFactory mySchedulerFactory;
      
          // springboot 启动监听
          @Override
          public void onApplicationEvent(ContextRefreshedEvent event) {
              try {
                  mySchedulerFactory.scheduleJobs();
              } catch (SchedulerException e) {
                  e.printStackTrace();
              }
          }
      
          //注入SchedulerFactoryBean
          @Bean
          public SchedulerFactoryBean schedulerFactoryBean() {
              SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
              return schedulerFactoryBean;
          }
      }

    • 任务类,按需创建
      /**
       * 定时任务实现类
       * Created by jinyu on 2018/4/12/012.
       */
      @Configuration
      @Component
      @EnableScheduling
      public class ScheduleTask1 implements Job {
      
          private static Logger logger = LoggerFactory.getLogger(ScheduleTask1.class);
      
          @Override
          public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
              try {
                  System.out.print("任务执行1 :");
                  System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
      
              } catch (Exception e) {
                  logger.error(e.getMessage());
              }
          }
    • 数据库

    补充:源码地址

  • 相关阅读:
    Effective Java 第三版——72. 赞成使用标准异常
    Effective Java 第三版——71. 避免不必要地使用检查异常
    Effective Java 第三版——70. 对可恢复条件使用检查异常,对编程错误使用运行时异常
    Effective Java 第三版——69. 仅在发生异常的条件下使用异常
    Effective Java 第三版——68. 遵守普遍接受的命名约定
    Effective Java 第三版——67. 明智谨慎地进行优化
    Effective Java 第三版——66. 明智谨慎地使用本地方法
    Effective Java 第三版——65. 接口优于反射
    Effective Java 第三版——64. 通过对象的接口引用对象
    Effective Java 第三版——63. 注意字符串连接的性能
  • 原文地址:https://www.cnblogs.com/inyu/p/13659086.html
Copyright © 2011-2022 走看看