gpt4 book ai didi

java - 为 spring 应用程序寻找持久计时器

转载 作者:行者123 更新时间:2023-11-30 07:31:05 26 4
gpt4 key购买 nike

我正在寻找一个允许我做的库

  1. 定义一个 worker,它将在未来的特定时间被调用一次(不需要重新安排/cron 之类的功能),即计时器
  2. 工作人员应该接受带有一些参数/输入的上下文
  3. 所有的都应该持久化在数据库(或文件)中 worker
  4. worker 应该由 spring 管理——spring 应该实例化 worker 以便它可以注入(inject)依赖项
  5. 能够通过 API 动态创建计时器,而不仅仅是通过 spring XML bean 静态创建

很高兴拥有:

  1. 支持集群,即有多个节点可以托管一个工作人员。数据库中的每个存储作业都会在其中一个节点上调用一项工作

我已经检查了几个替代方案,但没有一个符合要求:

  • quartz

当使用 org.springframework.scheduling.quartz.JobDetailBean 时,quartz 会创建你的 worker 实例(而不是 spring),所以你无法获得依赖注入(inject),(这将导致我使用我想避免的 Service Locator)

在使用 org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean 时,您无法获得上下文。您的 Worker 公开了一种不接受任何参数的公共(public)方法。此外,在使用 MethodInvokingJobDetailFactoryBean 时,您不能使用持久性(形成 Javadoc)

Note: JobDetails created via this FactoryBean are not serializable and thus not suitable for persistent job stores. You need to implement your own Quartz Job as a thin wrapper for each case where you want a persistent job to delegate to a specific service method.

  • Spring的Timer和简单的JDK Timers不支持持久化/集群特性

我知道我可以使用 DB 和 Spring(甚至 JDK)定时器自己实现,但我更喜欢为此使用 3r 方库。

有什么建议吗?

最佳答案

如果您想创建作业详细信息以在运行时生成触发器/作业详细信息并且仍然能够在您的 bean 上使用 Spring DI,您可以引用 this blog post , 它展示了如何使用 SpringBeanJobFactory结合 ObjectFactoryCreatingFactoryBean 在运行时使用 Spring 注入(inject)的 bean 创建 Quartz 触发对象。

关于java - 为 spring 应用程序寻找持久计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482725/

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