亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot3整合Quartz實現(xiàn)定時任務的示例

 更新時間:2024年11月17日 08:44:19   作者:CoderJia_  
Quartz 是一個開源的任務調度框架,用于在應用程序中創(chuàng)建、管理和調度定時任務,將 Quartz 和 Spring Boot 3 結合,可以輕松實現(xiàn)定時任務的靈活管理,本文將詳細介紹如何在 Spring Boot 3 項目中集成 Quartz Scheduler 并實現(xiàn)示例任務的調度,需要的朋友可以參考下

1. 什么是 Quartz Scheduler?

Quartz 是 Java 平臺下的一個強大、靈活的調度庫,它支持復雜的任務調度,包括:

  • 簡單的任務:按固定頻率或延遲執(zhí)行任務。
  • 基于 Cron 表達式的任務:支持類似于 Linux Cron 的表達式,用于定義復雜的定時任務。
  • 持久化任務:支持將任務數(shù)據(jù)持久化存儲,以便在應用程序重啟后可以恢復任務狀態(tài)。

2. Spring Boot 3 集成 Quartz Scheduler 的優(yōu)勢

  • 無縫集成:通過 Spring Boot 3 的自動配置特性,無需編寫復雜的配置即可使用 Quartz。
  • 靈活管理:支持任務的動態(tài)添加、暫停、恢復和刪除。
  • 擴展性:可以輕松擴展任務調度系統(tǒng),便于業(yè)務邏輯的復雜應用。

3. Spring Boot 3 集成 Quartz 的步驟

3.1 創(chuàng)建 Spring Boot 項目

可以使用 Spring Initializr 創(chuàng)建項目,選擇以下依賴:

  • Spring Web
  • Quartz Scheduler

3.2 添加 Quartz 依賴

如果使用的是手動創(chuàng)建的項目,可以在 pom.xml 中添加 Quartz 的依賴:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

3.3 配置 Quartz 屬性

在 application.yml 或 application.properties 文件中配置 Quartz 的基本屬性,例如任務存儲和調度方式。

以下是 application.yml 配置示例:

spring:
  application:
    name: spring-boot3-19-quartz
  quartz:
    job-store-type: memory  # 儲類型為內存存儲
    properties:
      org:
        quartz:
          threadPool:
            threadCount: 5  # 配置線程池線程數(shù)為 5
          jobStore:
            misfireThreshold: 60000  # 設置作業(yè)存儲的錯過觸發(fā)閾值為 60000 毫秒(1分鐘)

這里使用了內存存儲方式(job-store-type: memory),也可以根據(jù)需要配置數(shù)據(jù)庫存儲任務信息。

3.4 創(chuàng)建一個 Quartz 任務類

創(chuàng)建一個簡單的 Quartz 任務類,需要實現(xiàn) Job 接口,并重寫 execute 方法:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
public class SampleJob implements Job {

    private static final Logger logger = LoggerFactory.getLogger(SampleJob.class);

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("Executing Sample Job at: " + context.getFireTime());
    }
}

3.5 配置任務調度器

