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

Quartz Spring:使用JobStore将作业配置为在特定时间运行

陶炫明
2023-03-14

我正在试用Quartz调度器,并使用Maven使其与Spring一起工作。

我需要做的是将Quartz配置为存储作业,以便在计划的时间内执行作业。据我所知,石英中有两种类型的触发器,Simple和Cron。我还发现石英中有一种叫做JobStore的东西。我在某种程度上对它进行了配置。

有人能给我一个关于如何设置Quartz JobStore的好的参考资料吗?帮了大忙,谢谢。

共有3个答案

上官凯泽
2023-03-14

您通常会从工厂类创建Scheduler。Quartz可以通过多种方式设置。

>

  • 通过使用org.quartz.impl.StdSchedulerFactory.getDefaultScheduler()。如果您没有提供自己的文件,这将在Quartz发行版中加载quartz.properties文件。

    通过将配置指定为quartz中的键值对。属性文件并将其加载到组织中。石英impl。StdSchedulerFactory(java.lang.String文件名)。getScheduler()

    通过在java中指定配置。util。属性作为键值对,并将其加载到组织中。石英impl。StdSchedulerFactory(java.util.props)。getScheduler()

    通过使用Spring Framework中的spring-content-supportjar并使用更高级别的抽象,例如org.springframework.scheduling.quartz.SchedulerFactoryBean

    等。

    Quartz将仅在调用org.quartz.Scheduler#start()时开始触发作业。在调用此方法之前,Scheduler将处于待机模式。
    可以通过调用org.quartz.Scheduler#Shutdown()来销毁Scheduler以释放线程。

    @org.springframework.context.annotation.Configuration
    public class QuartzExample {
        ...
        @org.springframework.context.annotation.Bean
        public org.springframework.scheduling.quartz.SchedulerFactoryBean schedulerFactory() {
            org.springframework.scheduling.quartz.SchedulerFactoryBean factoryBean = new org.springframework.scheduling.quartz.SchedulerFactoryBean();
            return factoryBean;
        }
    }
    

    上面的bean定义足以执行以下配置:-

    1. JobFactory——默认值是Spring的org。springframework。行程安排。石英AdaptiableJobFactory,支持java。lang.Runnable对象以及标准Quartzorg。石英作业实例
    2. ThreadPool-默认值是Quartzorg。石英简单。SimpleThreadPool,池大小为10。这是通过相应的石英属性配置的
    3. SchedulerFactory——这里使用的默认值是org。石英impl。StdSchedulerFactory,读取标准的石英晶体。属性来自quartz。jar
    4. JobStore——默认使用的是org。石英简单。RAMJobStore,不支持持久性且未群集化
    5. 生命周期-组织。springframework。行程安排。石英SchedulerFactoryBean实现了组织。springframework。上下文SmartLifecycle和组织。springframework。豆。工厂DisposableBean,这意味着调度器的生命周期由Spring容器管理。org。石英调度程序#start()start()SmartLifecycle实现中在初始化和org之后调用。石英调度器#shutdown()在应用程序拆卸时的DisposableBean的destroy()实现中调用。您可以通过设置org来覆盖启动行为。springframework。行程安排。石英SchedulerFactoryBean()。设置自动启动(错误)。使用此设置,您必须手动启动计划程序

    所有这些默认设置都可以通过调用org上的各种setter方法来覆盖。springframework。行程安排。石英SchedulerFactoryBean

    我在Github上提供了一个完整的工作示例。如果您对将作业保存在数据库中的示例感兴趣,请检查同一存储库的HSQLDB分支。

  • 韩靖琪
    2023-03-14

    只是给你另一个选择,你试过Spring的任务调度吗?。现在我为此更改了所有旧的Quartz作业,并且更容易配置,您可以使用注释。

    http://spring.io/blog/2010/01/05/task-scheduling-simplifications-in-spring-3-0/

    夏朝
    2023-03-14

    您可以通过Spring框架查看Quartz JobStore的这些链接http://trimplement.com/using-spring-and-quartz-with-jobstore-properties/

    如果你还是不明白,那就告诉我

     类似资料:
    • 我的使用案例: 作业 A 设置为在星期一到星期五的 18:00 运行。 作业 B 依赖于作业 A 是否成功,但应仅在周一至周五的 06:00 运行。(周一早上的跑步将取决于周五晚上的跑步)。我更喜欢设定的时间,而不是工作之间的延迟。 在任何给定的早晨,如果我看到作业A失败(因此作业B从未运行),我希望能够运行(修复)作业A,然后立即触发作业B。 到目前为止,我发现的只是这个用例的一部分。我修改了管

    • 现在我每天下午3点运行我的cron作业 但是我想一天运行两次cron作业。上午10点30分和下午2点30分 我相信此命令将在上午 10:30 运行。我应该如何在下午 2:30 运行它?

    • 我试图设置一个作业在一个用户使用Quartz的时区的特定时间的单一执行。现在,开箱即用,告诉调度器执行时区中的任何内容的唯一方法是通过。对于Coors,我可能会将datetime转换为cron表达式,然后在第一次成功执行后立即停止触发器,但这有点难闻。 谢谢,

    • 问题内容: 我有一个在Hudson奴隶上运行的项目。我希望其中之一在Java6而不是默认值(我的环境中为Java5)下运行Ant。 在项目配置视图中,我希望找到以下两者之一: 一个显式选项,允许我设置一个自定义JDK位置以用于该项目。 一种为该项目设置自定义环境变量的方法,这将允许我将JAVA_HOME设置为JDK6位置。这将使Ant能够根据需要在Java6上运行。 有什么办法可以做到以上任一?如

    • 我需要在Java中创建一个计划作业或Cron作业,以便每天早上6点运行。有没有一个简单的方法。我曾尝试将Timer类与scheduledAtFixedRate方法一起使用,但只需要一个延迟。 有一种方法可以将一天作为第一次,然后是第二次 如何创建启动计划程序的特定日期和时间? 我的类需要运行作业已经扩展了TimerWork。

    • 问题内容: 我如何每隔15分钟在Jenkins上执行一次定时任务? 这是我尝试过的: 在詹金斯上,我有一个作业设置为使用以下cron语法每15分钟运行一次: 但是作业将每小时执行一次,而不是每15分钟执行一次。 我收到有关cron语法格式的警告: 这可能是cron作业每小时执行一次而不是15分钟执行一次的原因吗? 问题答案: 您的语法略有错误。说: 表示cron表达式与该字段的所有值匹配。 描述范