ApiBoot - ApiBoot Quartz 使用文档

简介: `ApiBoot`内部集成了`Quartz`,提供了`数据库方式`、`内存方式`的进行任务的存储,其中`数据库`方式提供了`分布式集群任务调度`,任务自动平滑切换执行节点。

ApiBoot Quartz

ApiBoot内部集成了Quartz,提供了数据库方式内存方式的进行任务的存储,其中数据库方式提供了分布式集群任务调度,任务自动平滑切换执行节点。

引用ApiBoot Quartz

pom.xml配置文件内添加,如下配置:

<!--ApiBoot Quartz-->
<dependency>
  <groupId>org.minbox.framework</groupId>
  <artifactId>api-boot-starter-quartz</artifactId>
</dependency>

备注:如果使用ApiBoot Quartz的内存方式,仅需要添加上面的依赖即可。

相关配置

参数名称 是否必填 默认值 描述
api.boot.quartz.job-store-type memory 任务存储源方式,默认内存方式
api.boot.quartz.scheduler-name scheduler 调度器名称
api.boot.quartz.auto-startup true 初始化后是否自动启动调度程序
api.boot.quartz.startup-delay 0 初始化完成后启动调度程序的延迟。
api.boot.quartz.wait-for-jobs-to-complete-on-shutdown false 是否等待正在运行的作业在关闭时完成。
api.boot.quartz.overwrite-existing-jobs false 配置的作业是否应覆盖现有的作业定义。
api.boot.quartz.properties Quartz自定义的配置属性,具体参考quartz配置
api.boot.quartz.jdbc 配置数据库方式的Jdbc相关配置

内存方式

ApiBoot Quartz在使用内存方式存储任务时,不需要做配置调整。

数据库方式

需要在application.yml配置文件内修改api.boot.quartz.job-store-type参数,如下所示:

api:
  boot:
    quartz:
      # Jdbc方式
      job-store-type: jdbc

Quartz所需表结构

Quartz的数据库方式内部通过DataSource获取数据库连接对象来进行操作数据,所操作数据表的表结构是固定的,ApiBootQuartz所支持的所有表结构都进行了整理,访问Quartz支持数据库建表语句列表查看,复制执行对应数据库语句即可。

创建任务类

我们只需要让新建类集成QuartzJobBean就可以完成创建一个任务类,如下简单示例:

/**
 * 任务定义示例
 * 与Quartz使用方法一致,ApiBoot只是在原生基础上进行扩展,不影响原生使用
 * <p>
 * 继承QuartzJobBean抽象类后会在项目启动时会自动加入Spring IOC
 *
 * @author:恒宇少年 - 于起宇
 * <p>
 * DateTime:2019-03-28 17:26
 * Blog:http://blog.yuqiyu.com
 * WebSite:http://www.jianshu.com/u/092df3f77bca
 * Gitee:https://gitee.com/hengboy
 * GitHub:https://github.com/hengboy
 */
public class DemoJob extends QuartzJobBean {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(DemoJob.class);

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        logger.info("定时任务Job Key : {}", context.getJobDetail().getKey());
        logger.info("定时任务执行时所携带的参数:{}", JSON.toJSONString(context.getJobDetail().getJobDataMap()));
        //...处理逻辑
    }
}

任务参数

在任务执行时传递参数是必须的,ApiBoot Quartz提供了比较方便的传递方式,不过最终Quartz会把传递的值都会转换为String类型数据。

任务Key默认值

ApiBoot QuartznewJob方法所创建的定时任务,如果在不传递Job Key参数时,会默认使用UUID随机字符串作为Job Key以及Trigger Key

自定义任务开始时间

任务开始时间可以通过startAtTime方法进行设置,在不设置的情况下,任务创建完成后会立刻执行。

Cron 表达式任务

创建Cron类型任务如下所示:

String jobKey = apiBootQuartzService.newJob(ApiBootCronJobWrapper.Context()
                        .jobClass(DemoJob.class)
                        .cron("0/5 * * * * ?")
                        .param(
                                ApiBootJobParamWrapper.wrapper().put("param", "测试"))
                        .wrapper());

Cron 表达式任务由ApiBootCronJobWrapper类进行构建。

上面的DemoJob任务类将会每隔5秒执行一次。

Loop 重复任务

Loop循环任务,当在不传递重复执行次数时,不进行重复执行,仅仅执行一次,如下所示:

String jobKey = apiBootQuartzService.newJob(
                ApiBootLoopJobWrapper.Context()
                        // 参数
                        .param(
                                ApiBootJobParamWrapper.wrapper()
                                        .put("userName", "恒宇少年")
                                        .put("userAge", 24)
                        )
                        // 每次循环的间隔时间,单位:毫秒
                        .loopIntervalTime(2000)
                        // 循环次数
                        .repeatTimes(5)
                        // 开始时间,10秒后执行
                        .startAtTime(new Date(System.currentTimeMillis() + 10000))
                        // 任务类
                        .jobClass(DemoJob.class)
                        .wrapper()
        );

Loop 任务由ApiBootLoopJobWrapper类进行构建。

上面的定时任务将会重复执行5次,连上自身执行的一次也就是会执行6次,每次的间隔时间为2秒,在任务创建10秒后进行执行。

