一般动作
quartz插件中,触发器是在Job类中硬编码实现的,如:
static triggers = {
simple name:'simpleTriggerXxxx', startDelay:180000, repeatInterval:300000, repeatCount: -1
cron name:'cronTriggerXxxx', startDelay:180000, cronExpression: '30 0/5 * * * ?'
}
这种方式虽然简单,但是非常不灵活,下面介绍两种动态配置的方式。
方式一:写一个静态的 getTriggers 方法代替静态 triggers 变量
如下代码所示,根据 Config 配置的参数来安排触发器日程。其中 MyConfig 中可以配置一个默认值,并且在工程的 Config 中可以覆盖该默认值。
注:由于 getTriggers 方法调用的时机非常早,甚至连Domain类的各个动态查询方法都还没有注入,因此这种方案的局限性很大。
方式二:不写 triggers,在 BootStrap 等地方,调用 quartz 插件为 Job 类动态注入的 schedule 方法来设置执行日程
好在 quartz 插件为 Job 类注入了各种动态方法,如 schedule、triggerNow 等,因此可以借用这些方法来实现动态排程。