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

springboot中設(shè)置定時(shí)任務(wù)的三種方法小結(jié)

 更新時(shí)間:2023年12月05日 09:52:14   作者:此花本應(yīng)與她  
在我們開(kāi)發(fā)項(xiàng)目過(guò)程中,經(jīng)常需要定時(shí)任務(wù)來(lái)幫助我們來(lái)做一些內(nèi)容,本文介紹了springboot中設(shè)置定時(shí)任務(wù)的三種方法,主要包括@Scheduled注解,Quartz框架和xxl-job框架的實(shí)現(xiàn),感興趣的可以了解一下

前言

springboot中設(shè)置定時(shí)任務(wù)有三種常見(jiàn)的方式,分別為:

  • 基于@Scheduled注解。
  • 基于Quartz框架。
  • 基于xxl-job框架。

下面將分別闡述下這三種方式的實(shí)現(xiàn)方式和優(yōu)缺點(diǎn)。

1. @Scheduled

介紹

@Scheduled注解是Spring Framework提供的一個(gè)非常簡(jiǎn)單的創(chuàng)建定時(shí)任務(wù)的方法,將注解添加在方法。Spring Boot會(huì)自動(dòng)配置一個(gè)任務(wù)調(diào)度器來(lái)執(zhí)行這些方法。

但需要在Spring Boot應(yīng)用的主類(lèi)或配置類(lèi)上添加@EnableScheduling注解來(lái)啟用定時(shí)任務(wù)的自動(dòng)配置。然后,你可以在任何Spring管理的bean上使用@Scheduled注解來(lái)聲明定時(shí)任務(wù)。

代碼實(shí)現(xiàn)

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

    @Scheduled(fixedRate = 5000)
    public void taskWithFixedRate() {
        // 任務(wù)邏輯
    }

    @Scheduled(cron = "0 * * * * ?")
    public void taskWithCronExpression() {
        // 任務(wù)邏輯
    }
}

@Scheduled(fixedRate = 5000)是taskWithFixedRate()方法每5秒執(zhí)行一次。

@Scheduled(cron = "0 * * * * ?")是taskWithCronExpression()方法根據(jù)cron表達(dá)式執(zhí)行。

優(yōu)點(diǎn)

  • 簡(jiǎn)單易用: 只需在方法上添加@Scheduled注解即可,無(wú)需復(fù)雜配置。
  • 無(wú)需額外依賴: Spring框架內(nèi)置支持,不需要添加額外的庫(kù)。
  • 集成度高: 與Spring生態(tài)系統(tǒng)無(wú)縫集成,易于與其他Spring組件協(xié)作。

缺點(diǎn)

  • 功能有限:不支持持久化存儲(chǔ)任務(wù)狀態(tài),不適合復(fù)雜的調(diào)度需求。
  • 不支持分布式: 無(wú)法在多個(gè)服務(wù)實(shí)例之間同步任務(wù)狀態(tài),不適合分布式系統(tǒng)。
  • 缺乏動(dòng)態(tài)控制: 任務(wù)調(diào)度一旦設(shè)定,無(wú)法在運(yùn)行時(shí)動(dòng)態(tài)修改(除非重新部署應(yīng)用)。

2. 基于Quartz框架

介紹

Quartz是一個(gè)開(kāi)源的作業(yè)調(diào)度庫(kù),可以集成到幾乎任何Java應(yīng)用程序中。它提供了豐富的調(diào)度選項(xiàng),包括一次性執(zhí)行、按照固定間隔重復(fù)執(zhí)行以及基于日歷的作業(yè)調(diào)度。

代碼實(shí)現(xiàn)

導(dǎo)入依賴

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-quartz</artifactId>
                <version>${spring.version}</version>
            </dependency>

寫(xiě)任務(wù)邏輯

package com.account.job;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;

/**
 * @author Hao
 * @date 2023-11-06 17:00
 */
@Component
public class UsernameJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 任務(wù)邏輯
    }
}

配置定時(shí)器

package com.account.config;

import com.account.job.UsernameJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Hao
 * @date 2023-11-06 14:58
 */
@Configuration
public class UsernameQuartzConfig {
    @Bean
    public JobDetail userLogJob() {
        return JobBuilder.newJob(UsernameJob.class)
                .storeDurably(true)
                .build();
    }

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

優(yōu)點(diǎn)

