【Java】【SpringBoot】【Quartz】——3.quartz入门 (spring-boot-starter-quartz)

前面学习了quartz的基础使用:https://www.cnblogs.com/luyj00436/p/18781141

前面引用的依赖为:

1 <dependency>
2     <groupId>org.quartz-scheduler</groupId>
3     <artifactId>quartz</artifactId>
4     <version>2.3.2</version>
5 </dependency>

后续再搜索中,发现对quartz的引用还有。

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-quartz</artifactId>
4     <version>2.7.4</version>
5 </dependency>

在SpringBoot中,可以引用它作为定时器。

使用 org.springframework.boot:spring-boot-starter-quartz 的优势包括:

  • 简化配置‌。spring-boot-starter-quartz是Spring Boot官方提供的Starter,自动集成了Quartz核心库(如quartzquartz-jobs),并默认配置了与Spring容器的整合,避免了手动管理依赖版本和复杂配置的问题‌
  • 自动装配支持‌。该Starter通过SchedulerFactoryBean自动创建Scheduler实例,并支持通过application.propertiesapplication.yml文件配置Quartz属性(如线程池、数据源等),提升开发效率‌。
  • 与Spring生态兼容性‌。Starter内置了对Spring事务管理的支持,且能直接将Spring容器中的Bean注入到Quartz任务中(通过AdaptableJobFactory),确保任务逻辑与Spring Bean的无缝协作‌
  • 版本一致性‌。Spring Boot Starter会管理Quartz的版本,避免因版本冲突导致的问题。例如,Spring Boot 3.x默认集成Quartz 2.x,而直接引入原生依赖可能需手动处理版本适配‌

 接下来,重新学习quartz的引用。

 入门使用

新建SpringBoot项目,添加必要的依赖。引入依赖值。这里version与引用的SpringBoot版本一致。

引入依赖

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-quartz</artifactId>
4     <version>2.7.4</version>
5 </dependency>

添加Job任务。

定义一个需要定时调度的任务

 1 @PersistJobDataAfterExecution   // 支持持久化
 2 @DisallowConcurrentExecution    // 禁止并发执行同一任务
 3 public class HelloQuartz implements Job {
 4     /**
 5      * 测试任务
 6      * @param jobExecutionContext
 7      * @throws JobExecutionException
 8      */
 9     @Override
10     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
11         // 获取JobDetail
12         JobDetail   jobDetail = jobExecutionContext.getJobDetail();
13         JobDataMap jobDataMap = jobDetail.getJobDataMap();
14         Integer count = jobDataMap.getInt("count");
15         // 输出结果
16         System.out.println("[" + jobDetail.getKey().getGroup()  +"][" + jobDetail.getKey().getName() +"][" +count + "]:" +  LocalDateTime.now() );
17         // 增加次数
18         jobDataMap.put("count",count + 1);     // 增加次数
19     }
20 }

配置任务和定时器

 1 @Configuration
 2 public class QuartzConfig {
 3     /**
 4      * 设置一个任务1
 5      * @return
 6      * @throws SchedulerException
 7      */
 8     @Bean
 9     public JobDetail jobDetail() throws SchedulerException {
10         JobDetail jobDetail = JobBuilder.newJob(HelloQuartz.class)
11                 .withIdentity("MyJob","group1")
12                 .usingJobData("count",1)        // 共享初始化数据
13                 .storeDurably()     // 设置当前任务支持持久化
14                 .build();
15         return jobDetail;
16     }
17 
18     /**
19      * 定义触发器1Q
20      * @return
21      * @throws SchedulerException
22      */
23     @Bean
24     public Trigger trigger() throws SchedulerException {
25         Trigger trigger = TriggerBuilder.newTrigger()
26                 .forJob(jobDetail())        // 关联任务1(JobDetail)
27                 .withIdentity("MyTrigger","group1")
28                 .startNow()     // 触发器开始时间
29                 .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))    // Corn表达式,每5秒执行一次
30                 .build();
31         return trigger;
32     }
33 }

配置文件

1 spring:
2   quartz:
3     job-store-type: memory  # 使用内存存储(默认)
4     properties:
5       org.quartz.threadPool.threadCount: 5  # 线程池大小

然后启动任务,任务可以自动调用。

 

posted @ 2025-03-27 15:41  陆陆无为而治者  阅读(235)  评论(0)    收藏  举报