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

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

這篇具有很好參考價(jià)值的文章主要介紹了Spring Boot集成Quartz實(shí)現(xiàn)定時(shí)任務(wù)的動(dòng)態(tài)創(chuàng)建、啟動(dòng)、暫停、恢復(fù)、刪除。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、整個(gè) Quartz 的代碼流程基本基本如下:

首先需要?jiǎng)?chuàng)建我們的任務(wù)(Job),比如取消訂單、定時(shí)發(fā)送短信郵件之類的,這是我們的任務(wù)主體,也是寫業(yè)務(wù)邏輯的地方。

創(chuàng)建任務(wù)調(diào)度器(Scheduler),這是用來調(diào)度任務(wù)的,主要用于啟動(dòng)、停止、暫停、恢復(fù)等操作,也就是那幾個(gè)api的用法。

創(chuàng)建任務(wù)明細(xì)(JobDetail),最開始我們編寫好任務(wù)(Job)后,只是寫好業(yè)務(wù)代碼,并沒有觸發(fā),這里需要用JobDetail來和之前創(chuàng)建的任務(wù)(Job)關(guān)聯(lián)起來,便于執(zhí)行。

創(chuàng)建觸發(fā)器(Trigger),觸發(fā)器是來定義任務(wù)的規(guī)則的,比如幾點(diǎn)執(zhí)行,幾點(diǎn)結(jié)束,幾分鐘執(zhí)行一次等等。這里觸發(fā)器主要有兩大類(SimpleTrigger和CronTrigger)。

根據(jù)Scheduler來啟動(dòng)JobDetail與Trigger

二、進(jìn)入正題,引入依賴

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-quartz</artifactId>
  </dependency>

三、創(chuàng)建Job

需實(shí)現(xiàn)Job接口,這個(gè)接口就一個(gè)execute()方法需要重寫,方法內(nèi)容就是具體的業(yè)務(wù)邏輯。如果是動(dòng)態(tài)任務(wù)呢,比如取消訂單,每次執(zhí)行都是不同的訂單號(hào)。

這個(gè)時(shí)候就需要在創(chuàng)建任務(wù)(JobDetail)或者創(chuàng)建觸發(fā)器(Trigger)的那里傳入?yún)?shù),然后在這里通過JobExecutionContext來獲取參數(shù)進(jìn)行處理,

package com.example.demo.mquartz;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Auther: wsj
 * @Date: 2023/2/15 14:38
 * @Description: TestJob
 * @Version 1.0.0
 */
@DisallowConcurrentExecution//Job中的任務(wù)有可能并發(fā)執(zhí)行,例如任務(wù)的執(zhí)行時(shí)間過長(zhǎng),而每次觸發(fā)的時(shí)間間隔太短,則會(huì)導(dǎo)致任務(wù)會(huì)被并發(fā)執(zhí)行。如果是并發(fā)執(zhí)行,就需要一個(gè)數(shù)據(jù)庫(kù)鎖去避免一個(gè)數(shù)據(jù)被多次處理。
public class TestJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println(jobExecutionContext.getJobDetail().getJobDataMap().get("name"));
        System.out.println(jobExecutionContext.getJobDetail().getJobDataMap().get("age"));
        System.out.println(jobExecutionContext.getTrigger().getJobDataMap().get("orderNo"));
        System.out.println("定時(shí)任務(wù)執(zhí)行,當(dāng)前時(shí)間:"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }
}

四、創(chuàng)建任務(wù)調(diào)度器(Scheduler)

這里采用Spring IOC,所以直接注入完事。如果是普通的,則需通過工廠創(chuàng)建。

工廠:

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();

IOC:

@Autowired
private Scheduler scheduler;

五、創(chuàng)建任務(wù)明細(xì)(JobDetail)

