介绍
在这个项目中,你将学习如何使用 Quartz 框架来调度和执行一个简单的任务,该任务会提醒用户起床、刷牙和洗脸。
🎯 任务
在这个项目中,你将学习:
- 如何在
RemindJob类中实现Job接口,以定义需要执行的任务 - 如何实现
RemindScheduler类,使用 Quartz 调度器来调度和执行RemindJob - 如何编写一个测试函数来验证
RemindScheduler类的调度功能
🏆 成果
完成这个项目后,你将能够:
- 使用 Quartz 框架来调度和执行任务
- 为一个任务创建和配置
JobDetail和Trigger实例 - 启动和关闭 Quartz 调度器
- 编写测试函数来验证应用程序的功能
实现 RemindJob 类
在这一步中,你将学习如何实现 RemindJob 类,该类实现了 Quartz 框架中的 Job 接口。
打开位于
/home/labex/project/QuartzRemind/src/main/java/org/labex目录下的RemindJob.java文件。实现
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。
打开位于
/home/labex/project/QuartzRemind/src/main/java/org/labex目录下的RemindScheduler.java文件。实现
getJobDetail()方法,该方法为RemindJob创建并返回一个org.quartz.JobDetail实例。
public static JobDetail getJobDetail() {
return JobBuilder.newJob(RemindJob.class)
.withIdentity("reminderJob", "reminderGroup")
.build();
}
- 实现
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();
}
- 实现
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("调度已完成");
}
此方法启动调度器,使用 JobDetail 和 Trigger 实例调度任务,等待 10 秒,然后关闭调度器。
编写测试函数
在这一步中,你将学习如何编写一个测试函数来验证 RemindScheduler 类的调度功能。
打开位于
/home/labex/project/QuartzRemind/src/test/java/org/labex目录下的TestQuartz.java文件。实现
test()方法,该方法创建一个RemindScheduler实例并调用其doScheduler()方法。
@Test
public void test() {
try {
new RemindScheduler().doScheduler();
} catch (InterruptedException | SchedulerException e) {
e.printStackTrace();
}
}
这个测试方法将执行调度功能,并验证任务是否按预期执行。
运行测试
要运行测试并验证该项目,请按以下步骤操作:
打开一个终端,导航到
/home/labex/project/QuartzRemind目录。运行以下命令来执行测试:
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 类的调度执行了三次。
恭喜你!你已通过实现 RemindJob 和 RemindScheduler 类,并编写一个测试函数来验证调度功能,成功完成了该项目。
总结
恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。