  • 功能強(qiáng)大: 支持復(fù)雜的調(diào)度需求,如任務(wù)持久化、事務(wù)管理、錯(cuò)過(guò)任務(wù)的處理等。
  • 支持分布式: 可以在多個(gè)節(jié)點(diǎn)上同步任務(wù)狀態(tài),適合分布式部署。
  • 靈活性: 支持動(dòng)態(tài)添加、修改和刪除任務(wù),以及更復(fù)雜的cron表達(dá)式。

缺點(diǎn)

  • 配置復(fù)雜: 相較于@Scheduled注解,Quartz需要更多的配置工作。
  • 資源消耗: 因?yàn)楣δ軓?qiáng)大,Quartz可能會(huì)消耗更多的系統(tǒng)資源。
  • 學(xué)習(xí)曲線: 對(duì)于新手來(lái)說(shuō),Quartz的API和配置可能需要一定的學(xué)習(xí)時(shí)間。

3. 基于xxl-job框架

介紹

xxl-job是一個(gè)分布式任務(wù)調(diào)度平臺(tái),其核心設(shè)計(jì)目標(biāo)是開(kāi)發(fā)簡(jiǎn)單、易擴(kuò)展、分布式的任務(wù)調(diào)度解決方案。xxl-job在企業(yè)級(jí)別的分布式任務(wù)調(diào)度場(chǎng)景中非常受歡迎。

代碼實(shí)現(xiàn)

搭建linux服務(wù):搭建教程

導(dǎo)入依賴

        <xxl-job.version>2.3.1</xxl-job.version>
            <dependency>
                <groupId>com.xuxueli</groupId>
                <artifactId>xxl-job-core</artifactId>
                <version>${xxl-job.version}</version>
            </dependency>

yml配置文件

#XXL-job配置
xxl:
  job:
    admin:
      addresses: http://192.168.133.100:9898/xxl-job-admin
    accessToken: default_token
    executor:
      # 執(zhí)行器AppName [選填]:執(zhí)行器心跳注冊(cè)分組依據(jù);為空則關(guān)閉自動(dòng)注冊(cè)
      appname: xxl-job-executor-sample
      # 執(zhí)行器端口號(hào) [選填]:小于等于0則自動(dòng)獲取;默認(rèn)端口為9999,單機(jī)部署多個(gè)執(zhí)行器時(shí),注意要配置不同執(zhí)行器端口;
      port: 9998

配置類(lèi)

package com.replication.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Hao
 * @date 2023-12-04 11:07
 */
@Configuration
public class XxlJobConfig {
    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appName;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Bean
    public XxlJobSpringExecutor xxlJobSpringExecutor() {
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setPort(port);

        return xxlJobSpringExecutor;
    }
}

注解使用

@XxlJob("helloXxl")
public void xxlJob() {
    log.debug("xxlJob運(yùn)行,當(dāng)前時(shí)間:{}", LocalDateTime.now());
}

優(yōu)點(diǎn)

  • 分布式支持: 設(shè)計(jì)之初就考慮了分布式場(chǎng)景,適合大規(guī)模分布式任務(wù)調(diào)度。
  • 任務(wù)管理: 提供了管理界面,可以方便地對(duì)任務(wù)進(jìn)行管理和監(jiān)控。
  • 高可用性: 支持故障轉(zhuǎn)移和集群部署,提高了任務(wù)調(diào)度的可靠性。
  • 擴(kuò)展性: 支持自定義任務(wù)類(lèi)型,可以根據(jù)需要擴(kuò)展任務(wù)執(zhí)行邏輯。

缺點(diǎn)

  • 依賴外部服務(wù): 需要部署xxl-job-admin服務(wù)來(lái)管理任務(wù),增加了系統(tǒng)復(fù)雜性。
  • 額外學(xué)習(xí): 需要學(xué)習(xí)xxl-job的使用和配置,與Spring Boot的集成程度不如@Scheduled注解。
  • 資源消耗: 由于提供了豐富的功能和管理界面,可能會(huì)消耗更多的資源。

總結(jié)