在 Spring Boot 3 中,可以通過 @Configuration 創(chuàng)建 Quartz 的調度器,并配置定時任務的觸發(fā)器(Trigger)和任務詳情(JobDetail)。

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail sampleJobDetail() {
        return JobBuilder.newJob(SampleJob.class)
                .withIdentity("sampleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger sampleJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10)  // 每 10 秒執(zhí)行一次
                .repeatForever();

        return TriggerBuilder.newTrigger()
                .forJob(sampleJobDetail())
                .withIdentity("sampleJobTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }
}
  • sampleJobDetail 方法定義了任務的基本信息,包括任務類和名稱。
  • sampleJobTrigger 方法定義了觸發(fā)器的調度策略,這里設置為每 10 秒執(zhí)行一次。

3.6 使用 Cron 表達式配置任務

除了簡單的時間間隔,還可以通過 Cron 表達式實現(xiàn)更靈活的調度。以下示例展示如何使用 Cron 表達式配置任務觸發(fā)器。

import org.quartz.CronScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;

@Bean
public Trigger cronJobTrigger() {
    return TriggerBuilder.newTrigger()
            .forJob(sampleJobDetail())
            .withIdentity("cronJobTrigger")
            .withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * 1/1 * ? *"))  // 每分鐘執(zhí)行一次
            .build();
}

在這個例子中,Cron 表達式 "0 0/1 * 1/1 * ? *" 表示每分鐘執(zhí)行一次任務。

4. 運行應用并查看日志

配置完成后,啟動 Spring Boot 應用。Quartz Scheduler 會按照配置執(zhí)行 SampleJob 任務。您可以在控制臺中看到日志輸出,類似如下:

2024-11-13T21:07:39.910+08:00  INFO 11984 --- [spring-boot3-18-quartz] [eduler_Worker-4] c.coderjia.boot318quartz.job.SampleJob   : Executing Sample Job at: Wed Nov 13 21:07:39 CST 2024

每 10 秒執(zhí)行一次效果:

每分鐘執(zhí)行一次效果:

5. 動態(tài)管理 Quartz 任務

可以在代碼中動態(tài)地添加、暫停、恢復和刪除任務。例如,以下是動態(tài)添加任務的示例:

package com.coderjia.boot318quartz;

import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author CoderJia
 * @create 2024/11/13 下午 09:25
 * @Description
 **/
@Service
public class QuartzService {

    private final Scheduler scheduler;

    @Autowired
    public QuartzService(Scheduler scheduler) {
        this.scheduler = scheduler;
    }

    public void scheduleJob(JobDetail jobDetail, Trigger trigger) {
        try {
            scheduler.scheduleJob(jobDetail, trigger);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void pauseJob(String jobName, String jobGroup) {
        try {
            JobKey jobKey = new JobKey(jobName, jobGroup);
            scheduler.pauseJob(jobKey);
            System.out.println("Job paused: " + jobKey);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    public void resumeJob(String jobName, String jobGroup) {
        try {
            JobKey jobKey = new JobKey(jobName, jobGroup);
            scheduler.resumeJob(jobKey);
            System.out.println("Job resumed: " + jobKey);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    public void deleteJob(String jobName, String jobGroup) {
        try {
            JobKey jobKey = new JobKey(jobName, jobGroup);
            boolean deleted = scheduler.deleteJob(jobKey);
            if (deleted) {
                System.out.println("Job deleted: " + jobKey);
            } else {
                System.out.println("Job not found: " + jobKey);
            }
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

調用 scheduleJob 方法可以動態(tài)地添加新的任務。類似地,使用 scheduler.pauseJob() 和 scheduler.deleteJob() 可以暫停或刪除任務。

6. 總結

通過將 Quartz 與 Spring Boot 3 結合,我們可以實現(xiàn)強大而靈活的定時任務調度系統(tǒng)。本文介紹了 Quartz 的基本配置和使用方法,包括如何配置任務、觸發(fā)器,以及使用 Cron 表達式實現(xiàn)復雜的調度策略。

以上就是SpringBoot3整合Quartz實現(xiàn)定時任務的示例的詳細內容,更多關于SpringBoot3 Quartz定時任務的資料請關注腳本之家其它相關文章!

相關文章

  • mybatis-plus開啟sql打印的三種方式總結

    mybatis-plus開啟sql打印的三種方式總結

    這篇文章主要給大家介紹了mybatisplus開啟sql打印的三種方式,文章通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的參考價值,需要的朋友可以參考下
    2023-11-11
  • 如何使用Java調用Linux系統(tǒng)命令

    如何使用Java調用Linux系統(tǒng)命令

    這篇文章主要介紹了如何使用Java調用Linux系統(tǒng)命令,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中WeakHashMap的弱鍵回收機制

    Java中WeakHashMap的弱鍵回收機制

    這篇文章主要介紹了Java中WeakHashMap的弱鍵回收機制,WeakHashMap繼承AbstractMap,實現(xiàn)了Map接口,和HashMap一樣,WeakHashMap也是一個散列表,它存儲的內容也是鍵值對(key-value)映射,而且鍵和值都可以是null,需要的朋友可以參考下
    2023-09-09
  • Eclipse IDE可支持Java 14編程

    Eclipse IDE可支持Java 14編程

    這篇文章主要介紹了Eclipse IDE可支持Java 14編程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • JavaFX程序初次運行創(chuàng)建數(shù)據(jù)庫并執(zhí)行建表SQL詳解

    JavaFX程序初次運行創(chuàng)建數(shù)據(jù)庫并執(zhí)行建表SQL詳解

    這篇文章主要介紹了JavaFX程序初次運行創(chuàng)建數(shù)據(jù)庫并執(zhí)行建表SQL詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集

    基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集

    這篇文章主要介紹了基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Flink實戰(zhàn)之實現(xiàn)流式數(shù)據(jù)去重

    Flink實戰(zhàn)之實現(xiàn)流式數(shù)據(jù)去重

    流式數(shù)據(jù)是一種源源不斷產(chǎn)生的數(shù)據(jù),本文探索了一種流式大數(shù)據(jù)的實時去重方法,不一定適用于所有場景,不過或許可以給面對相似問題的你一點點啟發(fā),
    2025-03-03
  • 解決eclipse上傳svn忽略target文件夾的坑

    解決eclipse上傳svn忽略target文件夾的坑

    這篇文章主要介紹了解決eclipse上傳svn忽略target文件夾的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • redis 使用lettuce 啟動內存泄漏錯誤的解決方案

    redis 使用lettuce 啟動內存泄漏錯誤的解決方案

    這篇文章主要介紹了redis 使用lettuce 啟動內存泄漏錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • java獲取文件大小的幾種方法

    java獲取文件大小的幾種方法

    這篇文章主要介紹了java獲取文件大小的幾種方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論