Once 一次性任务

Once一次性任务,任务执行一次会就会被自动释放,如下所示:


Map paramMap = new HashMap(1);
paramMap.put("paramKey", "参数值");

String jobKey = apiBootQuartzService.newJob(
  ApiBootOnceJobWrapper.Context()
  .jobClass(DemoJob.class)
  // 参数
  .param(
    ApiBootJobParamWrapper.wrapper()
    .put("mapJson", JSON.toJSONString(paramMap))
  )
  // 开始时间,2秒后执行
  .startAtTime(new Date(System.currentTimeMillis() + 2000))
  .wrapper()
);

Once 任务由ApiBootOnceJobWrapper类进行构建。

在参数传递时可以是对象、集合,不过需要进行转换成字符串才可以进行使用。

暂停任务执行

任务在执行过程中可以进行暂停操作,通过ApiBoot Quartz提供的pauseJob方法就可以很简单的实现,当然暂停时需要传递Job KeyJob Key可以从创建任务方法返回值获得。

暂停任务如下所示:

// 暂停指定Job Key的任务
apiBootQuartzService.pauseJob(jobKey);
// 暂停多个执行中任务
apiBootQuartzService.pauseJobs(jobKey,jobKey,jobKey);

恢复任务执行

任务执行完暂停后,如果想要恢复可以使用如下方式:

// 恢复指定Job Key的任务执行
apiBootQuartzService.resumeJob(jobKey);
// 恢复多个暂停任务
apiBootQuartzService.resumeJobs(jobKey,jobKey,jobKey);

修改Cron表达式

修改Cron表达式的场景如下:

  • 已创建 & 未执行
  • 已创建 & 已执行

修改方法如下所示:

// 修改执行Job Key任务的Cron表达式
apiBootQuartzService.updateJobCron(jobKey, "0/5 * * * * ?");

删除任务

想要手动释放任务时可以使用如下方式:

// 手动删除指定Job Key任务
apiBootQuartzService.deleteJob(jobKey);
// 手动删除多个任务
apiBootQuartzService.deleteJobs(jobKey,jobKey,jobKey);

删除任务的顺序如下:

  1. 暂停触发器
  2. 移除触发器
  3. 删除任务
    本章源码地址:https://github.com/hengboy/api-boot/tree/master/api-boot-samples/api-boot-sample-quartz

ApiBoot 开源交流群

相关文章
|
算法 Java 关系型数据库
|
11月前
|
XML Java 调度
Quartz-Spring集成Quartz通过XML配置的方式
Quartz-Spring集成Quartz通过XML配置的方式
66 1
|
Java Maven Spring
快速搭建activiti spring junit测试,用起来超级方便
快速搭建activiti spring junit测试,用起来超级方便
快速搭建activiti spring junit测试,用起来超级方便
|
安全 Java 关系型数据库
ApiBoot零代码整合Spring Security的JDBC方式获取AccessToken
`ApiBoot Security`内部提供了**两种方式**进行读取需要认证的用户信息,在之前的文章中讲到过`ApiBoot Security`使用`内存方式(memory)`**不写一行代码**就可以实现用户的认证并获取`AccessToken`,那我们使用`JDBC`方式是不是也是这么的简单呢?
ApiBoot零代码整合Spring Security的JDBC方式获取AccessToken
|
存储 监控 安全
ApiBoot新特性GlobalLogging详解
其实理解起来比较简单,类似于我们平时一直在使用的`logback`、`log4j`这种的日志框架的其中一个功能部分,`minbox-logging`分布式日志框架目前独立于`api-boot-plugins`,已经加入了`minbox-projects`开源组织,之前博客有一系列的文章来讲解了`ApiBoot Logging`(内部是集成的`minbox-logging`)日志组件的使用以及极简的配置方式,可以访问[ApiBoot 组件系列文章使用汇总](https://blog.minbox.org/apiboot-all-articles.html)了解日志组件的使用详情。
|
存储 安全 Java
ApiBoot实现零代码整合Spring Security & OAuth2
接口服务的安全性一直是程序员比较注重的一个问题,成熟的安全框架也比较多,其中一个组合就是`Spring Security`与`OAuth2`的整合,在`ApiBoot`内通过代码的封装、自动化配置实现了自动化整合这两大安全框架。
|
开发框架 Java 应用服务中间件
spring整合quartz框架
在一些项目中,往往需要定时的去执行一些任务,比如商城项目,每天0点去统计前一天的销量。那么如何实现呢,总不可能我们每天0点手动的去执行统计销量的方法吧,这时就quartz就起作用了。
spring整合quartz框架
|
监控 Java 微服务
Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
137 0
Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
ApiBoot - ApiBoot Swagger 使用文档
`ApiBoot`通过整合`Swagger2`完成自动化接口文档生成,只需要一个简单的注解我们就可以实现文档的开启,而且文档上面的所有元素都可以自定义配置,通过下面的介绍来详细了解`ApiBoot Swagger`的简易之处。
|
安全 Java 数据库连接
ApiBoot - ApiBoot Security Oauth 依赖使用文档
ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即用, 不再为搭建接口框架而犯愁,从而极大的提高开发效率。