java - Quartz 在启动时运行作业

标签 java quartz-scheduler

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

<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>

最佳答案

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

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

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


..但如果您使用的是容器(如 Apache Tomcat),请使用监听器或 Servlet 来启动仅使用 XML 的调度程序。参见 this官方文档。

关于java - Quartz 在启动时运行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19943473/

相关文章:

java - 转发ADB端口从Android设备向PC发送数据的速度

java - 将 a^xb^x 与正则表达式匹配

grails - 如何在另一个作业完成时触发作业?

java - 禁用 JavaFX TextField 中的字符删除键

java - Android setRequestProperty 在 url.openConnection()

c# - 如何为长时间运行的作业停止 Windows 服务?

Java Quartz cron 表达式

grails - 无法从 Grails 中的 Quartz Job 访问任何 bean

java - 如何使用 Spring(和 Quartz)动态启动预定作业?

java - 如何启动内存数据库来测试 JPA 实体?