开源quartz修改版的使用方法

vmax-quartz

vmax-quartz是vmax项目的定时任务管理模块,基于开源quartz开发,为vmax应用提供精简的API接口创建和管理定时任务。

特性

  • 免配置极简使用 只需在build.sbt中增加一行引用即可使用。
  • 支持异常处理 支持任务超时、失败重试等异常处理。
  • 支持串并行和互斥控制 默认为并发执行,可设置任务为串行或与其他任务互斥执行。
  • 支持历史任务回溯 支持对任务执行历史记录进行保存和回溯。
  • 提供Listener机制 方便对任务执行过程中各种事件进行监控。
  • 支持个性化配置 在有需要时,也可对默认配置进行修改以适应应用场景。
  • 提供配套客户端 方便对已创建任务和历史任务进行查看和管理。

开始使用

vmax-quartz发布在mvn私服。目前发布的是snapshot版本。使用此版本只需在build.sbt中加入:

libraryDependencies += "com.xxx.bigdata" %% "vmax-quartz" % "SNAPSHOT" changing()

使用示例

创建一个任务只需简单两步:

  1. 创建一个任务类型(JobClass)

    // 定义这个任务所需的参数
    case class FileDownloadJobParameter(files: List[String])
    
    // 继承VmaxJob,在process中实现具体业务逻辑。 可通过context.jobPara获取schedule时传入的参数
    class FileDownloadJob extends VmaxJob {
      override def process(context: VmaxJobExecutionContext): Unit = {
        val para = context.jobPara.asInstanceOf[FileDownloadJobParameter]
        ... // 写具体的业务逻辑
      }
    }
    
    // 推荐采用伴生对象方法固化每一个JobClass的Key
    object FileDownloadJob {
      val key = VmaxJobClassKey("File Download", "Neighbor Cell Optimize")
    }
  2. 注册任务类型,创建并调度不同的任务

    object BasicDemo extends App {
    
      // 注册一个JobClass
      VmaxScheduler.register(FileDownloadJob.key, classOf[FileDownloadJob], VmaxJobParameter(Nil, 0, 60))
    
      // 创建并立即调度一个名为"File Download Now"的新任务
      VmaxScheduler.scheduleNow(FileDownloadJob.key, "File Download Now",
        FileDownloadJobParameter(List("file1", "file2")))
    
      // 创建"File Download Every Minute"任务,并每分钟执行一次
      VmaxScheduler.schedule(FileDownloadJob.key, "File Download Every Minute",
        FileDownloadJobParameter(List("file3", "file4")), "0 1 * * * ?")
    }

    说明

    • VmaxJobParameter用于描述任务类型的相关属性,字段含义如下:
    字段含义
    exclusiveJobs互斥任务列表,标明这类任务与其他哪类任务互斥。默认为空。
    retryTimes当任务失败时,最大重试次数,默认为0,即不重试。
    timeoutInSecond任务超时时间,单位为秒。默认值-1,即不做超时控制。
    isSerial标识此类任务是否为串行,默认为False,即并发执行。
    requestRecovery标识当程序硬重启后,此类任务是否被重新执行。默认为False。
    • “0 1 * * * ?” 为cron表达式,表示每分钟执行一次。

如何启动服务

vmax-quartz使用标准JMX接口对客户端发布服务。如需使用客户端对服务器进行管理,需要在启动程序时添加JVM选项。示例:

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl="false"
-Dcom.sun.management.jmxremote.authenticate="false"

如使用Intellij IDEA启动服务,可在Run->Edit Configurations->VM options中添加上面的配置。

配置选项详解

1. 配置选项

# 你可在自己的工程中创建配置文件,设置如下全部或部分选项(没配置的会使用如下默认值)。
vmaxquartz {

    # Scheduler的名字,各应用可设置为自己个性化的名字
    schedulerName = "VmaxDefaultScheduler"

    # 最大线程数。由于处在阻塞状态的任务也会占用一个线程,所以线程数越大,相当于支持的阻塞队列就越大。
    # 但要注意,线程数越大,占用内存也越大,所以需要根据应用实际情况合理设置
    threadCount = 100

    # 检测任务超时的精度,单位为秒。默认值为5,即每5秒检测一次是否有任务超时。
    timeoutPrecision = 5

    # 数据库相关配置
    database {

        # 数据库连接的用户名
        username = "sa"

        # 数据库连接的密码
        password = ""

        # 数据库文件所在位置,默认为当前目录下的/database/quartz.h2.db文件
        # 注意:后缀.h2.db不用写
        filepath= "./database/quartz"

        # 数据库最大连接数
        maxConnections = 10
    }
}

2. 修改默认配置文件

  • 默认的配置文件是resources目录下的vmaxquartz.conf文件。如不存在,则所有选项都使用默认值。
  • 如需修改默认的配置文件,可在代码中使用VmaxQuartzConfigProvider。 示例:

    // 修改vmax-quartz配置文件为resources下的sample.conf
    VmaxQuartzConfigProvider.reset("sample.conf")

FAQ

Q: 如何知道一个任务完成了?

A: 可以给任务增加Listener,监听jobComplete事件。例:

  1. 继承VmaxJobListener,实现一个监听jobComplete事件的Listener。

    class JobCompleteListener extends VmaxJobListener {
      override def jobComplete(result: VmaxJobResult, context: VmaxJobExecutionContext): Unit = {
        // 在这写当任务完成时你要做的操作...
      }
    }
  2. 在调度这个任务时,将Listener添加进去。这样当任务完成时就会回调jobComplete方法。

    VmaxScheduler.schedule(FileDownloadJob.key, "File Download Every Minute",
        FileDownloadJobParameter(List("file3", "file4")), "0 1 * * * ?",
        List(new JobCompleteListener()))
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值