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

Spring Boot中使用@Scheduled和Quartz實現(xiàn)定時任務(wù)的詳細過程

 更新時間:2025年08月12日 09:55:05   作者:bug菌1  
Spring Boot提供了兩種常見的定時任務(wù)實現(xiàn)方式,一種是基于@Scheduled注解的簡單定時任務(wù),另一種是功能更強大的Quartz框架,本文將介紹如何在Spring Boot中使用這兩種方式實現(xiàn)定時任務(wù)和調(diào)度功能,感興趣的朋友一起看看吧
  • 演示環(huán)境說明:
    • 開發(fā)工具:IDEA 2021.3
    • JDK版本: JDK 1.8
    • Spring Boot版本:2.3.1 RELEASE
    • Maven版本:3.8.2
    • 操作系統(tǒng):Windows 11

?? 前言:定時任務(wù)和調(diào)度的應用場景

  定時任務(wù)和調(diào)度是現(xiàn)代應用中常見的功能,特別是在需要執(zhí)行周期性任務(wù)的情況下,例如定時備份數(shù)據(jù)、發(fā)送通知、清理臨時文件等。在微服務(wù)架構(gòu)、分布式系統(tǒng)以及大規(guī)模應用中,定時任務(wù)的管理變得更加重要。

  Spring Boot提供了兩種常見的定時任務(wù)實現(xiàn)方式:一種是基于@Scheduled注解的簡單定時任務(wù),另一種是功能更強大的Quartz框架。本文將介紹如何在Spring Boot中使用這兩種方式實現(xiàn)定時任務(wù)和調(diào)度功能。

?? 定時任務(wù)概述

  定時任務(wù)是指按照預定的時間間隔或固定的時間點執(zhí)行的任務(wù)。它可以是簡單的周期性執(zhí)行任務(wù),也可以是復雜的定時調(diào)度任務(wù)。常見的定時任務(wù)應用包括:

  1. 定期清理緩存或臨時文件
  2. 定時報告生成與發(fā)送
  3. 定期同步外部數(shù)據(jù)
  4. 定時檢查系統(tǒng)健康狀態(tài)

定時任務(wù)調(diào)度的分類

  • 固定間隔任務(wù):每隔固定時間執(zhí)行一次任務(wù)。
  • 固定時間點任務(wù):在特定的時間點執(zhí)行任務(wù)(例如每天午夜12點)。
  • 復雜調(diào)度任務(wù):需要支持更靈活調(diào)度的場景,比如Quartz調(diào)度框架。

??? 方法一:使用@Scheduled注解

  Spring Boot內(nèi)置的@Scheduled注解非常適合用于簡單的定時任務(wù),支持定時任務(wù)的執(zhí)行和控制。你只需要在方法上添加@Scheduled注解,并配置執(zhí)行的時間策略。

1. 啟用定時任務(wù)

  要使用@Scheduled注解,首先需要在Spring Boot的主類或配置類上啟用定時任務(wù)功能:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling  // 啟用定時任務(wù)功能
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • @EnableScheduling:該注解啟用Spring的定時任務(wù)調(diào)度功能。

2. 使用@Scheduled注解

@Scheduled注解可以接受多種參數(shù)來定義定時任務(wù)的執(zhí)行策略:

  • fixedRate:每隔固定時間執(zhí)行任務(wù)(單位:毫秒),無論上一個任務(wù)是否完成。
  • fixedDelay:任務(wù)結(jié)束后延遲一定時間再執(zhí)行下一次任務(wù)。
  • initialDelay:任務(wù)開始執(zhí)行前的延遲時間。
  • cron:使用Cron表達式指定任務(wù)的執(zhí)行時間。

示例:簡單的定時任務(wù)

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class SimpleScheduledTask {
    // 每5秒執(zhí)行一次
    @Scheduled(fixedRate = 5000)
    public void runTask() {
        System.out.println("任務(wù)執(zhí)行了! " + System.currentTimeMillis());
    }
    // 延遲1秒后開始,每次執(zhí)行完后間隔3秒再執(zhí)行
    @Scheduled(initialDelay = 1000, fixedDelay = 3000)
    public void runDelayedTask() {
        System.out.println("延遲任務(wù)執(zhí)行! " + System.currentTimeMillis());
    }
    // 使用Cron表達式,每天午夜12點執(zhí)行任務(wù)
    @Scheduled(cron = "0 0 0 * * ?")
    public void runCronTask() {
        System.out.println("Cron任務(wù)執(zhí)行! " + System.currentTimeMillis());
    }
}
  • fixedRate:每5秒執(zhí)行一次任務(wù)。
  • fixedDelay:延遲1秒后開始,每次執(zhí)行完后延遲3秒再執(zhí)行。
  • cron:根據(jù)Cron表達式每天午夜12點執(zhí)行任務(wù)。

