Quartz在启动时运行作业

时间:2013-11-13 01:22:31

标签: java quartz-scheduler

我正在尝试在特定时间和服务器启动时每天运行一个作业,以确保数据是最新的。不幸的是我不知道如何设置石英在使用xml文件的服务器启动时运行。这是我的日程安排:

<schedule>
    <job>
        <name>UpdateDashboardStats</name>
        <group>UpdateDashboardStats</group>
        <description>Updating Dashboard Statistics</description>
        <job-class>utils.UpdateDashboardStats</job-class>
    </job>

    <trigger>
        <cron>
            <name>UpdateDashboardStats</name>
            <job-name>UpdateDashboardStats</job-name>
            <job-group>UpdateDashboardStats</job-group>
            <!-- It will run at 1am every day -->
            <cron-expression>0 0 1 * * ?</cron-expression>
        </cron>
    </trigger>
    <trigger>
        <simple>
            <name>UpdateDashboardStatsStartup</name>
            <job-name>UpdateDashboardStats</job-name>
            <job-group>UpdateDashboardStats</job-group>
            <description>Run once at startup</description>
            <misfire-instruction>SmartPolicy</misfire-instruction>
            <repeat-count>0</repeat-count>
            <repeat-interval>10</repeat-interval>
        </simple>
    </trigger>
</schedule>

2 个答案:

答案 0 :(得分:1)

我认为仅使用XML配置启动调度程序是不可能的:您还需要构建启动调度程序的实例。只需使用以下命令以编程方式启动Scheduler:

scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();
try {
    scheduler.start();
} catch (SchedulerException e) {
    logger.error("Error getting scheduler status", e);
}

这足以触发XML中定义的触发器(在quartz.properties中引用)。


..但是如果您正在使用容器(如Apache Tomcat),请使用Listener或Servlet仅使用XML启动Scheduler。请参阅this官方文档。

答案 1 :(得分:0)

正如zerologiko所提到的,Quartz调度程序必须运行才能选择石英xml。

您如何验证Quartz调度程序是否正在运行。

如果您的工作在预定时间运行,请提及。让它第一次运行会很容易。

因为你已经有了自己的工作。您可以将其作为单独的计划执行,不会重复。只执行一次