2025年Spring Boot 定时任务五 :Quartz简单封装

Spring Boot 定时任务五 :Quartz简单封装通过前面几篇文章可以知道 quartz 的 shiy 使用其实就是 3 个步数 即 1 job 任务 2 Trigger 触发器 3 Scheduler 任务调度 在实际项目中 一个项目里往往存在不同定时需求的任务处理 如果按照上一篇文章中的方法

大家好,我是讯享网,很高兴认识大家。

通过前面几篇文章可以知道,quartz的shiy使用其实就是3个步数,即

1)job - 任务- 
2)Trigger - 触发器
3)Scheduler - 任务调度

在实际项目中,一个项目里往往存在不同定时需求的任务处理,如果按照上一篇文章中的方法,那肯定是不太好的,我们可以将quartz封装成一个工具类来使用。

一、修改服务层代码

    修改上一篇使用到的UserService,新增一个方法用于另一个任务中。  

@Service public class UserService { public void addUser() { System.out.println(">addUser"); } public void deleteUser() { System.out.println(">deleteUser"); } }

讯享网

二、创建2个定时任务Job

     1) MyJob1.java           

讯享网public class MyJob1 implements Job { @Autowired UserService userService; @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { userService.addUser(); System.out.println("任务1:"+new Date()); } }

     2) MyJob2.java 

public class MyJob2 implements Job { @Autowired UserService userService; @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { userService.deleteUser(); System.out.println("任务2:"+new Date()); } }

三、自定义AdaptableJobFactory


讯享网

    沿用上一篇的MyAdaptableJobFactory.java

四、封装QuartzScheduler

这里只编写了启动任务的方法,诸如暂停、恢复、删除任务类似。

讯享网@Component @Configuration public class QuartzSchedulerConfig { @Autowired private Scheduler scheduler; @Autowired private MyAdaptableJobFactory myAdaptableJobFactory; public <E extends Job> void startJob(String name, String group,String cron,Class<E> clz) throws SchedulerException { // 通过JobBuilder构建JobDetail实例,JobDetail规定只能是实现Job接口的实例 // JobDetail 是具体Job实例 JobDetail jobDetail = JobBuilder.newJob(clz).withIdentity(name, group).build(); // 基于表达式构建触发器 CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron); // CronTrigger表达式触发器 继承于Trigger // TriggerBuilder 用于构建触发器实例 CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(name, group) .withSchedule(cronScheduleBuilder).build(); scheduler.scheduleJob(jobDetail, cronTrigger); scheduler.setJobFactory(myAdaptableJobFactory); scheduler.start(); } }

五、创建job监听器

  继承ApplicationListener,并且要将scheduler注入;

  通过代码可以看出,任务MyJob1每隔2秒执行一次,任务MyJob2每隔4秒执行一次;

@Configuration public class QuartzStartJobListener implements ApplicationListener<ContextRefreshedEvent> { @Autowired private QuartzSchedulerConfig quartzScheduler; @Override public void onApplicationEvent(ContextRefreshedEvent arg0) { try { quartzScheduler.startJob("job1", "group1", "0/2 * * * * ?", MyJob1.class); quartzScheduler.startJob("job2", "group2", "0/4 * * * * ?", MyJob2.class); } catch (SchedulerException e) { e.printStackTrace(); } } / * 初始注入scheduler * @return * @throws SchedulerException */ @Bean public Scheduler scheduler() throws SchedulerException{ SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory(); return schedulerFactoryBean.getScheduler(); } }

六、运行项目

从控制台可以看出结果符合预期

小讯
上一篇 2025-03-18 12:42
下一篇 2025-01-09 09:19

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/31343.html