/**通過JobBuilder.newJob()方法獲取到當(dāng)前Job的具體實(shí)現(xiàn)(以下均為鏈?zhǔn)秸{(diào)用)
         * 這里是固定Job創(chuàng)建,所以代碼寫死XXX.class
         * 如果是動(dòng)態(tài)的,根據(jù)不同的類來創(chuàng)建Job,則 ((Job)Class.forName("ccom.example.demo.mquartzJob").newInstance()).getClass()
         * 即是 JobBuilder.newJob(((Job)Class.forName("com.example.demo.mquartz.TestJob").newInstance()).getClass())
         * */
        JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
                /**給當(dāng)前JobDetail添加參數(shù),K V形式*/
                .usingJobData("name","zy")
                /**給當(dāng)前JobDetail添加參數(shù),K V形式,鏈?zhǔn)秸{(diào)用,可以傳入多個(gè)參數(shù),在Job實(shí)現(xiàn)類中,可以通過jobExecutionContext.getJobDetail().getJobDataMap().get("age")獲取值*/
                .usingJobData("age",23)
                /**添加認(rèn)證信息,有3種重寫的方法,我這里是其中一種,可以查看源碼看其余2種*/
                .withIdentity(orderNo)
                .build();//執(zhí)行


       

六、創(chuàng)建觸發(fā)器(Trigger)

這里主要分為兩大類SimpleTrigger、CronTrigger。

SimpleTrigger:是根據(jù)它自帶的api方法設(shè)置規(guī)則,比如每隔5秒執(zhí)行一次、每隔1小時(shí)執(zhí)行一次。

Trigger trigger = TriggerBuilder.newTrigger()
        /**給當(dāng)前JobDetail添加參數(shù),K V形式,鏈?zhǔn)秸{(diào)用,可以傳入多個(gè)參數(shù),在Job實(shí)現(xiàn)類中,可以通過jobExecutionContext.getTrigger().getJobDataMap().get("orderNo")獲取值*/
        .usingJobData("orderNo", "123456")
        /**添加認(rèn)證信息,有3種重寫的方法,我這里是其中一種,可以查看源碼看其余2種*/
        .withIdentity("我是name","我是group")
        /**立即生效*/
//      .startNow()
        /**開始執(zhí)行時(shí)間*/
        .startAt(start)
        /**結(jié)束執(zhí)行時(shí)間,不寫永久執(zhí)行*/
        .endAt(start)
        /**添加執(zhí)行規(guī)則,SimpleTrigger、CronTrigger的區(qū)別主要就在這里*/
        .withSchedule(
                SimpleScheduleBuilder.simpleSchedule()
                /**每隔3s執(zhí)行一次,api方法有好多規(guī)則自行查看*/
                .withIntervalInSeconds(3)
                /**一直執(zhí)行,如果不寫,定時(shí)任務(wù)就執(zhí)行一次*/
                .repeatForever()
        )
        .build();//執(zhí)行

CronTrigger:這就比較常用了,是基于Cron表達(dá)式來實(shí)現(xiàn)的。

CronTrigger  trigger = TriggerBuilder.newTrigger()
        /**給當(dāng)前JobDetail添加參數(shù),K V形式,鏈?zhǔn)秸{(diào)用,可以傳入多個(gè)參數(shù),在Job實(shí)現(xiàn)類中,可以通過jobExecutionContext.getTrigger().getJobDataMap().get("orderNo")獲取值*/
        .usingJobData("orderNo", "123456")
        /**添加認(rèn)證信息,有3種重寫的方法,我這里是其中一種,可以查看源碼看其余2種*/
        .withIdentity("我是name","我是group")
        /**立即生效*/
//      .startNow()
        /**開始執(zhí)行時(shí)間*/
        .startAt(start)
        /**結(jié)束執(zhí)行時(shí)間,不寫永久執(zhí)行*/
        .endAt(start)
        /**添加執(zhí)行規(guī)則,SimpleTrigger、CronTrigger的區(qū)別主要就在這里,我這里是demo,寫了個(gè)每2分鐘執(zhí)行一次*/
        .withSchedule(CronScheduleBuilder.cronSchedule("0 0/2 * * * ?"))
        .build();//執(zhí)行

注意:.startNow( )和.startAt( )這里有個(gè)坑,這兩個(gè)方法是對(duì)同一個(gè)成員變量進(jìn)行修改的 也就是說startAt和startNow同時(shí)調(diào)用的時(shí)候任務(wù)開始的時(shí)間是按后面調(diào)用的方法為主的,誰(shuí)寫在后面用誰(shuí)

    public TriggerBuilder<T> startAt(Date triggerStartTime) {
        this.startTime = triggerStartTime;
        return this;
    }

    public TriggerBuilder<T> startNow() {
        this.startTime = new Date();
        return this;
    }

七、啟動(dòng)任務(wù)

