gpt4 book ai didi

grails - 如何在 Grails 中配置 Quartz 触发器以允许不同的测试和生产计划

转载 作者:行者123 更新时间:2023-12-02 08:50:23 24 4
gpt4 key购买 nike

我正在尝试在 Grails 2.2.4 中采用 Quartz 插件 (:quartz:1.0.1),并试图找出如何允许开发和测试使用与生产中所需的不同的计划,而不必更改部署到每个的代码。

这是我的经验。

我也在使用 JDBC JobStore 和 Quartz Monitor 插件 (:quartz-monitor:1.0)。所以我的工作定义如下:

class TestJob {
static triggers = {
cron name: 'testTrigger', startDelay: 1000, cronExpression: '0 0/1 * * * ?'
}
...
}

当我运行 Grails 应用程序时,将为作业设置触发器,存储在数据库中,并开始执行。如果我通过 Quartz Monitor 有意更改 cron 表达式,它就会反射(reflect)在数据库和执行计划中。

如果我现在重新启动应用程序,触发器将更改回作业中定义的值。因此,使用这种方法,我几乎陷入了工作触发器 block 中的任何内容。如果我从代码中完全删除触发器 block ,那么数据库定义将保持不变并控制时间表,这似乎是一个改进。

因此,我认为在作业中不定义任何触发器是有意义的,但这让我试图弄清楚如何首先加载触发器,并且以一种不会覆盖有意更改的方式。似乎在配置中添加一个 block (可能在外部配置文件中)来定义触发器是有意义的。据我所知,我需要编写一些东西来在启动时解析它(在 BootStrap 中?)并通过 Quartz API 应用它。

在我所有的文档阅读和谷歌搜索中是否已经存在这样的东西?或者也许我在更根本的方面是错误的。

更新一些实现细节

汉斯给了我一些关于什么适合我的情况的想法。

我最终关闭了 JDBC 作业存储,因为我认为配置应该是触发的权限。我将作业/触发器信息放入一个外部配置文件中,如下所示。

quartzJobs: [
'TestJob': [
cronTriggers: [
cronExpression: '0 0 7 ? * 2-6'
]
]
]

然后我在 BootStrap 中调用了一些代码,如下所示。

def jobs = grailsApplication.config.quartzJobs
if (jobs) {
jobs.each { job, details ->
List triggers = (details?.cronTriggers instanceof Map) ? [details.cronTriggers]: details.cronTriggers
if (triggers) {
def j = grailsApplication.mainContext.getBean(job)
triggers.each { trigger ->
String cronExpression = trigger.cronExpression ?: '1 1 1 1 1 ? 2099'
j.schedule(cronExpression)
}
}
}
}

最佳答案

您可以将配置放入 Config.groovy 中或从 grails.config.locations 读取的属性文件中。

然后在 BootStrap.groovy 中您可以执行以下操作:

TestJob.schedule(grailsApplication.config.cronExpression)

在此 cronExpression 中是您在属性文件中选择的属性的名称。

参见http://grails-plugins.github.io/grails-quartz/guide/triggers.html对于可用的不同 Job.schedule() 方法。

关于grails - 如何在 Grails 中配置 Quartz 触发器以允许不同的测试和生产计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24417215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com