国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot定時任務(wù)

這篇具有很好參考價值的文章主要介紹了Spring Boot定時任務(wù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目錄

1.概述

2.Spring Boot定時任務(wù)

2.1.快速使用

2.2.cron表達(dá)式

3.業(yè)務(wù)示例

3.1.業(yè)務(wù)描述

3.2.業(yè)務(wù)實(shí)現(xiàn)

4.實(shí)現(xiàn)原理

5.自定義線程池


1.概述

在某些業(yè)務(wù)場景中,需要定時執(zhí)行一些任務(wù),有可能是定時統(tǒng)計然后生成報表,有可能是定時發(fā)起一個任務(wù)。最近在工作中就正好遇見一個定時發(fā)起問卷任務(wù)的一個業(yè)務(wù)場景,此處集合業(yè)務(wù)場景聊聊如何用spring boot來實(shí)現(xiàn)功能。

2.Spring Boot定時任務(wù)

2.1.快速使用

spring boot支持了定時任務(wù),通過很簡單的配置就可以使用。

依賴:

定時任務(wù)是spring boot框架提供的基礎(chǔ)能力之一,所以其依賴是在spring-boot-starter里面,但是一般開發(fā)的時候我們直接引入web依賴即可,web依賴中包含了spring-boot-starter。要注意的是Spring Boot 從版本1.3.0開始提供對定時任務(wù)的支持,本文用的依賴默認(rèn)是支持定時任務(wù)的版本。

<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

開啟定時任務(wù):

Spring Boot定時任務(wù)

任務(wù)內(nèi)容:

Spring Boot定時任務(wù)

2.2.cron表達(dá)式

spring boot中是使用cron表達(dá)式來定義定時任務(wù)的執(zhí)行條件的。cron表達(dá)式由6個字段組成,分別表示秒、分、時、日、月、周幾。每個字段都可以接受特定的取值范圍或通配符來表示時間的匹配規(guī)則。

下面是cron表達(dá)式的每個字段的含義和可接受的取值:

  1. 秒(0-59)
  2. 分鐘(0-59)
  3. 小時(0-23)
  4. 日(1-31)
  5. 月(1-12或JAN-DEC)
  6. 周幾(0-7或SUN-SAT,其中0和7都表示周日)

除了具體的取值范圍,cron表達(dá)式還支持一些特殊字符和符號:

  • 星號(*):表示匹配任意值。例如,使用星號在秒字段中,表示任務(wù)在每一秒都會被觸發(fā)。
  • 問號(?):僅在日期和周幾字段中使用,表示不指定具體的值。如果你想在日期字段中匹配任意值,但同時又想在周幾字段中指定具體值,就可以使用問號。
  • 斜線(/):用于指定增量。例如,在分鐘字段中使用5/10,表示從第5分鐘開始,每隔10分鐘觸發(fā)一次。
  • 逗號(,):用于列舉多個值。例如,在周幾字段中使用1,3,5,表示任務(wù)在周一、周三和周五觸發(fā)。
  • 連接符(-):用于指定范圍。例如,在小時字段中使用9-17,表示任務(wù)在9點(diǎn)到17點(diǎn)之間觸發(fā)。

以下是一些示例cron表達(dá)式的用法:

  • 0 0 0 * * *:每天凌晨執(zhí)行任務(wù)
  • 0 0/5 * * * *:每隔5分鐘執(zhí)行任務(wù)
  • 0 0 9-17 * * MON-FRI:周一至周五的9點(diǎn)到17點(diǎn)之間每小時執(zhí)行任務(wù)

3.業(yè)務(wù)示例

3.1.業(yè)務(wù)描述

需求:

  • 管理人員新建一個問卷調(diào)查任務(wù),任務(wù)在固定時間發(fā)起,固定時間結(jié)束。
  • 任務(wù)開始后,系統(tǒng)的每個用戶會收到一份問卷
  • 任務(wù)結(jié)束后,用戶不可再答題

實(shí)體關(guān)系:

整個實(shí)體關(guān)系很簡單,就是一個任務(wù)一種模板,一個任務(wù)多份問卷,一個模板N份問卷,一個問卷一個用戶。

問卷里記錄了模板內(nèi)容、任務(wù)ID、用戶ID。

Spring Boot定時任務(wù)

3.2.業(yè)務(wù)實(shí)現(xiàn)

問卷調(diào)查任務(wù)類:

這里使用JPA去訪問數(shù)據(jù)庫

@Entity
@Table(name = "survey_task")
public class SurveyTask {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String taskName;

    private LocalDateTime startTime;

    // 其他屬性和對應(yīng)的getter/setter方法
}

定時任務(wù):

這里只是簡單的寫了一下定時任務(wù)的邏輯,實(shí)際的代碼實(shí)現(xiàn)從簡。

@Service
public class SurveyTaskScheduler {

    @Autowired
    private SurveyTaskRepository surveyTaskRepository;

    @Scheduled(cron = "0 0 0 * * *") // 每天凌晨執(zhí)行
    public void distributeSurveyTemplates() {
        LocalDate today = LocalDate.now();
        LocalDateTime startOfDay = today.atStartOfDay();

        List<SurveyTask> surveyTasks = surveyTaskRepository.findByStartTime(startOfDay);

        for (SurveyTask task : surveyTasks) {
            // 根據(jù)任務(wù)分發(fā)問卷模板給用戶的邏輯
            // ...
            System.out.println("分發(fā)問卷模板給用戶: " + task.getTaskName());
        }
    }
}

啟動定時任務(wù):

@SpringBootApplication
@EnableScheduling
public class MyApp {

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

4.實(shí)現(xiàn)原理

spring boot的定時任務(wù)底層其實(shí)就是使用線程池來實(shí)現(xiàn)的,其流程如下:

  1. 首先,Spring Boot 根據(jù)配置文件中的屬性創(chuàng)建一個 TaskScheduler(如果沒有自定義線程池會使用默認(rèn)線程池ThreadPoolTaskScheduler)實(shí)例作為調(diào)度器,并設(shè)置線程池的相關(guān)屬性,例如核心線程數(shù)、最大線程數(shù)、隊列容量等。

  2. 當(dāng)應(yīng)用啟動時,Spring Boot 會掃描所有被 @Scheduled 注解標(biāo)記的方法,并將這些方法注冊為定時任務(wù)。

  3. 當(dāng)定時任務(wù)的觸發(fā)條件滿足時,調(diào)度器將從線程池中選擇一個線程來執(zhí)行任務(wù)。

  4. 執(zhí)行任務(wù)時,調(diào)度器會通過 TaskExecutor(默認(rèn)為 ThreadPoolTaskExecutor)實(shí)例來執(zhí)行任務(wù)。它會從線程池中選擇一個空閑的線程來執(zhí)行被 @Scheduled 注解標(biāo)記的方法。

  5. 執(zhí)行完成后,線程將返回到線程池中等待下一次調(diào)度。

5.自定義線程池

如果在 Spring Boot 中沒有顯式配置線程池,那么會使用默認(rèn)的線程池配置。但是有時候可能我們也需要自定義線程池,自定義線程池的示例如下:

@Configuration
public class CustomThreadPoolConfig {
    
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(10); // 設(shè)置線程池大小
        // 設(shè)置其他線程池屬性,如隊列容量、線程名前綴等
        
        return scheduler;
    }
}


?文章來源地址http://www.zghlxwxcb.cn/news/detail-466764.html

到了這里,關(guān)于Spring Boot定時任務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Boot動態(tài)設(shè)置定時任務(wù)

    Spring Boot動態(tài)設(shè)置定時任務(wù)

    ??????? spring boot項(xiàng)目實(shí)現(xiàn)定時任務(wù),最簡單的一種就是基于注解 @Schedule 的方式,在啟動類上添加 @EnableScheduling 注解進(jìn)行標(biāo)注,就可實(shí)現(xiàn)。但是,這個方式有個缺點(diǎn),那就是執(zhí)行周期寫死在代碼里,無法動態(tài)改變,想要改變只能修改代碼再重新部署啟動。為了能夠動態(tài)的

    2024年02月08日
    瀏覽(21)
  • Spring Boot如何實(shí)現(xiàn)定時任務(wù)調(diào)度?

    Spring Boot如何實(shí)現(xiàn)定時任務(wù)調(diào)度?

    Spring Boot提供了非常方便的方式來實(shí)現(xiàn)定時任務(wù)調(diào)度,我們可以使用Spring框架自帶的 @Scheduled 注解來實(shí)現(xiàn)。在本文中,我們將介紹如何使用 @Scheduled 注解進(jìn)行定時任務(wù)調(diào)度。 在Web應(yīng)用程序中,我們經(jīng)常需要定時執(zhí)行一些任務(wù),例如定時清理緩存、定時發(fā)送郵件等。這些任務(wù)通

    2024年02月07日
    瀏覽(43)
  • Spring Boot 實(shí)現(xiàn)定時任務(wù)動態(tài)管理,太爽了!

    Spring Boot 實(shí)現(xiàn)定時任務(wù)動態(tài)管理,太爽了!

    SpringBoot的定時任務(wù)的加強(qiáng)工具,實(shí)現(xiàn)對SpringBoot原生的定時任務(wù)進(jìn)行動態(tài)管理,完全兼容原生@Scheduled注解,無需對原本的定時任務(wù)進(jìn)行修改 具體的功能已經(jīng)封裝成SpringBoot-starter即插即用: 使用方法和源碼: 碼云:https://gitee.com/qiaodaimadewangcai/super-scheduled github:https://github.com/g

    2024年02月09日
    瀏覽(26)
  • 用Spring Boot輕松實(shí)現(xiàn)定時任務(wù)--原理詳解

    ??在現(xiàn)代化的web開發(fā)中,定時任務(wù)是一個非常常見的功能。Spring Boot為我們提供了一個簡便的方式來處理這些任務(wù),我們只需加入一些注解和配置即可完成。本文將介紹 Spring Boot 定時任務(wù)的基本概念和原理,以及如何在具體業(yè)務(wù)場景中使用和優(yōu)化配置。 ??定時任務(wù)是指在

    2024年02月06日
    瀏覽(28)
  • Spring Boot 中實(shí)現(xiàn)定時任務(wù)(quartz)功能實(shí)戰(zhàn)

    Spring Boot 中實(shí)現(xiàn)定時任務(wù)(quartz)功能實(shí)戰(zhàn)

    ??作者簡介,普修羅雙戰(zhàn)士,一直追求不斷學(xué)習(xí)和成長,在技術(shù)的道路上持續(xù)探索和實(shí)踐。 ??多年互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 ??歡迎 ??點(diǎn)贊?評論?收藏 ?? SpringBoot 領(lǐng)域知識 ?? 鏈接 專欄 SpringBoot 專業(yè)知識學(xué)習(xí)一 SpringBoot專欄 Sprin

    2024年01月19日
    瀏覽(24)
  • Spring Boot中的@Scheduled注解:定時任務(wù)的原理與實(shí)現(xiàn)

    Spring Boot中的@Scheduled注解:定時任務(wù)的原理與實(shí)現(xiàn)

    本文將詳細(xì)探討Spring Boot中@Scheduled注解的使用,包括其原理、實(shí)現(xiàn)流程、步驟和代碼示例。通過本文,讀者將能夠了解如何在Spring Boot應(yīng)用中輕松創(chuàng)建和管理定時任務(wù)。 在Spring框架中,@Scheduled注解用于標(biāo)記一個方法,使其能夠在固定的時間間隔內(nèi)自動執(zhí)行。這個注解主要基于

    2024年02月22日
    瀏覽(27)
  • Spring Boot集成Quartz實(shí)現(xiàn)定時任務(wù)的動態(tài)創(chuàng)建、啟動、暫停、恢復(fù)、刪除

    Spring Boot集成Quartz實(shí)現(xiàn)定時任務(wù)的動態(tài)創(chuàng)建、啟動、暫停、恢復(fù)、刪除

    一、整個 Quartz 的代碼流程基本基本如下: 首先需要創(chuàng)建我們的任務(wù)(Job),比如取消訂單、定時發(fā)送短信郵件之類的,這是我們的任務(wù)主體,也是寫業(yè)務(wù)邏輯的地方。 創(chuàng)建任務(wù)調(diào)度器(Scheduler),這是用來調(diào)度任務(wù)的,主要用于啟動、停止、暫停、恢復(fù)等操作,也就是那幾個api的

    2024年02月11日
    瀏覽(21)
  • 定時任務(wù)特輯 | Quartz、xxl-job、elastic-job、Cron四個定時任務(wù)框架對比,和Spring Boot集成實(shí)戰(zhàn)

    定時任務(wù)特輯 | Quartz、xxl-job、elastic-job、Cron四個定時任務(wù)框架對比,和Spring Boot集成實(shí)戰(zhàn)

    專欄集錦,大佬們可以收藏以備不時之需: Spring Cloud 專欄: Python 專欄: Redis 專欄: TensorFlow 專欄: Logback 專欄: 量子計算: 量子計算 | 解密著名量子算法Shor算法和Grover算法 AI機(jī)器學(xué)習(xí)實(shí)戰(zhàn): AI機(jī)器學(xué)習(xí)實(shí)戰(zhàn) | 使用 Python 和 scikit-learn 庫進(jìn)行情感分析 AI機(jī)器學(xué)習(xí) | 基于lib

    2024年02月05日
    瀏覽(41)
  • Spring Boot進(jìn)階(69):輕松實(shí)現(xiàn)定時任務(wù)持久化!SpringBoot集成quartz帶你玩轉(zhuǎn)定時任務(wù)刪除、暫停、獲取等操作!【附項(xiàng)目源碼】

    Spring Boot進(jìn)階(69):輕松實(shí)現(xiàn)定時任務(wù)持久化!SpringBoot集成quartz帶你玩轉(zhuǎn)定時任務(wù)刪除、暫停、獲取等操作!【附項(xiàng)目源碼】

    ????????現(xiàn)如今,隨著市場競爭加劇,各個企業(yè)都在不斷尋求提高效率、降低成本的方法,此時使用自動化工具已成為必不可少的選擇。而在眾多的自動化工具中,定時任務(wù)已經(jīng)成為一項(xiàng)必備工具,而Quartz就是一個非常好用的定時任務(wù)框架,它的輕量級、高可靠性、易于使

    2024年02月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包