欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

?? 前言:定時(shí)任務(wù)和調(diào)度的應(yīng)用場(chǎng)景

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

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

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

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

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

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

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

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

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

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

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

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

2. 使用@Scheduled注解

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

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

示例:簡(jiǎn)單的定時(shí)任務(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秒后開(kāi)始,每次執(zhí)行完后間隔3秒再執(zhí)行
    @Scheduled(initialDelay = 1000, fixedDelay = 3000)
    public void runDelayedTask() {
        System.out.println("延遲任務(wù)執(zhí)行! " + System.currentTimeMillis());
    }
    // 使用Cron表達(dá)式,每天午夜12點(diǎn)執(zhí)行任務(wù)
    @Scheduled(cron = "0 0 0 * * ?")
    public void runCronTask() {
        System.out.println("Cron任務(wù)執(zhí)行! " + System.currentTimeMillis());
    }
}
  • fixedRate:每5秒執(zhí)行一次任務(wù)。
  • fixedDelay:延遲1秒后開(kāi)始,每次執(zhí)行完后延遲3秒再執(zhí)行。
  • cron:根據(jù)Cron表達(dá)式每天午夜12點(diǎn)執(zhí)行任務(wù)。

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

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

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

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

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

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

?? 方法二:使用Quartz框架

  Quartz是一個(gè)功能強(qiáng)大的定時(shí)任務(wù)調(diào)度框架,支持更復(fù)雜的調(diào)度需求,如任務(wù)的持久化、集群調(diào)度和觸發(fā)器管理等。在Spring Boot中,可以通過(guò)spring-boot-starter-quartz來(lái)集成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)存存儲(chǔ)任務(wù)(也可以使用jdbc)
spring.quartz.scheduler.instance-name=MyScheduler
spring.quartz.thread-pool.size=10

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

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

示例:創(chuàng)建一個(gè)簡(jiǎn)單的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ā)器,在此配置了一個(gè)Cron觸發(fā)器,使任務(wù)每分鐘執(zhí)行一次。

4. Quartz的高級(jí)功能

Quartz還支持一些高級(jí)功能,包括:

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

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

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

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

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

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

關(guān)鍵點(diǎn):

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

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

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

相關(guān)文章

  • 淺談SpringCloud實(shí)現(xiàn)簡(jiǎn)單的微服務(wù)架構(gòu)

    淺談SpringCloud實(shí)現(xiàn)簡(jiǎn)單的微服務(wù)架構(gòu)

    Spring Cloud是一系列框架的有序集合,本文就使用SpringCloud實(shí)現(xiàn)一套簡(jiǎn)單的微服務(wù)架構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java HttpClient用法的示例詳解

    Java HttpClient用法的示例詳解

    Java開(kāi)發(fā)語(yǔ)言中實(shí)現(xiàn)HTTP請(qǐng)求的方法主要有兩種:一種是JAVA的標(biāo)準(zhǔn)類HttpUrlConnection;另一種是第三方開(kāi)源框架HTTPClient。本文就將詳細(xì)講講Java中HttpClient的使用,需要的可以參考一下
    2022-07-07
  • java內(nèi)存分布實(shí)現(xiàn)代碼

    java內(nèi)存分布實(shí)現(xiàn)代碼

    這篇文章主要介紹了淺談Java內(nèi)存區(qū)域劃分和內(nèi)存分配策略,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Maven 構(gòu)建插件的自定義配置方式

    Maven 構(gòu)建插件的自定義配置方式

    Maven是一個(gè)強(qiáng)大的構(gòu)建工具,支持自定義配置的插件,本文介紹了如何在pom.xml中配置Maven插件,包括基本的插件配置結(jié)構(gòu)、常見(jiàn)插件的自定義配置以及如何控制插件的執(zhí)行順序,通過(guò)這些配置,開(kāi)發(fā)者可以更靈活地管理項(xiàng)目的構(gòu)建過(guò)程,提高構(gòu)建效率,感興趣的朋友一起看看吧
    2025-02-02
  • 淺談jvm中的垃圾回收策略

    淺談jvm中的垃圾回收策略

    下面小編就為大家?guī)?lái)一篇淺談jvm中的垃圾回收策略。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • druid監(jiān)控?zé)o法關(guān)閉的坑以及處理方式

    druid監(jiān)控?zé)o法關(guān)閉的坑以及處理方式

    這篇文章主要介紹了druid監(jiān)控?zé)o法關(guān)閉的坑以及處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 基于SpringBoot解析和生成CSV文件

    基于SpringBoot解析和生成CSV文件

    Apache?Commons?CSV是Apache?Commons項(xiàng)目中的一個(gè)子項(xiàng)目,專門(mén)用于處理CSV(Comma-Separated?Values,逗號(hào)分隔值)文件的Java庫(kù),CSV是一種常見(jiàn)的數(shù)據(jù)交換格式,本文給大家介紹了基于SpringBoot解析和生成CSV文件,需要的朋友可以參考下
    2024-12-12
  • spring boot多數(shù)據(jù)源動(dòng)態(tài)切換代碼實(shí)例

    spring boot多數(shù)據(jù)源動(dòng)態(tài)切換代碼實(shí)例

    這篇文章主要介紹了spring boot多數(shù)據(jù)源動(dòng)態(tài)切換代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 深入淺析ArrayList 和 LinkedList的執(zhí)行效率比較

    深入淺析ArrayList 和 LinkedList的執(zhí)行效率比較

    這篇文章主要介紹了ArrayList 和 LinkedList的執(zhí)行效率比較的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • jdk同時(shí)安裝多個(gè)版本并自由切換的技巧總結(jié)

    jdk同時(shí)安裝多個(gè)版本并自由切換的技巧總結(jié)

    在我們開(kāi)發(fā)過(guò)程有時(shí)候?yàn)榱肆私獠煌姹緅dk的框架源碼,這時(shí)候我們需要安裝不同版本的JDK來(lái)滿足我們開(kāi)發(fā)的需求,這篇文章主要介紹了jdk同時(shí)安裝多個(gè)版本并自由切換技巧的相關(guān)資料,需要的朋友可以參考下
    2025-07-07

最新評(píng)論