转自原博客地址:http://blog.csdn.net/wangyongwyk/article/details/5534966

Quartz插件可以使Grails应用程序按照指定的时间间隔或cron表达式来执行调度任务。Grails系统通过spring配置使用Quartz Enterprise Job Scheduler 实现,但是编码时按照规约可以很容易的实现。

Grails-Quartz 0.4.1是当前稳定版本。Grails-Quartz 0.4.2是最新正在开发的版本。(已经发布了)

1 插件安装

在应用文件夹路径下键入以下命令

grails install-plugin quartz

如果以上命令由于某种原因不行,试一下下面这个

grails install-plugin http://cloud.github.com/downloads/nebolsin/grails-quartz/grails-quartz-0.4.1.zip

2  用法

调度任务(Scheduling Jobs)


在命令行键入“grails create-job”命令并输入任务名称,Grails会创建一个新的任务,并把它放到"grails-app/jobs"路径下。

class MyJob {
  static triggers = {
    simple name: 'mySimpleTrigger', startDelay: 60000, repeatInterval: 1000  
  }

def group = "MyGroup"

def execute(){
    print "Job run!" 
  }
}

上述例子会等待1分钟后每秒调用execute方法一次。'repeatInterval' 和'startDelay'属性的单位是毫秒,值必须是int或long。如果这两个属性不指定,则使用默认值(repeatInterval为1分钟,startDelay为30秒)

jobs默认情况下在test环境不运行。

调度Cron任务(Scheduling a Cron Job)


可以使用cron表达式调度任务。

class MyJob  {
  static triggers = {
    cron name: 'myTrigger', cronExpression: "0 0 6 * * ?"
  }
def group = "MyGroup"
def execute(){ print "Job run!" }

}

组合触发器任务


可以使用组合触发器调度任务。

class MyJob {statictriggers = {simple name:'simpleTrigger', startDelay:10000, repeatInterval: 30000, repeatCount: 10cron name:'cronTrigger', startDelay:10000, cronExpression: '0/6 * 15 * * ?'custom name:'customTrigger', triggerClass:MyTriggerClass, myParam:myValue, myAnotherParam:myAnotherValue}    def execute() {println "Job run!"}
}

上面这个例子中,scheduler(调度器)启动10秒后,job会每隔30秒执行一次,一共执行11次(simpleTrigger);在15点时每6秒执行一次(15:00:00, 15:00:06, 15:00:12, … — 这个由'cronTrigger'配置的),自定义的触发器触发时执行。

三种触发器可以支持的参数如下

  • simple :

    • name — 触发器的名称标识
    • startDelay — 调度器启动与第一次执行任务之间的间隔 (单位:毫秒)
    • repeatInterval — 连续两次执行任务之间的时间间隔(单位:毫秒)
    • repeatCount — 任务执行(1 + repeatCount)  次之后停止 (=0 执行一次 或=-1 执行无限次)
  • cron :
    • name — 触发器的名称标识
    • startDelay — 调度器启动与第一次执行任务之间的间隔 (单位:毫秒)
    • cronExpression — cron表达式
  • custom :
    • triggerClass — 自定义的实现了Trigger接口的类
    • 自定义触发器的需要的其他参数

动态任务调度(Dynamic Jobs Scheduling)


从0.4.1版本开始,可以使用动态调度任务。

可以使用以下方法:

  • MyJob.schedule(String cronExpression, Map params?) — 创建cron触发器;
  • MyJob.schedule(Long repeatInterval, Integer repeatCount?, Map params?) — 创建simple触发器: 间隔repeatInterval毫秒重复job repeatCount+1次;
  • MyJob.schedule(Date scheduleDate, Map params?) — 在指定日期调度执行一个任务;
  • MyJob.schedule(Trigger trigger) — 使用自定义触发器调度任务执行;
  • MyJob.triggerNow(Map params?) — 强制任务立刻执行.

每个方法都带有一个可选的‘params’参数。可以用它传递数据。

class MyJob { …def execute(context) {println context.mergedJobDataMap.get('foo')}…}// 在controller (或 service, 或其他地方):
MyJob.triggerNow([foo:"It Works!"
])

依赖注入和jobs(Dependency Injection and Jobs)

Jobs被配置为按名称自动绑定(auto-wiring by name),属性可以注入到jobs里。为获取data source可以声明

         def dataSource
或者一个Service类
         def myService
Grails application context 配置为使用规约,因此大部分类型可以使用属性名称很简单地注入(即大多数情况下首字母小写)。
使用JobExecutionContext(Using JobExecutionContext)

 从0.3.2开始,你可以定义在job中这样定义execute方法def execute(context){},这由Quartz's JobExecutionContext提供。如通过 context.getMergedJobDataMap()提供一些参数给job一样,你可以从context中获取某些信息(触发器名称,上次执行时间,下次执行时间等)。如果你的job是有状态的(看下面的并发一节),JobExecutionContext中的job数据在每次执行job时也会持久化。

配置插件(Configuring the plugin)

从0.3版本开始,插件支持配置文件,配置内容保存在grails-app/conf/QuartzConfig.groovy文件中。语法与默认的Grails配置文件Config.groovy相同。在命令行键入'grails install-quartz-config',可以获得一个初始的Quartz配置文件。文件内容大致如下:quartz {    autoStartup = true    jdbcStore = false}

