Grails Quartz插件 定时调度任务
转自原博客地址: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插件 定时调度任务相关推荐
- java quartz timer_Java 定时调度TimerQuartz
目录 三.Quartz 一.Java定时任务介绍 在Java中,用得比较多的有两种,一个是Timer,一个是Quartz: 其中Timer是这是jdk自带的类库,一般用来实现简单的定时调度,由一个后台 ...
- spring+quartz实现定时调度
spring+quartz实现任务调度在web应用启动时调度工厂就启动,web应用停止时,调度工厂也就停止工作,这种和web应用一致的声明周期很适合来实现任务调度,下面介绍使用方法. (一)需要的ja ...
- Quartz.net 定时调度CronTrigger时间配置格式说明
1. CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...
- java定时调度main方法_java相关:Spring中实现定时调度的几种方法
java相关:Spring中实现定时调度的几种方法 发布于 2020-11-28| 复制链接 本篇文章主要介绍了Spring中实现定时调度示例,可以在无人值守的时候系统可以在某一时刻执行某些特定的功能 ...
- Quartz.Net实现作业定时调度详解
Quartz.Net实现作业定时调度详解 原文:Quartz.Net实现作业定时调度详解 1.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个 ...
- 在Grails中使用Quartz插件实现定时任务
Quartz插件可以使Grails应用程序按照指定的时间间隔或cron表达式来执行调度任务.Grails系统通过spring配置使用Quartz Enterprise Job Scheduler 实现 ...
- springmvc+quartz简单实现定时调度
一.简介:Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十 ...
- 【Java多线程】高级主题:定时调度、quartz、指令重排、volatile、ThreadLocal
定时调度 1000ms后执行 每隔500ms执行一次 package cn.hanquan.test;import java.util.Timer; import java.util.TimerTas ...
- 定时调度系列之Quartz.Net详解
一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...
- java集群调度_集群环境下定时调度的解决方案之Quartz集群
集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...
最新文章
- 最大流问题模板-java-蓝桥杯-算法训练-网络流裸题
- python输出所有组合数_生成两个列表的所有组合,并在python中一一输出
- python3 requirements使用方法 ~= >= <
- 【Shell】使用记录
- dom常用操作全后续会补充
- 【linux】【tcpdump】linux之tcpdump抓包及wireshark分析详解
- g++编译时:No such file or directory
- @font-face 用字体画图标
- reddit_Reddit如何大规模构建功能:采访其工程副总裁
- python编程可以自学么-怎么能学习好python编程?有自学的方法吗?
- java设置日历_java – 设置日历实例的时间
- 如何在Mac上的Pages文稿中设置对开页?
- 47. Use traits for information about types.
- 群晖NAS与Windows系统实现共享文件夹同步方案
- 红外激光测距模块功能简述
- python通讯录管理系统
- 计算pi小数点后10000位
- 项目实战:动态系统的设计(类似朋友圈)
- H5经纬度百度定位不准问题
- python会员折扣_Python——潜在会员用户预测