美文网首页
quartz简单封装

quartz简单封装

作者: jey恒 | 来源:发表于2017-06-27 18:39 被阅读118次

目标

  • 基于目前系统quartz使用xml配置很繁琐,适配到spring boot
  • 提供简单的接口,去动态触发任务
  • 提供任务运行监控等
  • 适用于基于数据库集群的分布式quartz
  • 对于其他的需求可以参考 分布式任务系统 开源有好几个

结构

image.png

使用方式

  • 引入quartz配置quartz.properties,或者使用默认的数据库集群
  • application.properties 配置
# 集群名称
quartz.cluster.scheduler.name=xxx-DEV
# 启用
quartz.auto.start.up=true
  • 代码中 集成AbstractQuartzJob,可以直接Autowired注入spring对象
@QuartzJob(cron = "0 0/30 * * * ?", desc = "测试任务")
public class XxxxJob extends AbstractQuartzJob {


  @Autowired
  private XxxxService XxxxService;

  @Override
  public void execute0(JobExecutionContext context) {

    XxxxService.do();

  }
  • 获取spring注入的所有job实例,生成所有对应的JobDetail等
@Bean
  public SchedulerFactoryBean schedulerFactoryBean(
      @Qualifier("quartzDataSource") DataSource quartzDataSource, QuartzJobAndTriggerListener quartzJobAndTriggerListener) {

    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
    schedulerFactoryBean.setApplicationContext(applicationContext);
    schedulerFactoryBean.setStartupDelay(10);
    schedulerFactoryBean.setOverwriteExistingJobs(true);
    schedulerFactoryBean.setDataSource(quartzDataSource);
    schedulerFactoryBean
        .setConfigLocation(applicationContext.getResource("classpath:quartz.properties"));

    schedulerFactoryBean.setGlobalJobListeners(quartzJobAndTriggerListener);
    schedulerFactoryBean.setGlobalTriggerListeners(quartzJobAndTriggerListener);

    schedulerFactoryBean.setJobFactory(jobFactory());
    schedulerFactoryBean.setBeanName(schedulerClusterName);
    Holder holder = getQuartzHolder();
    schedulerFactoryBean.setAutoStartup(autoStartUp);
    schedulerFactoryBean
        .setJobDetails(holder.jobDetailList.toArray(new JobDetail[holder.jobDetailList.size()]));
    schedulerFactoryBean
        .setTriggers(holder.cronTriggerList.toArray(new Trigger[holder.cronTriggerList.size()]));
    return schedulerFactoryBean;

  }
  • 获取所有的job实例
public Holder getQuartzHolder() {

    Map<String, Job> quartzJobMap = applicationContext.getBeansOfType(Job.class);

    Set<String> quartNameSet = quartzJobMap.keySet();

    List<CronTrigger> triggerList = Lists.newArrayList();
    List<JobDetail> jobDetailList = Lists.newArrayList();

    for (String quartName : quartNameSet) {

      Job job = quartzJobMap.get(quartName);
      QuartzJob quartzJob = AnnotationUtils.findAnnotation(job.getClass(), QuartzJob.class);
      JobInfo jobInfo = JobInfo.create(quartzJob, job);

      JobDetail jobDetail = JobBuilder.newJob(job.getClass()).withDescription(jobInfo.getDesc())
          .storeDurably(true).withIdentity(jobInfo.getName(), jobInfo.getGroup()).build();
      CronTrigger cronTrigger = TriggerBuilder.newTrigger().forJob(jobDetail)
          .withIdentity(jobInfo.getName(), jobInfo.getGroup())
          .withSchedule(CronScheduleBuilder.cronSchedule(jobInfo.getCron())).build();

      jobDetailList.add(jobDetail);
      triggerList.add(cronTrigger);
    }

    return new Holder(triggerList, jobDetailList);
  }

相关文章

  • quartz简单封装

    目标 基于目前系统quartz使用xml配置很繁琐,适配到spring boot 提供简单的接口,去动态触发任务 ...

  • Quartz2D详解

    什么是Quartz2D? 简单来说,Quartz2D是用C语言封装的二维绘图引擎,同时支持iOS和Mac系统,利用...

  • Quartz.net的简单封装

    新建一个QuartzClass类库项目。nuget控制台输入 添加Quartz.net的引用。我们新建一个JobB...

  • 针对SpringBoot封装的Quartz starter模块

    针对公司业务要求,针对springboot,对quartz做了简单的封装,将其做成SpringBoot的一个Sta...

  • 02 Quartz-初识Quartz-组件解释

    02 Quartz-初识Quartz-组件 01 Quartz-初识Quartz-样例入手 实现了一个简单运行de...

  • Quartz

    Quartz 核心概念 我们需要明白 Quartz 的几个核心概念,这样理解起 Quartz 的原理就会变得简单了...

  • SpringCloud(第 054 篇)简单 Quartz-Cl

    SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分...

  • Springboot 整合Quartz

    描述 Springboot 整合Quartz, 实现简单定时任务。Quartz的JobStore配置使用MySQL...

  • Quartz2D分享

    1.Quartz2D基本概念 Quartz2D苹果封装的一套绘图的函数库,同时支持iOS和Mac。 UIKit...

  • 领略Quartz源码架构之美——前戏

    本章阅读收获:可了解Quartz框架是什么?并简单使用 Quartz是什么? quartz是一个由java编写的任...

网友评论

      本文标题:quartz简单封装

      本文链接:https://www.haomeiwen.com/subject/itgecxtx.html