environments {

test {

quartz {

autoStartup = false

}

}

}

目前支持的选项:
  • autoStartup — 应用启动时,自动启动Quartz调度器 (默认值: true )
  • jdbcStore — 如果需要Quartz持久化 jobs到DB时设置为true(默认值: false ), 还需要提供quartz.properties文件,确信所需的数据表在db中存在 (see Clustering section below for the sample config and automatic tables creation using Hibernate)
还可以创建
grails-app/conf/quartz.properties文件来为
Quartz调度器提供不同的选项
(参考 Quartz configuration reference
).

日志(Logging)

log被自动注入到你的job类里,但没有激活它。在 grails-app/conf/Config.groovy中配置如下语句即可设置log级别。
debug 'grails.app.task'

 hibernate会话和任务(Hibernate Sessions and Jobs)

默认配置每次job执行时绑定一个Hibernate会话。当你要open session或者domain类持久化操作时这是必须的。如果你不使用,可以使用 'sessionRequired' 属性重载这个行为。def sessionRequired = false

 配置并发执行(Configuring concurrent execution)

 默认Jobs可以并发执行,因此即使前一个同样的任务正在执行,一个新的任务也可以创建并执行。如果想重载这种行为,可以使用'concurrent' 属性def concurrent = false

Grails Quartz插件 定时调度任务相关推荐

  1. java quartz timer_Java 定时调度TimerQuartz

    目录 三.Quartz 一.Java定时任务介绍 在Java中,用得比较多的有两种,一个是Timer,一个是Quartz: 其中Timer是这是jdk自带的类库,一般用来实现简单的定时调度,由一个后台 ...

  2. spring+quartz实现定时调度

    spring+quartz实现任务调度在web应用启动时调度工厂就启动,web应用停止时,调度工厂也就停止工作,这种和web应用一致的声明周期很适合来实现任务调度,下面介绍使用方法. (一)需要的ja ...

  3. Quartz.net 定时调度CronTrigger时间配置格式说明

    1.   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...

  4. java定时调度main方法_java相关:Spring中实现定时调度的几种方法

    java相关:Spring中实现定时调度的几种方法 发布于 2020-11-28| 复制链接 本篇文章主要介绍了Spring中实现定时调度示例,可以在无人值守的时候系统可以在某一时刻执行某些特定的功能 ...

  5. Quartz.Net实现作业定时调度详解

    Quartz.Net实现作业定时调度详解 原文:Quartz.Net实现作业定时调度详解 1.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个 ...

  6. 在Grails中使用Quartz插件实现定时任务

    Quartz插件可以使Grails应用程序按照指定的时间间隔或cron表达式来执行调度任务.Grails系统通过spring配置使用Quartz Enterprise Job Scheduler 实现 ...

  7. springmvc+quartz简单实现定时调度

    一.简介:Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十 ...

  8. 【Java多线程】高级主题:定时调度、quartz、指令重排、volatile、ThreadLocal

    定时调度 1000ms后执行 每隔500ms执行一次 package cn.hanquan.test;import java.util.Timer; import java.util.TimerTas ...

  9. 定时调度系列之Quartz.Net详解

    一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...

  10. java集群调度_集群环境下定时调度的解决方案之Quartz集群

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

最新文章

  1. 最大流问题模板-java-蓝桥杯-算法训练-网络流裸题
  2. python输出所有组合数_生成两个列表的所有组合,并在python中一一输出
  3. python3 requirements使用方法 ~= >= <
  4. 【Shell】使用记录
  5. dom常用操作全后续会补充
  6. 【linux】【tcpdump】linux之tcpdump抓包及wireshark分析详解
  7. g++编译时:No such file or directory
  8. @font-face 用字体画图标
  9. reddit_Reddit如何大规模构建功能:采访其工程副总裁
  10. python编程可以自学么-怎么能学习好python编程?有自学的方法吗?
  11. java设置日历_java – 设置日历实例的时间
  12. 如何在Mac上的Pages文稿中设置对开页?
  13. 47. Use traits for information about types.
  14. 群晖NAS与Windows系统实现共享文件夹同步方案
  15. 红外激光测距模块功能简述
  16. python通讯录管理系统
  17. 计算pi小数点后10000位
  18. 项目实战:动态系统的设计(类似朋友圈)
  19. H5经纬度百度定位不准问题
  20. python会员折扣_Python——潜在会员用户预测

热门文章

  1. 什么是CMMI资质认证?
  2. 电话机器人源码支持独立部署+图文介绍
  3. Jdk(1.6和1.8)中英文Api文档
  4. 三菱PLC 串口通信开发心得经验
  5. Windows批处理命令
  6. 首席省钱赚钱专家微信小程序源码下载,淘宝客 外卖侠 外卖cps 首席多多客 八合一小程序源码
  7. 计算机考研高等代数,福大考研经验贴:我的数学考研之路(数学分析和高等代数)...
  8. python 上传文件
  9. SOEM主站安装及简单试用记录
  10. cad卸载_CAD绘图效率太低?1GCAD逆天插件送给你,用了再也不卸载