/**添加定時(shí)任務(wù)*/
scheduler.scheduleJob(jobDetail, trigger);
if (!scheduler.isShutdown()) {
    /**啟動(dòng)*/
    scheduler.start();
}

以上,任務(wù)的創(chuàng)建啟動(dòng)都完事了,后面就是任務(wù)的暫停、恢復(fù)、刪除。比較簡(jiǎn)單,大致原理就是我們?cè)趧?chuàng)建任務(wù)明細(xì)(JobDetail)和創(chuàng)建觸發(fā)器(Trigger)時(shí),會(huì)調(diào)用.withIdentity(key,group)來傳入認(rèn)證信息,后續(xù)就是根據(jù)這些認(rèn)證信息來管理任務(wù)(通過api方法)


八、任務(wù)的暫停

scheduler.pauseTrigger(TriggerKey.triggerKey("我是剛才寫的name","我是剛才寫的group"));

九、任務(wù)的恢復(fù)

scheduler.resumeTrigger(TriggerKey.triggerKey("我是剛才寫的name","我是剛才寫的group"));

根據(jù)你寫的方式來獲取。

十、任務(wù)的刪除

scheduler.pauseTrigger(TriggerKey.triggerKey("我是剛才寫的name","我是剛才寫的group"));//暫停觸發(fā)器
scheduler.unscheduleJob(TriggerKey.triggerKey("我是剛才寫的name","我是剛才寫的group"));//移除觸發(fā)器
scheduler.deleteJob(JobKey.jobKey("我是剛才寫的name","我是剛才寫的group"));//刪除Job

最后附上基本代碼,Job實(shí)現(xiàn)在上面:

package com.example.demo.mquartz;

import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.quartz.*;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @Auther: wsj
 * @Date: 2023/2/15 14:38
 * @Description: jobControler
 * @Version 1.0.0
 */
@RestController
@AllArgsConstructor
@RequestMapping("/job" )
public class jobControler {

    private Scheduler scheduler;

    @PostMapping("/Quartz")
    @ApiOperation(value = "定時(shí)任務(wù)_創(chuàng)建", notes = "創(chuàng)建")
    @ResponseBody
    public Object quartz(@RequestParam("orderNo")  String orderNo) throws Exception {
        Date start=new Date(System.currentTimeMillis() + 7 * 1000);//當(dāng)前時(shí)間7秒之后

        /**通過JobBuilder.newJob()方法獲取到當(dāng)前Job的具體實(shí)現(xiàn)(以下均為鏈?zhǔn)秸{(diào)用)
         * 這里是固定Job創(chuàng)建,所以代碼寫死XXX.class
         * 如果是動(dòng)態(tài)的,根據(jù)不同的類來創(chuàng)建Job,則 ((Job)Class.forName("ccom.example.demo.mquartzJob").newInstance()).getClass()
         * 即是 JobBuilder.newJob(((Job)Class.forName("com.example.demo.mquartz.TestJob").newInstance()).getClass())
         * */
        JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
                /**給當(dāng)前JobDetail添加參數(shù),K V形式*/
                .usingJobData("name","zy")
                /**給當(dāng)前JobDetail添加參數(shù),K V形式,鏈?zhǔn)秸{(diào)用,可以傳入多個(gè)參數(shù),在Job實(shí)現(xiàn)類中,可以通過jobExecutionContext.getJobDetail().getJobDataMap().get("age")獲取值*/
                .usingJobData("age",23)
                /**添加認(rèn)證信息,有3種重寫的方法,我這里是其中一種,可以查看源碼看其余2種*/
                .withIdentity(orderNo)
                .build();//執(zhí)行


        Trigger trigger = TriggerBuilder.newTrigger()
                /**給當(dāng)前JobDetail添加參數(shù),K V形式,鏈?zhǔn)秸{(diào)用,可以傳入多個(gè)參數(shù),在Job實(shí)現(xiàn)類中,可以通過jobExecutionContext.getTrigger().getJobDataMap().get("orderNo")獲取值*/
                .usingJobData("orderNo", orderNo)
                /**添加認(rèn)證信息,有3種重寫的方法,我這里是其中一種,可以查看源碼看其余2種*/
                .withIdentity(orderNo)
                /**立即生效*/
//      .startNow()
                /**開始執(zhí)行時(shí)間*/
                .startAt(start)
                /**結(jié)束執(zhí)行時(shí)間*/
//        .endAt(start)
                /**添加執(zhí)行規(guī)則,SimpleTrigger、CronTrigger的區(qū)別主要就在這里*/
                .withSchedule(
                        SimpleScheduleBuilder.simpleSchedule()
                                /**每隔1s執(zhí)行一次*/
                                .withIntervalInSeconds(3)
                                /**一直執(zhí)行,*/
                                .repeatForever()
                )
                .build();//執(zhí)行

//CronTrigger  trigger = TriggerBuilder.newTrigger()
//        /**給當(dāng)前JobDetail添加參數(shù),K V形式,鏈?zhǔn)秸{(diào)用,可以傳入多個(gè)參數(shù),在Job實(shí)現(xiàn)類中,可以通過jobExecutionContext.getTrigger().getJobDataMap().get("orderNo")獲取值*/
//        .usingJobData("orderNo", orderNo)
//        /**添加認(rèn)證信息,有3種重寫的方法,我這里是其中一種,可以查看源碼看其余2種*/
//        .withIdentity(orderNo)
//        /**開始執(zhí)行時(shí)間*/
//        .startAt(start)
//        /**結(jié)束執(zhí)行時(shí)間*/
//        .endAt(start)
//        /**添加執(zhí)行規(guī)則,SimpleTrigger、CronTrigger的區(qū)別主要就在這里*/
//        .withSchedule(CronScheduleBuilder.cronSchedule("* 30 10 ? * 1/5 2018"))
//        .build();//執(zhí)行


        /**添加定時(shí)任務(wù)*/
        scheduler.scheduleJob(jobDetail, trigger);
        if (!scheduler.isShutdown()) {
            /**啟動(dòng)*/
            scheduler.start();
        }
        System.err.println("--------定時(shí)任務(wù)啟動(dòng)成功 "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+" ------------");
        return "ok";
    }

