gpt4 book ai didi

java - 在运行时创建 Quartz Scheduler 实例

转载 作者:行者123 更新时间:2023-12-01 05:24:43 26 4
gpt4 key购买 nike

我正在开发一个应用程序,其中有 100 个作业需要安排执行。这是我的示例quartz.property 文件

org.quartz.scheduler.instanceName=QuartzScheduler
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.threadPool.threadCount=7
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.dataSource = myDS
org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/quartz
org.quartz.dataSource.myDS.user=root
org.quartz.dataSource.myDS.password=root
org.quartz.dataSource.myDS.maxConnections=5

虽然这工作得很好,但我们计划将工作分成不同的组,以便于维护它们。组将是唯一的,我们希望如果用户(管理员)创建一个新组,则应创建一个新的调度程序实例,并且该组内的所有作业将来应由该调度程序实例处理。这意味着,如果管理员创建一个新组(例如NewProductNotification),那么我们应该能够创建一个具有相同名称​​NewProductNotification的调度程序实例以及属于NewProductNotification的一部分的所有作业NewProductNotification 组应由调度程序的 NewProductNotification 实例处理。

这怎么可能,我们如何将这些信息存储在数据库中,以便下次服务器启动时,Quartz 应该了解所有调度程序实例,或者我们是否需要在属性文件中添加有关新实例的信息。

如上面的属性文件所示,我们使用 jdbcjobstore 来处理使用数据库的所有内容。

最佳答案

我认为动态创建调度程序在 Quartz 中并不是一个好的设计方法。您可以为多个调度程序共享相同的数据库表(作业详细信息和触发器将调度程序名称作为其主键的一部分),但 Scheduler 是一种重量级的。

你能解释一下为什么你确实需要单独的调度程序吗?也许您可以简单地使用作业组和触发器组(您实际上使用术语)来区分作业/组?您还可以为每个触发器使用不同的优先级。

作为旁注:

I'm using JobStoreCMT and I'm seeing deadlocks, what can I do?

Make sure you have at least number-of-threads-in-thread-pool + 2 connections in your datasources.

并在您的配置中(反转值就可以了):

org.quartz.threadPool.threadCount=7
org.quartz.dataSource.myDS.maxConnections=5

来自:I'm using JobStoreCMT and I'm seeing deadlocks, what can I do?

关于java - 在运行时创建 Quartz Scheduler 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852592/

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