在 quartz 插件中使用 grails 数据源
Using grails datasources in quartz plugin
我想创建使用 JdbcStore 的 quartz 作业,如 Burt 示例中 docs 的集群部分所述。
该示例展示了如何使用 quartz.properties 文件配置 quartz。
现在,我希望我的 jdbc 商店与我的 grails 应用程序是同一个数据库,这样我就可以减少要复制的设置。
因此,假设我在我的数据库中手动创建了所需的表,是否可以将 Datasource.groovy 中配置的默认数据源与 quartz 插件一起使用?
我正在使用 grails 2.4.4 和 quartz 1.0.2。
换句话说,我可以将设置添加到 QuartzConfig.groovy 而不是创建新的 quartz.properties 文件吗?至少我可以从单独的环境设置中受益。
这样的事情在 QuartzConfig.groovy 中有效吗?
quartz {
autoStartup = true
jdbcStore = true
waitForJobsToCompleteOnShutdown = true
exposeSchedulerInRepository = true
props {
scheduler.skipUpdateCheck = true
threadPool.class = 'org.quartz.simpl.SimpleThreadPool'
threadPool.threadCount = 50
threadPool.threadPriority = 9
jobStore.misfireThreshold = 60000
jobStore.class = 'impl.jdbcjobstore.JobStoreTX'
jobStore.driverDelegateClass = 'org.quartz.impl.jdbcjobstore.StdJDBCDelegate'
jobStore.useProperties = false
jobStore.tablePrefix = 'QRTZ_'
jobStore.isClustered = true
jobStore.clusterCheckinInterval = 5000
plugin.shutdownhook.class = 'org.quartz.plugins.management.ShutdownHookPlugin'
plugin.shutdownhook.cleanShutdown = true
jobStore.dataSource = 'myDS'
// [...]
}
我设法调整了 QuartzConfig.groovy 中的所有设置。我唯一必须删除才能使其工作的是数据库特定选项。
此外,我必须按照第 12 页 http://www.quartz-scheduler.org/generated/2.2.1/pdf/Quartz_Scheduler_Configuration_Guide.pdf 的建议添加 属性 scheduler.idleWaitTime = 1000
,因为尽管我的工作被称为 MyJob.triggerNow(paramsMap)
,但有一个实际开始前延迟 20 到 30 秒。
scheduler.idleWaitTime
设置为 1 秒,作业确实在提交后 1 秒触发。
QuartzProperties.groovy 实际上接受石英配置文档中描述的所有属性(例如:http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/ConfigJobStoreTX)。只需将它们放在 props {...}
块中,并删除 org.quartz
前缀。
这是我的最终配置,例如:
quartz {
autoStartup = true
jdbcStore = true
waitForJobsToCompleteOnShutdown = true
// Allows monitoring in Java Melody (if you have the java melody plugin installed in your grails app)
exposeSchedulerInRepository = true
props {
scheduler.skipUpdateCheck = true
scheduler.instanceName = 'my_reporting_quartz'
scheduler.instanceId = 'AUTO'
scheduler.idleWaitTime = 1000
threadPool.'class' = 'org.quartz.simpl.SimpleThreadPool'
threadPool.threadCount = 10
threadPool.threadPriority = 7
jobStore.misfireThreshold = 60000
jobStore.'class' = 'org.quartz.impl.jdbcjobstore.JobStoreTX'
jobStore.driverDelegateClass = 'org.quartz.impl.jdbcjobstore.StdJDBCDelegate'
jobStore.useProperties = false
jobStore.tablePrefix = 'QRTZ_'
jobStore.isClustered = true
jobStore.clusterCheckinInterval = 5000
plugin.shutdownhook.'class' = 'org.quartz.plugins.management.ShutdownHookPlugin'
plugin.shutdownhook.cleanShutdown = true
}
}
不要忘记使用位于 /path/to/your/project/target/work/plugins/quartz-1.0.2/src/templates/sql/...
的适当脚本创建 sql 表
我想创建使用 JdbcStore 的 quartz 作业,如 Burt 示例中 docs 的集群部分所述。
该示例展示了如何使用 quartz.properties 文件配置 quartz。
现在,我希望我的 jdbc 商店与我的 grails 应用程序是同一个数据库,这样我就可以减少要复制的设置。
因此,假设我在我的数据库中手动创建了所需的表,是否可以将 Datasource.groovy 中配置的默认数据源与 quartz 插件一起使用?
我正在使用 grails 2.4.4 和 quartz 1.0.2。
换句话说,我可以将设置添加到 QuartzConfig.groovy 而不是创建新的 quartz.properties 文件吗?至少我可以从单独的环境设置中受益。
这样的事情在 QuartzConfig.groovy 中有效吗?
quartz {
autoStartup = true
jdbcStore = true
waitForJobsToCompleteOnShutdown = true
exposeSchedulerInRepository = true
props {
scheduler.skipUpdateCheck = true
threadPool.class = 'org.quartz.simpl.SimpleThreadPool'
threadPool.threadCount = 50
threadPool.threadPriority = 9
jobStore.misfireThreshold = 60000
jobStore.class = 'impl.jdbcjobstore.JobStoreTX'
jobStore.driverDelegateClass = 'org.quartz.impl.jdbcjobstore.StdJDBCDelegate'
jobStore.useProperties = false
jobStore.tablePrefix = 'QRTZ_'
jobStore.isClustered = true
jobStore.clusterCheckinInterval = 5000
plugin.shutdownhook.class = 'org.quartz.plugins.management.ShutdownHookPlugin'
plugin.shutdownhook.cleanShutdown = true
jobStore.dataSource = 'myDS'
// [...]
}
我设法调整了 QuartzConfig.groovy 中的所有设置。我唯一必须删除才能使其工作的是数据库特定选项。
此外,我必须按照第 12 页 http://www.quartz-scheduler.org/generated/2.2.1/pdf/Quartz_Scheduler_Configuration_Guide.pdf 的建议添加 属性 scheduler.idleWaitTime = 1000
,因为尽管我的工作被称为 MyJob.triggerNow(paramsMap)
,但有一个实际开始前延迟 20 到 30 秒。
scheduler.idleWaitTime
设置为 1 秒,作业确实在提交后 1 秒触发。
QuartzProperties.groovy 实际上接受石英配置文档中描述的所有属性(例如:http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/ConfigJobStoreTX)。只需将它们放在 props {...}
块中,并删除 org.quartz
前缀。
这是我的最终配置,例如:
quartz {
autoStartup = true
jdbcStore = true
waitForJobsToCompleteOnShutdown = true
// Allows monitoring in Java Melody (if you have the java melody plugin installed in your grails app)
exposeSchedulerInRepository = true
props {
scheduler.skipUpdateCheck = true
scheduler.instanceName = 'my_reporting_quartz'
scheduler.instanceId = 'AUTO'
scheduler.idleWaitTime = 1000
threadPool.'class' = 'org.quartz.simpl.SimpleThreadPool'
threadPool.threadCount = 10
threadPool.threadPriority = 7
jobStore.misfireThreshold = 60000
jobStore.'class' = 'org.quartz.impl.jdbcjobstore.JobStoreTX'
jobStore.driverDelegateClass = 'org.quartz.impl.jdbcjobstore.StdJDBCDelegate'
jobStore.useProperties = false
jobStore.tablePrefix = 'QRTZ_'
jobStore.isClustered = true
jobStore.clusterCheckinInterval = 5000
plugin.shutdownhook.'class' = 'org.quartz.plugins.management.ShutdownHookPlugin'
plugin.shutdownhook.cleanShutdown = true
}
}
不要忘记使用位于 /path/to/your/project/target/work/plugins/quartz-1.0.2/src/templates/sql/...
的适当脚本创建 sql 表