3. 配置@Scheduled的參數(shù)

@Scheduled提供了靈活的配置方式,可以根據(jù)不同需求選擇合適的方式:

  • fixedRate:表示任務(wù)之間的時間間隔,單位是毫秒。
  • fixedDelay:表示任務(wù)執(zhí)行完之后,再延遲多少時間進行下次執(zhí)行。
  • cron:通過Cron表達式定義任務(wù)的具體執(zhí)行時間。

4. 定時任務(wù)的配置

  定時任務(wù)的調(diào)度機制也可以通過application.propertiesapplication.yml來進行配置,以控制執(zhí)行的間隔時間、超時等。

# application.properties配置
spring.task.scheduling.pool.size=5   # 配置線程池大小
spring.task.scheduling.shutdown.await-termination=true  # 任務(wù)完成后是否等待線程池的關(guān)閉

?? 方法二:使用Quartz框架

  Quartz是一個功能強大的定時任務(wù)調(diào)度框架,支持更復雜的調(diào)度需求,如任務(wù)的持久化、集群調(diào)度和觸發(fā)器管理等。在Spring Boot中,可以通過spring-boot-starter-quartz來集成Quartz。

1. 添加依賴

pom.xml中加入Quartz依賴:

<dependencies>
    <!-- Quartz Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-quartz</artifactId>
    </dependency>
</dependencies>

2. Quartz任務(wù)配置

首先,我們需要配置Quartz調(diào)度器,可以在application.properties中配置Quartz相關(guān)參數(shù):

# application.properties配置
spring.quartz.job-store-type=memory  # 使用內(nèi)存存儲任務(wù)(也可以使用jdbc)
spring.quartz.scheduler.instance-name=MyScheduler
spring.quartz.thread-pool.size=10

3. 創(chuàng)建Quartz任務(wù)和調(diào)度器

Quartz的任務(wù)通常需要實現(xiàn)Job接口,然后通過Scheduler進行調(diào)度。

示例:創(chuàng)建一個簡單的Quartz任務(wù)

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
@Component
public class MyQuartzJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Quartz任務(wù)執(zhí)行中... " + System.currentTimeMillis());
    }
}

示例:調(diào)度任務(wù)

import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuartzConfig {
    @Autowired
    private MyQuartzJob myQuartzJob;
    @Bean
    public JobDetail jobDetail() {
        return JobBuilder.newJob(MyQuartzJob.class)
                .withIdentity("myJob")
                .storeDurably()
                .build();
    }
    @Bean
    public Trigger trigger() {
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail())
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * * * ?")) // 每分鐘執(zhí)行一次
                .build();
    }
    @Bean
    public Scheduler scheduler() throws SchedulerException {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(jobDetail(), trigger());
        return scheduler;
    }
}
  • JobDetail:定義了任務(wù)的具體內(nèi)容。
  • Trigger:定義任務(wù)的觸發(fā)器,在此配置了一個Cron觸發(fā)器,使任務(wù)每分鐘執(zhí)行一次。

4. Quartz的高級功能

Quartz還支持一些高級功能,包括:

  • 任務(wù)持久化:通過數(shù)據(jù)庫存儲任務(wù)狀態(tài),支持任務(wù)的恢復。
  • 集群調(diào)度:在多個Quartz實例間分配任務(wù)。
  • 復雜的Cron表達式:支持靈活的調(diào)度規(guī)則。

5. 使用Quartz的高級調(diào)度功能

  Quartz能夠處理更復雜的任務(wù)調(diào)度需求。例如,可以在不同的時間點觸發(fā)不同的任務(wù),或者在某些條件滿足時自動啟動任務(wù)。

// 例如,創(chuàng)建一個復雜的Cron表達式任務(wù),控制任務(wù)的執(zhí)行時間
@Scheduled(cron = "0 0 8 * * ?") // 每天8點執(zhí)行
public void runComplexTask() {
    System.out.println("執(zhí)行復雜調(diào)度任務(wù)!");
}

