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

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)用的主類或配置類上添加@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>

寫任務(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)獲?。荒J(rèn)端口為9999,單機(jī)部署多個(gè)執(zhí)行器時(shí),注意要配置不同執(zhí)行器端口;
      port: 9998

配置類

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ù)類型,可以根據(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)文章

  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之在線網(wǎng)盤系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之在線網(wǎng)盤系統(tǒng)的實(shí)現(xiàn)

    這是一個(gè)使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP開(kāi)發(fā)的在線網(wǎng)盤系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有網(wǎng)盤該有的所有功能,感興趣的朋友快來(lái)看看吧
    2022-01-01
  • java數(shù)組排序示例分享

    java數(shù)組排序示例分享

    這篇文章主要介紹了java數(shù)組排序示例,需要的朋友可以參考下
    2014-03-03
  • idea中一鍵執(zhí)行maven和應(yīng)用重啟實(shí)現(xiàn)過(guò)程

    idea中一鍵執(zhí)行maven和應(yīng)用重啟實(shí)現(xiàn)過(guò)程

    文章介紹了如何在IntelliJ?IDEA中配置組合命令,實(shí)現(xiàn)一鍵執(zhí)行Maven的`clean?install`和應(yīng)用重啟,從而簡(jiǎn)化多模塊項(xiàng)目的開(kāi)發(fā)流程,通過(guò)在Run/DebugConfigurations中添加啟動(dòng)前任務(wù)并配置相應(yīng)的Maven命令,可以自動(dòng)完成清理、構(gòu)建和啟動(dòng)應(yīng)用,提高開(kāi)發(fā)效率
    2025-12-12
  • mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn)

    mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn)

    XML 文件在解析時(shí)會(huì)將五種特殊字符進(jìn)行轉(zhuǎn)義,本文主要介紹了mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java并發(fā)問(wèn)題之樂(lè)觀鎖與悲觀鎖

    Java并發(fā)問(wèn)題之樂(lè)觀鎖與悲觀鎖

    這篇文章主要介紹了Java并發(fā)問(wèn)題之樂(lè)觀鎖與悲觀鎖,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java實(shí)現(xiàn)上傳Excel文件并導(dǎo)入數(shù)據(jù)庫(kù)

    Java實(shí)現(xiàn)上傳Excel文件并導(dǎo)入數(shù)據(jù)庫(kù)

    這篇文章主要介紹了在java的基礎(chǔ)上學(xué)習(xí)上傳Excel文件并導(dǎo)出到數(shù)據(jù)庫(kù),感興趣的小伙伴不要錯(cuò)過(guò)奧
    2021-09-09
  • MyBatis 自帶連接池的具體實(shí)現(xiàn)

    MyBatis 自帶連接池的具體實(shí)現(xiàn)

    MyBatis自帶的PooledDataSource實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)連接池,適合簡(jiǎn)單場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Java之操作Redis案例講解

    Java之操作Redis案例講解

    這篇文章主要介紹了Java之操作Redis案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 三種Java求最大值的方法

    三種Java求最大值的方法

    本篇文章給大家總結(jié)了在JAVA中求最大值的三種常用方法,以及代碼做了分享,需要的朋友參考下。
    2018-02-02
  • Java Map 按key排序和按Value排序的實(shí)現(xiàn)方法

    Java Map 按key排序和按Value排序的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇Java Map 按key排序和按Value排序的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08

最新評(píng)論

贵德县| 五峰| 商河县| 贺兰县| 盐山县| 来凤县| 博兴县| 丰县| 孝义市| 通城县| 金阳县| 新竹县| 鹤岗市| 盐津县| 饶平县| 太和县| 长丰县| 盐亭县| 黎川县| 济阳县| 巍山| 渝中区| 高要市| 阿合奇县| 谷城县| 改则县| 旺苍县| 陕西省| 绵竹市| 西华县| 广德县| 江都市| 马龙县| 河津市| 方山县| 金秀| 南部县| 津市市| 白银市| 将乐县| 绥中县|