最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1. 什么是 Quartz Scheduler?

Quartz 是 Java 平臺(tái)下的一個(gè)強(qiáng)大、靈活的調(diào)度庫,它支持復(fù)雜的任務(wù)調(diào)度,包括:

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

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

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

3. Spring Boot 3 集成 Quartz 的步驟

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

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

  • Spring Web
  • Quartz Scheduler

3.2 添加 Quartz 依賴

如果使用的是手動(dòng)創(chuàng)建的項(xià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 的基本屬性,例如任務(wù)存儲(chǔ)和調(diào)度方式。

以下是 application.yml 配置示例:

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

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

3.4 創(chuàng)建一個(gè) Quartz 任務(wù)類

創(chuàng)建一個(gè)簡單的 Quartz 任務(wù)類,需要實(shí)現(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 配置任務(wù)調(diào)度器

在 Spring Boot 3 中,可以通過 @Configuration 創(chuàng)建 Quartz 的調(diào)度器,并配置定時(shí)任務(wù)的觸發(fā)器(Trigger)和任務(wù)詳情(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 方法定義了任務(wù)的基本信息,包括任務(wù)類和名稱。
  • sampleJobTrigger 方法定義了觸發(fā)器的調(diào)度策略,這里設(shè)置為每 10 秒執(zhí)行一次。

3.6 使用 Cron 表達(dá)式配置任務(wù)

除了簡單的時(shí)間間隔,還可以通過 Cron 表達(dá)式實(shí)現(xiàn)更靈活的調(diào)度。以下示例展示如何使用 Cron 表達(dá)式配置任務(wù)觸發(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();
}

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

4. 運(yùn)行應(yīng)用并查看日志

配置完成后,啟動(dòng) Spring Boot 應(yīng)用。Quartz Scheduler 會(huì)按照配置執(zhí)行 SampleJob 任務(wù)。您可以在控制臺(tái)中看到日志輸出,類似如下:

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. 動(dòng)態(tài)管理 Quartz 任務(wù)

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

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();
        }
    }
}

調(diào)用 scheduleJob 方法可以動(dòng)態(tài)地添加新的任務(wù)。類似地,使用 scheduler.pauseJob() 和 scheduler.deleteJob() 可以暫?;騽h除任務(wù)。

6. 總結(jié)

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

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

相關(guān)文章

  • Maven 多模塊父子工程的實(shí)現(xiàn)(含Spring Boot示例)

    Maven 多模塊父子工程的實(shí)現(xiàn)(含Spring Boot示例)

    這篇文章主要介紹了Maven 多模塊父子工程的實(shí)現(xiàn)(含Spring Boot示例),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Springboot配置文件加密方式

    Springboot配置文件加密方式

    文章介紹了使用Jasypt對服務(wù)器配置文件進(jìn)行加密,包括引入依賴、配置密鑰、生成密鑰、IDEA和Linux啟動(dòng)配置等步驟,解決了版本和JCE安全插件的問題
    2025-10-10
  • java避免多層嵌套循環(huán)用到的一些小技巧分享

    java避免多層嵌套循環(huán)用到的一些小技巧分享

    這篇文章主要介紹了java避免多層嵌套循環(huán)用到的一些小技巧分享,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • SpringBoot整合FastExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能的操作詳解

    SpringBoot整合FastExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能的操作詳解

    在微服務(wù)項(xiàng)目中經(jīng)常會(huì)涉及到excel的導(dǎo)入導(dǎo)出功能,隨著要處理的業(yè)務(wù)數(shù)據(jù)量越來越大,這也對程序提出了更高的要求,下面我們就來看看SpringBoot如何整合FastExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能吧
    2025-10-10
  • java中@EnableAutoConfiguration注解使用

    java中@EnableAutoConfiguration注解使用

    在Spring Boot框架中,@EnableAutoConfiguration是一種非常重要的注解,本文就來介紹一下java中@EnableAutoConfiguration注解使用,感興趣的可以了解一下
    2023-11-11
  • java ant包中的org.apache.tools.zip實(shí)現(xiàn)壓縮和解壓縮實(shí)例詳解

    java ant包中的org.apache.tools.zip實(shí)現(xiàn)壓縮和解壓縮實(shí)例詳解

    這篇文章主要介紹了java ant包中的org.apache.tools.zip實(shí)現(xiàn)壓縮和解壓縮實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java數(shù)組拷貝的四種常用方式總結(jié)

    Java數(shù)組拷貝的四種常用方式總結(jié)

    數(shù)組是 Java 最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)之一,而 數(shù)組的拷貝(復(fù)制) 是開發(fā)中經(jīng)常遇到的需求,Java 提供了多種數(shù)組復(fù)制方式,每種方式都有自己的特點(diǎn)和適用場景,本篇文章將系統(tǒng)總結(jié) Java 中 數(shù)組拷貝的 4 種常用方式,需要的朋友可以參考下
    2025-12-12
  • java如何遠(yuǎn)程加載class文件

    java如何遠(yuǎn)程加載class文件

    這篇文章主要介紹了java如何遠(yuǎn)程加載class文件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中如何調(diào)用cmd壓縮文件

    Java中如何調(diào)用cmd壓縮文件

    以下是對Java調(diào)用cmd壓縮文件的實(shí)現(xiàn)方法進(jìn)行了分析介紹,需要的朋友可以參考下
    2013-07-07
  • SpringBoot全局處理統(tǒng)一返回類型方式

    SpringBoot全局處理統(tǒng)一返回類型方式

    這篇文章主要介紹了SpringBoot全局處理統(tǒng)一返回類型方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論

北川| 赫章县| 五家渠市| 交城县| 临城县| 衢州市| 大埔县| 汉寿县| 布拖县| 县级市| 宝丰县| 安宁市| 射洪县| 呼伦贝尔市| 卓尼县| 讷河市| 伊春市| 大余县| 鹤峰县| 和静县| 涟源市| 台江县| 澄江县| 德阳市| 沙河市| 冷水江市| 栖霞市| 怀仁县| 托克逊县| 彩票| 逊克县| 双峰县| 黔西县| 通榆县| 云林县| 南丰县| 石狮市| 和硕县| 昌图县| 胶南市| 洱源县|