使用 Quartz 框架的第一个程序

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何使用 Quartz 框架来调度和执行一个简单的任务,该任务会提醒用户起床、刷牙和洗脸。

🎯 任务

在这个项目中,你将学习:

  • 如何在 RemindJob 类中实现 Job 接口,以定义需要执行的任务
  • 如何实现 RemindScheduler 类,使用 Quartz 调度器来调度和执行 RemindJob
  • 如何编写一个测试函数来验证 RemindScheduler 类的调度功能

🏆 成果

完成这个项目后,你将能够:

  • 使用 Quartz 框架来调度和执行任务
  • 为一个任务创建和配置 JobDetailTrigger 实例
  • 启动和关闭 Quartz 调度器
  • 编写测试函数来验证应用程序的功能

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/ConcurrentandNetworkProgrammingGroup(["`Concurrent and Network Programming`"]) java/BasicSyntaxGroup -.-> java/output("`Output`") java/ProgrammingTechniquesGroup -.-> java/method_overloading("`Method Overloading`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("`Classes/Objects`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/date("`Date`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/oop("`OOP`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/interface("`Interface`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/exceptions("`Exceptions`") java/ConcurrentandNetworkProgrammingGroup -.-> java/threads("`Threads`") subgraph Lab Skills java/output -.-> lab-300366{{"`使用 Quartz 框架的第一个程序`"}} java/method_overloading -.-> lab-300366{{"`使用 Quartz 框架的第一个程序`"}} java/classes_objects -.-> lab-300366{{"`使用 Quartz 框架的第一个程序`"}} java/date -.-> lab-300366{{"`使用 Quartz 框架的第一个程序`"}} java/oop -.-> lab-300366{{"`使用 Quartz 框架的第一个程序`"}} java/interface -.-> lab-300366{{"`使用 Quartz 框架的第一个程序`"}} java/exceptions -.-> lab-300366{{"`使用 Quartz 框架的第一个程序`"}} java/threads -.-> lab-300366{{"`使用 Quartz 框架的第一个程序`"}} end

实现 RemindJob 类

在这一步中,你将学习如何实现 RemindJob 类,该类实现了 Quartz 框架中的 Job 接口。

  1. 打开位于 /home/labex/project/QuartzRemind/src/main/java/org/labex 目录下的 RemindJob.java 文件。

  2. 实现 org.quartz.Job 接口的 execute() 方法。当任务执行时,这个方法将由 Quartz 调度器调用。

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
    System.out.println("Wake up! Brush your teeth and wash your face!");
    System.out.println("Current system time - " + new Date());
}

execute() 方法应该打印提醒信息“醒来!刷牙洗脸!”以及当前系统时间。

✨ 查看解决方案并练习

实现 RemindScheduler 类

在这一步中,你将学习如何实现 RemindScheduler 类,该类用于调度和执行 RemindJob

  1. 打开位于 /home/labex/project/QuartzRemind/src/main/java/org/labex 目录下的 RemindScheduler.java 文件。

  2. 实现 getJobDetail() 方法,该方法为 RemindJob 创建并返回一个 org.quartz.JobDetail 实例。

public static JobDetail getJobDetail() {
    return JobBuilder.newJob(RemindJob.class)
         .withIdentity("reminderJob", "reminderGroup")
         .build();
}
  1. 实现 getTrigger() 方法,该方法为 RemindJob 创建并返回一个 org.quartz.Trigger 实例。触发器将每隔 2 秒重复执行任务 3 次。
public static Trigger getTrigger() {
    return TriggerBuilder.newTrigger()
         .withIdentity("reminderTrigger", "reminderGroup")
         .startNow()
         .withSchedule(SimpleScheduleBuilder.simpleSchedule()
               .withIntervalInSeconds(2)
               .withRepeatCount(2))
         .build();
}
  1. 实现 doScheduler() 方法,该方法使用 org.quartz.Scheduler 实例调度并执行 RemindJob
public void doScheduler() throws SchedulerException, InterruptedException {
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

    // 启动调度器
    scheduler.start();

    System.out.println("调度已启动");

    // 使用定义的 JobDetail 和 Trigger 调度任务
    scheduler.scheduleJob(getJobDetail(), getTrigger());

    // 休眠 10 秒
    Thread.sleep(10000);

    // 关闭调度器
    scheduler.shutdown();

    System.out.println("调度已完成");
}

此方法启动调度器,使用 JobDetailTrigger 实例调度任务,等待 10 秒,然后关闭调度器。

✨ 查看解决方案并练习

编写测试函数

在这一步中,你将学习如何编写一个测试函数来验证 RemindScheduler 类的调度功能。

  1. 打开位于 /home/labex/project/QuartzRemind/src/test/java/org/labex 目录下的 TestQuartz.java 文件。

  2. 实现 test() 方法,该方法创建一个 RemindScheduler 实例并调用其 doScheduler() 方法。

@Test
public void test() {
    try {
        new RemindScheduler().doScheduler();
    } catch (InterruptedException | SchedulerException e) {
        e.printStackTrace();
    }
}

这个测试方法将执行调度功能,并验证任务是否按预期执行。

✨ 查看解决方案并练习

运行测试

要运行测试并验证该项目,请按以下步骤操作:

  1. 打开一个终端,导航到 /home/labex/project/QuartzRemind 目录。

  2. 运行以下命令来执行测试:

mvn test

你应该会看到以下输出:

调度已启动
醒来!刷牙洗脸!
当前系统时间 - 2024年4月26日星期五06:54:03 CST
醒来!刷牙洗脸!
当前系统时间 - 2024年4月26日星期五06:54:05 CST
醒来!刷牙洗脸!
当前系统时间 - 2024年4月26日星期五06:54:07 CST
调度已完成

此输出表明 RemindJob 已按 RemindScheduler 类的调度执行了三次。

恭喜你!你已通过实现 RemindJobRemindScheduler 类,并编写一个测试函数来验证调度功能,成功完成了该项目。

✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。

您可能感兴趣的其他 Java 教程