当前位置: 首页 > 知识库问答 >
问题:

Quartz针对多个用户启动任务的建议

束志业
2023-03-14

虽然我以前有一些使用Quartz的经验,但我是第一次在现有的项目上从头开始建立它。我们已经决定使用石英(部分)为将来的需求做准备。

我正在寻找以下方面的建议:

要求

  • 将有几种不同类型的用户启动的任务,每个任务的时间从几秒到几分钟不等。这些操作需要从请求它们的用户异步执行,即使用户在此期间注销也要启动。
  • 这些任务将按类别分组。
  • 在每个类别中,一次只能执行n个(可配置)任务
  • 每个用户必须能够检索其发起的任务列表
  • 管理员必须能够检索所有用户的任务列表
  • 任务在执行过程中必须是可取消的
  • 任务在排队时必须是可取消的
  • 如果出现故障,则需要恢复并重新启动正在执行的任何任务
  • 必须支持群集

选项

我看到了以下实施方案,并希望得到一些反馈。

  • 主要自行管理
    • 维护我自己的单独任务表,其中包含排定时间、用户、状态等列
    • 每个组有一个Quartz作业,每x秒运行一次,检查表中的下一个任务,并并行执行。
    • 在这种情况下,除了每组n个石英作业之外,我不确定如何实现n个并行执行。
    • 在这种情况下,我希望Quartz在重新启动时不需要保留任何内容,尽管这意味着我的代码必须处理这种情况。
    • 如果没有计划任何任务,Quartz作业仍将激发
    • 每个任务将成为单独的Quartz作业。
    • 在这种情况下,我不确定如何允许每个组有n个并行作业。看来石英注释可以用来防止一次执行多个并行作业。
    • 石英表需要持久化在数据库中。
    • 石英本身将负责重新启动后的恢复。
    • 如果没有计划任务,则不会激发Quartz作业。

    我不确定(提前)上面的每一个有多容易对应需求。

    我将非常感谢任何基于我以上所写内容的反馈。我找不到很多关于这一点的指导方针,因为大多数似乎局限于以特定时间间隔运行并独立于用户调度或用户请求执行特定任务的Quartz作业。

    多谢了。

共有1个答案

郭元凯
2023-03-14

你确定你在说什么

大部分是自我管理的--这听起来更像是您要编写自己的调度程序

Quartz Managed--一旦添加到排定程序中,所有作业都是Quartz Managed的

要做任何改变,你只需要写一些东西,你可以称之为Manager类,它可以停止一个特定的作业等等。

任何作业只有在执行的时间间隔远远大于排定的时间间隔时才并行运行。

一次只运行一个作业意味着您正在使用@DisallowConcurrentExecution来禁用特定作业的任何并发执行。要有每个组要运行的作业实例的计数,您需要编写一些自定义逻辑

提示:所有的Quartz作业都传递JobExecutionContext,找出它是哪个jobgroup。然后加.........你自己想想吧。

您可以检查如何具有Quartz作业持久性。还是自己动手吧。我相信Quartz有足够的信息来实现这一点和如何实现它。

请记住,所有API都提供了一组操作,而不仅仅是QuartZ。但是实现和如何使用它们是由开发人员来完成的。总是有固定的大纲提供和如何指导可用。Java是一种拥有大量可用文档的语言。

您可能会从控制作业实例的讨论中得到帮助

顺便说一句,它将是您自己的自定义实现。我没有尝试检查任何quartz插件现在可用。

只是想到了另一个解决办法。以防您有任何UI界面或其他添加任务的东西。和任何间隔(再次.........)

您可以做的是将作业写入堆栈QuartZ作业可以简单地读取堆栈并将其作为一个单独的线程加载。

创建具有固定线程数的线程池。在这个线程池中,我们可以生成线程。

这样您就可以控制线程数

我认为这更多的是作为一个实施计划

 类似资料:
  • 问题内容: 我在使用此软件包的脚本中遇到问题: 我找不到错误后写了这个小小的testscript,结果是执行cronjobs的次数是预期的两倍: 运行它给我这个输出: 有谁知道我如何能在不重复的情况下创建大量的Gocron作业? 谢谢 :) 问题答案: 还可以吧 将开始已经重新开始的作业,因此要解决我的问题,我不得不将脚本更改为此: 我希望这对遇到相同问题的任何人有所帮助!

  • 我在我的Windows 2008 R2机器中安排了一个任务,但它未能触发日志中的以下错误(事件日志)。 错误: 任务计划程序无法启动用户“SAFFRON3\cb_admin”的“\Hyatt_International_Distribution”任务。其他数据:错误值:2147943645。 任务计划程序启动任务引擎""进程失败,原因是"LUAIsUpatedToken"中发生错误。命令="tas

  • 我可以用一个Google Drive API授权多个Google帐户吗?因为当我请求这个URI时 https://accounts.google.com/o/oauth2/v2/auth?scope=https://www.googleapis.com/auth/drive.metadata.readonly 其中| | redirecturi | | |和| | clientid | | |替换

  • 我正在使用Quartz调度器在我的java-app中启动作业。我有作业 用几个触发器启动一个作业是不可能的吗?我能以某种方式生成一个考虑多个cron表达式的调度吗?

  • 我在tomcat 8上部署了一个web应用程序,它使用来自两个不同系统的web服务,每个系统都需要相互验证。现在我需要将我的应用程序与两个不同的客户端证书集成,或者我们可以说两个不同的密钥存储库使用不同的密码。现在,我很难为这两项服务使用正确的证书。 我使用自己的代码调用其中一个服务,但第二个服务是从第三方库调用的,我无法控制其调用者代码。如果我使用任何一个密钥库,则相应的服务调用成功,但另一个失

  • 我正在寻找针对SAML IDP的-验证移动应用用户的解决方案,并且有一些基本的查询(我是SAML的新手,OAuth:))在这种情况下,流程可能就像移动用户将被IDP验证一样,即SAML响应由IDP生成的信息被发送到服务提供商(通过移动浏览器-Webview)。然后,服务提供商将创建一个令牌,该令牌将由移动应用用于后续调用。这种认识正确吗? 此外,移动用户如何在IDP进行身份验证,我的意思是,相应的