在選擇定時(shí)任務(wù)框架時(shí),你應(yīng)該根據(jù)你的應(yīng)用場(chǎng)景和需求來(lái)決定。如果你的應(yīng)用簡(jiǎn)單,不需要分布式調(diào)度和任務(wù)持久化,那么@Scheduled注解可能是最簡(jiǎn)單的選擇。如果你需要更復(fù)雜的調(diào)度功能,或者你的應(yīng)用是分布式的,那么Quartz或xxl-job可能更適合。xxl-job特別適合于需要集中管理和監(jiān)控任務(wù)的大型分布式系統(tǒng)。

到此這篇關(guān)于springboot中設(shè)置定時(shí)任務(wù)的三種方法小結(jié)的文章就介紹到這了,更多相關(guān)springboot 定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot自定義banner及驗(yàn)證過(guò)程

    Springboot自定義banner及驗(yàn)證過(guò)程

    這篇文章主要介紹了Springboot自定義banner及驗(yàn)證過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot測(cè)試配置屬性與web啟動(dòng)環(huán)境超詳細(xì)圖解

    SpringBoot測(cè)試配置屬性與web啟動(dòng)環(huán)境超詳細(xì)圖解

    Web開(kāi)發(fā)的核心內(nèi)容主要包括內(nèi)嵌的Servlet容器和SpringMVCSpringBoot使用起來(lái)非常簡(jiǎn)潔,大部分配置都有SpringBoot自動(dòng)裝配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • 詳解Java中字符串緩沖區(qū)StringBuffer類(lèi)的使用

    詳解Java中字符串緩沖區(qū)StringBuffer類(lèi)的使用

    StringBuffer與String類(lèi)似,只不過(guò)StringBuffer在進(jìn)行字符串處理時(shí)不生成新的對(duì)象,下面我們就來(lái)詳解Java中字符串緩沖區(qū)StringBuffer類(lèi)的使用:
    2016-06-06
  • 深入淺出Java中重試機(jī)制的多種方式

    深入淺出Java中重試機(jī)制的多種方式

    重試機(jī)制在分布式系統(tǒng)中,或者調(diào)用外部接口中,都是十分重要的。重試機(jī)制可以保護(hù)系統(tǒng)減少因網(wǎng)絡(luò)波動(dòng)、依賴服務(wù)短暫性不可用帶來(lái)的影響,讓系統(tǒng)能更穩(wěn)定的運(yùn)行的一種保護(hù)機(jī)制。本文就來(lái)和大家聊聊Java中重試機(jī)制的多種方式
    2023-03-03
  • 如何用Java結(jié)合經(jīng)緯度位置計(jì)算目標(biāo)點(diǎn)的日出日落時(shí)間詳解

    如何用Java結(jié)合經(jīng)緯度位置計(jì)算目標(biāo)點(diǎn)的日出日落時(shí)間詳解

    這篇文章主詳細(xì)講解了如何基于目標(biāo)點(diǎn)的經(jīng)緯度計(jì)算日出日落時(shí)間,提供了在線API和Java庫(kù)兩種計(jì)算方法,并通過(guò)實(shí)際案例展示了其應(yīng)用,需要的朋友可以參考下
    2025-01-01
  • SpringBoot注解梳理(小結(jié))

    SpringBoot注解梳理(小結(jié))

    這篇文章主要介紹了SpringBoot注解梳理(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • SpringBoot 創(chuàng)建容器的實(shí)現(xiàn)

    SpringBoot 創(chuàng)建容器的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot 創(chuàng)建容器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java 最重要布局管理器GridBagLayout的使用方法

    Java 最重要布局管理器GridBagLayout的使用方法

    GridBagLayout是java里面最重要的布局管理器之一,可以做出很復(fù)雜的布局,可以說(shuō)GridBagLayout是必須要學(xué)好的的,需要的朋友可以了解下
    2012-12-12
  • MybatisPlus使用Wrapper實(shí)現(xiàn)條件查詢功能

    MybatisPlus使用Wrapper實(shí)現(xiàn)條件查詢功能

    這篇文章主要介紹了MybatisPlus使用Wrapper實(shí)現(xiàn)查詢功能,使用它可以實(shí)現(xiàn)很多復(fù)雜的查詢,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • SpringBoot中使用RocketMQ的示例代碼

    SpringBoot中使用RocketMQ的示例代碼

    本文主要介紹SpringBoot中使用RocketMQ的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論