? 總結(jié):Spring Boot中的定時任務(wù)與調(diào)度

  在Spring Boot中,定時任務(wù)和調(diào)度非常容易實現(xiàn)。通過@Scheduled注解,我們可以快速實現(xiàn)簡單的定時任務(wù),滿足常見的周期性任務(wù)需求。而Quartz則是一個功能更強大的調(diào)度框架,適用于更復雜的任務(wù)調(diào)度需求,支持任務(wù)持久化、集群調(diào)度等功能。

關(guān)鍵點:

  1. @Scheduled:適合簡單的定時任務(wù),支持fixedRate、fixedDelaycron等多種方式。
  2. Quartz:適用于復雜的調(diào)度任務(wù),支持任務(wù)的持久化、集群調(diào)度和靈活的Cron表達式。
  3. 調(diào)度配置:通過application.properties來配置調(diào)度相關(guān)的參數(shù),如線程池大小、任務(wù)超時等。

通過Spring Boot的定時任務(wù)和Quartz集成,我們能夠有效地管理任務(wù)調(diào)度,確保系統(tǒng)的穩(wěn)定性和可維護性。

到此這篇關(guān)于Spring Boot中使用@Scheduled和Quartz實現(xiàn)定時任務(wù)的詳細過程的文章就介紹到這了,更多相關(guān)Spring Boot定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot項目配置多個kafka的示例代碼

    springboot項目配置多個kafka的示例代碼

    這篇文章主要介紹了springboot項目配置多個kafka,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Java中BM(Boyer-Moore)算法的圖解與實現(xiàn)

    Java中BM(Boyer-Moore)算法的圖解與實現(xiàn)

    本文主要介紹了兩個大的部分,第一部分通過圖解的方式講解BM算法,第二部分則代碼實現(xiàn)一個簡易的BM算法,感興趣的小伙伴可以學習一下
    2022-05-05
  • Stream中的Peek操作代碼

    Stream中的Peek操作代碼

    這篇文章主要介紹了Stream中的Peek操作,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Spring中屬性注入的幾種方式以及復雜屬性的注入詳解

    Spring中屬性注入的幾種方式以及復雜屬性的注入詳解

    這篇文章主要介紹了Spring中屬性注入的幾種方式以及復雜屬性的注入詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 詳解如何用Java實現(xiàn)對m3u8直播流抽幀

    詳解如何用Java實現(xiàn)對m3u8直播流抽幀

    抽幀(frame extraction)是指從視頻流中提取一些特定的幀,通常是關(guān)鍵幀或者隨機幀,以供后續(xù)處理。這篇文章主要為大家介紹了如何用Java實現(xiàn)對m3u8直播流抽幀,需要的可以參考一下
    2023-03-03
  • DTD驗證xml格式的三種方式詳解

    DTD驗證xml格式的三種方式詳解

    這篇文章主要介紹了DTD驗證xml格式的三種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • java通過客戶端訪問服務(wù)器webservice的方法

    java通過客戶端訪問服務(wù)器webservice的方法

    這篇文章主要介紹了java通過客戶端訪問服務(wù)器webservice的方法,涉及java創(chuàng)建與調(diào)用webservice的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • Java計算器核心算法代碼實現(xiàn)

    Java計算器核心算法代碼實現(xiàn)

    今天小編就為大家分享一篇關(guān)于Java計算器核心算法代碼實現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Nacos簡介最新收藏版

    Nacos簡介最新收藏版

    Nacos?是阿里巴巴推出來的一個新開源項目,這是一個更易于構(gòu)建云原生應用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺,Nacos?幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺,對Nacos相關(guān)基本知識感興趣的朋友一起看看吧
    2023-08-08
  • SpringCloud Feign遠程調(diào)用實現(xiàn)詳解

    SpringCloud Feign遠程調(diào)用實現(xiàn)詳解

    Feign是Netflix公司開發(fā)的一個聲明式的REST調(diào)用客戶端; Ribbon負載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似
    2022-11-11

最新評論

竹北市| 金堂县| 乌什县| 盐源县| 勃利县| 化德县| 布尔津县| 巨鹿县| 馆陶县| 临沧市| 冕宁县| 阿城市| 黄龙县| 宜丰县| 宜都市| 丰宁| 聂拉木县| 房产| 成武县| 历史| 治县。| 偏关县| 左云县| 曲松县| 油尖旺区| 祁阳县| 德格县| 安顺市| 铜梁县| 措勤县| 南充市| 浙江省| 河曲县| 横山县| 东明县| 崇左市| 远安县| 高邮市| 百色市| 台前县| 新营市|