    @PostMapping("/shutdown")
    @ApiOperation(value = "定時(shí)任務(wù)_停止", notes = "停止")
    @ResponseBody
    public Object shutdown(@RequestParam("orderNo")  String orderNo) throws IOException, SchedulerException {
        scheduler.pauseTrigger(TriggerKey.triggerKey(orderNo));//暫停Trigger
        return "";
    }

    @PostMapping("/resume")
    @ApiOperation(value = "定時(shí)任務(wù)_恢復(fù)", notes = "恢復(fù)")
    @ResponseBody
    public Object resume(@RequestParam("orderNo")  String orderNo) throws IOException, SchedulerException {
        scheduler.resumeTrigger(TriggerKey.triggerKey(orderNo));//恢復(fù)Trigger
        return "ok";
    }

    @PostMapping("/del")
    @ApiOperation(value = "定時(shí)任務(wù)_刪除", notes = "刪除")
    @ResponseBody
    public Object del(@RequestParam("orderNo")  String orderNo) throws IOException, SchedulerException {
        scheduler.pauseTrigger(TriggerKey.triggerKey(orderNo));//暫停觸發(fā)器
        scheduler.unscheduleJob(TriggerKey.triggerKey(orderNo));//移除觸發(fā)器
        scheduler.deleteJob(JobKey.jobKey(orderNo));//刪除Job
        return "ok";
    }
}

運(yùn)行啟動(dòng):

springboot繼承quartz,xxl-job,spring boot,java,spring,Quartz,Powered by 金山文檔
springboot繼承quartz,xxl-job,spring boot,java,spring,Quartz,Powered by 金山文檔

完事。。。。。。,如果想讓定時(shí)任務(wù)在啟動(dòng)項(xiàng)目后自動(dòng)啟動(dòng),則需要持久化任務(wù),可以把基本信息保存在數(shù)據(jù)庫(kù),項(xiàng)目啟動(dòng)時(shí)啟動(dòng)完,或者做分布式任務(wù)

源碼地址 https://gitee.com/javawsj/quartzdemo文章來源地址http://www.zghlxwxcb.cn/news/detail-675696.html

到了這里,關(guān)于Spring Boot集成Quartz實(shí)現(xiàn)定時(shí)任務(wù)的動(dòng)態(tài)創(chuàng)建、啟動(dòng)、暫停、恢復(fù)、刪除的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • boot-admin整合Quartz實(shí)現(xiàn)動(dòng)態(tài)管理定時(shí)任務(wù)

    boot-admin整合Quartz實(shí)現(xiàn)動(dòng)態(tài)管理定時(shí)任務(wù)

    淄博燒烤爆紅出了圈,當(dāng)你坐在八大局的燒烤攤,面前是火爐、烤串、小餅和蘸料,音樂響起,啤酒倒?jié)M,燒烤靈魂的party即將開場(chǎng)的時(shí)候,你系統(tǒng)中的Scheduler(調(diào)試器),也自動(dòng)根據(jù)設(shè)定的Trigger(觸發(fā)器),從容優(yōu)雅的啟動(dòng)了一系列的Job(后臺(tái)定時(shí)任務(wù))。工作一切早有安

    2023年04月26日
    瀏覽(38)
  • Spring Boot 中實(shí)現(xiàn)定時(shí)任務(wù)(quartz)功能實(shí)戰(zhàn)

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

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

    2024年01月19日
    瀏覽(24)
  • Quartz實(shí)戰(zhàn):基于Quartz實(shí)現(xiàn)定時(shí)任務(wù)的動(dòng)態(tài)調(diào)度,實(shí)現(xiàn)定時(shí)任務(wù)的增刪改查

    Quartz實(shí)戰(zhàn):基于Quartz實(shí)現(xiàn)定時(shí)任務(wù)的動(dòng)態(tài)調(diào)度,實(shí)現(xiàn)定時(shí)任務(wù)的增刪改查

    Quartz使用文檔,使用Quartz實(shí)現(xiàn)動(dòng)態(tài)任務(wù),Spring集成Quartz,Quartz集群部署,Quartz源碼分析 Quartz使用文檔,使用Quartz實(shí)現(xiàn)動(dòng)態(tài)任務(wù),Spring集成Quartz,Quartz集群部署,Quartz源碼分析 此處省略了SysJob實(shí)體類,以及Mapper等對(duì)數(shù)據(jù)庫(kù)的操作。 本文只是大致實(shí)現(xiàn)一個(gè)基于Quartz實(shí)現(xiàn)定時(shí)任務(wù)

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

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

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

    2024年02月09日
    瀏覽(26)
  • Spring Boot動(dòng)態(tài)設(shè)置定時(shí)任務(wù)

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

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

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

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

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

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

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

    2024年02月06日
    瀏覽(28)
  • C#--使用Quartz實(shí)現(xiàn)定時(shí)任務(wù)

    C#--使用Quartz實(shí)現(xiàn)定時(shí)任務(wù)

    Quartz.NET是一個(gè)開源的作業(yè)調(diào)度框架,非常適合在平時(shí)的工作中,定時(shí)輪詢數(shù)據(jù)庫(kù)同步,定時(shí)郵件通知,定時(shí)處理數(shù)據(jù)等。 Quartz.NET允許開發(fā)人員根據(jù)時(shí)間間隔(或天)來調(diào)度作業(yè)。它實(shí)現(xiàn)了作業(yè)和觸發(fā)器的多對(duì)多關(guān)系,還能把多個(gè)作業(yè)與不同的觸發(fā)器關(guān)聯(lián)。整合了Quartz.NET的應(yīng)

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

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

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

    2024年02月22日
    瀏覽(27)
  • STM32 實(shí)現(xiàn)簡(jiǎn)單定時(shí)任務(wù)調(diào)度器,動(dòng)態(tài)創(chuàng)建任務(wù),兩種思路實(shí)現(xiàn)流水燈

    STM32 實(shí)現(xiàn)簡(jiǎn)單定時(shí)任務(wù)調(diào)度器,動(dòng)態(tài)創(chuàng)建任務(wù),兩種思路實(shí)現(xiàn)流水燈

    代碼實(shí)現(xiàn)和硬件沒關(guān)系,所以并不限于STM32,Arduino 之類的其他地方也能用,只要有一個(gè)能獲取時(shí)間的函數(shù)就行,或者說,只要有一個(gè)會(huì)隨著時(shí)間自動(dòng)增加的變量就行,時(shí)間單位無所謂,所以確實(shí)想的話,拿到電腦上也能用。后面會(huì)用跑馬燈程序來說明定時(shí)任務(wù)的玩法,可以直

    2024年02月10日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包