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

Spring Boot動態(tài)設置定時任務

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

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

??????? 第一個小demo:

??????? 1、新建一個springboot項目,導入依賴

    <dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
	</dependencies>

????????2、在啟動類上添加@EnableScheduling注解

@EnableScheduling	//開啟定時任務
@SpringBootApplication
public class TaskDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(TaskDemoApplication.class, args);
		System.out.println("(*^▽^*)啟動成功!!!(〃'▽'〃)");
	}

}

??????? 3、配置yml,只定義了一個端口號(端口號隨意,沒有被占用就行)

server:
  port: 8099

??????? 4、創(chuàng)建定時任務執(zhí)行時間的配置文件:task-config.ini(這一步也可以直接省略,在yml中配置),設置cron表達式

printTime.cron=0/10 * * * * ?

??????? 5、定時任務執(zhí)行類

/**
 * 定時任務執(zhí)行類
 */
@Data
@Slf4j
@Component
@PropertySource("classpath:/task-config.ini")
public class ScheduleTask implements SchedulingConfigurer {

    //方式一:
    //----------方式一從這開始----------
    @Value("${printTime.cron}")
    private String cron;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        //動態(tài)使用cron表達式設置循環(huán)間隔
        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                String s = "任務循環(huán)執(zhí)行中。。。。。。";
                log.info("Current time: {}", LocalDateTime.now() + "---->" + s);
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                //使用CronTrigger觸發(fā)器,可動態(tài)修改cron表達式來操作循環(huán)規(guī)則
                CronTrigger cronTrigger = new CronTrigger(cron);
                Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);
                return nextExecutionTime;
            }
        });

    }
    //----------方式一到這結束----------
}

??????? 6、編寫一個接口,可以通過接口動態(tài)修改定時任務的執(zhí)行時間

@Slf4j
@RestController
@RequestMapping("/")
public class TaskController {

    private final ScheduleTask scheduleTask;

    @Autowired
    public TaskController(ScheduleTask scheduleTask) {
        this.scheduleTask = scheduleTask;
    }

    //方式一
    @GetMapping("/updateCron")
    public String updateCron(String cron){
        log.info("new cron :{}",cron);
        scheduleTask.setCron(cron);
        return "ok";
    }

    //方式二
//    @GetMapping("/updateTimer")
//    public String updateTimer(Long timer){
//        log.info("new timer :{}",timer);
//        scheduleTask.setTimer(timer);
//        return "ok";
//    }
}

??????? 7、啟動項目,查看執(zhí)行結果(每10秒執(zhí)行一次)

Spring Boot動態(tài)設置定時任務

???????? 8、通過訪問接口,傳入請求參數(shù)cron表達式,設置定時任務時間為每15秒執(zhí)行一次

Spring Boot動態(tài)設置定時任務

?????? 查看結果

Spring Boot動態(tài)設置定時任務

????????搞定!

?????

cron表達式參考配置:

*/5 * * * * ? 每隔5秒執(zhí)行一次
 0 */1 * * * ? 每隔1分鐘執(zhí)行一次
 0 0 5-15 * * ? 每天5-15點整點觸發(fā)
 0 0/3 * * * ? 每三分鐘觸發(fā)一次
 0 0-5 14 * * ? 在每天下午2點到下午2:05期間的每1分鐘觸發(fā) 
 0 0/5 14 * * ? 在每天下午2點到下午2:55期間的每5分鐘觸發(fā)
 0 0/5 14,18 * * ? 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發(fā)
 0 0/30 9-17 * * ? 朝九晚五工作時間內(nèi)每半小時
 0 0 10,14,16 * * ? 每天上午10點,下午2點,4點 
 
 0 0 12 ? * WED 表示每個星期三中午12點
 0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五點
 0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44觸發(fā) 
 0 15 10 ? * MON-FRI 周一至周五的上午10:15觸發(fā)
 0 0 23 L * ? 每月最后一天23點執(zhí)行一次
 0 15 10 L * ? 每月最后一日的上午10:15觸發(fā) 
 0 15 10 ? * 6L 每月的最后一個星期五上午10:15觸發(fā) 
 0 15 10 * * ? 2005 2005年的每天上午10:15觸發(fā) 
 0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一個星期五上午10:15觸發(fā) 
 0 15 10 ? * 6#3 每月的第三個星期五上午10:15觸發(fā)


"30 * * * * ?" 每半分鐘觸發(fā)任務
"30 10 * * * ?" 每小時的10分30秒觸發(fā)任務
"30 10 1 * * ?" 每天1點10分30秒觸發(fā)任務
"30 10 1 20 * ?" 每月20號1點10分30秒觸發(fā)任務
"30 10 1 20 10 ? *" 每年10月20號1點10分30秒觸發(fā)任務
"30 10 1 20 10 ? 2011" 2011年10月20號1點10分30秒觸發(fā)任務
"30 10 1 ? 10 * 2011" 2011年10月每天1點10分30秒觸發(fā)任務
"30 10 1 ? 10 SUN 2011" 2011年10月每周日1點10分30秒觸發(fā)任務
"15,30,45 * * * * ?" 每15秒,30秒,45秒時觸發(fā)任務
"15-45 * * * * ?" 15到45秒內(nèi),每秒都觸發(fā)任務
"15/5 * * * * ?" 每分鐘的每15秒開始觸發(fā),每隔5秒觸發(fā)一次
"15-30/5 * * * * ?" 每分鐘的15秒到30秒之間開始觸發(fā),每隔5秒觸發(fā)一次
"0 0/3 * * * ?" 每小時的第0分0秒開始,每三分鐘觸發(fā)一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10點15分0秒觸發(fā)任務
"0 15 10 L * ?" 每個月最后一天的10點15分0秒觸發(fā)任務
"0 15 10 LW * ?" 每個月最后一個工作日的10點15分0秒觸發(fā)任務
"0 15 10 ? * 5L" 每個月最后一個星期四的10點15分0秒觸發(fā)任務
"0 15 10 ? * 5#3" 每個月第三周的星期四的10點15分0秒觸發(fā)任務

? 也可直接面向百度!


????????除了上面的借助cron表達式的方法,還有另一種觸發(fā)器,區(qū)別于CronTrigger觸發(fā)器,該觸發(fā)器可隨意設置循環(huán)間隔時間,不像cron表達式只能定義小于等于間隔59秒。

??????? 第二個小demo(在原有的基礎上進行操作):

??????? 1、定時任務執(zhí)行類

/**
 * 定時任務執(zhí)行類
 */
@Data
@Slf4j
@Component
@PropertySource("classpath:/task-config.ini")
public class ScheduleTask implements SchedulingConfigurer {

    @Value("${printTime.cron}")
    private String cron;

    //方式一:
    //----------方式一從這開始----------
    /*@Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        //動態(tài)使用cron表達式設置循環(huán)間隔
        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                String s = "任務循環(huán)執(zhí)行中。。。。。。";
                log.info("Current time: {}", LocalDateTime.now() + "---->" + s);
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                //使用CronTrigger觸發(fā)器,可動態(tài)修改cron表達式來操作循環(huán)規(guī)則
                CronTrigger cronTrigger = new CronTrigger(cron);
                Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);
                return nextExecutionTime;
            }
        });
    }*/
    //----------方式一到這結束----------


    //方式二:
    //----------方式二從這開始----------
    private Long timer = 10000L;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        //動態(tài)使用cron表達式設置循環(huán)間隔
        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
                String s = "任務循環(huán)執(zhí)行中。。。。。。";
                log.info("Current time: {}", LocalDateTime.now() + "---->" + s);
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                //使用CronTrigger觸發(fā)器,可動態(tài)修改cron表達式來操作循環(huán)規(guī)則
//                CronTrigger cronTrigger = new CronTrigger(cron);
//                Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);

                //使用不同的觸發(fā)器,為設置循環(huán)時間的關鍵,區(qū)別于CronTrigger觸發(fā)器,該觸發(fā)器可隨意設置循環(huán)間隔時間,單位為毫秒
                PeriodicTrigger periodicTrigger = new PeriodicTrigger(timer);
                Date nextExecutionTime = periodicTrigger.nextExecutionTime(triggerContext);
                return nextExecutionTime;
            }
        });

    }
    //----------方式二到這結束----------
}

??????? 2、增加一個修改時間的接口

@Slf4j
@RestController
@RequestMapping("/")
public class TaskController {

    private final ScheduleTask scheduleTask;

    @Autowired
    public TaskController(ScheduleTask scheduleTask) {
        this.scheduleTask = scheduleTask;
    }

    //方式一
//    @GetMapping("/updateCron")
//    public String updateCron(String cron){
//        log.info("new cron :{}",cron);
//        scheduleTask.setCron(cron);
//        return "ok";
//    }

    //方式二
    @GetMapping("/updateTimer")
    public String updateTimer(Long timer){
        log.info("new timer :{}",timer);
        scheduleTask.setTimer(timer);
        return "ok";
    }
}

??????? 3、執(zhí)行測試結果

Spring Boot動態(tài)設置定時任務

???????? 4、通過接口修改任務執(zhí)行時間

Spring Boot動態(tài)設置定時任務

???????? 查看結果

Spring Boot動態(tài)設置定時任務

???????? 完成!文章來源地址http://www.zghlxwxcb.cn/news/detail-480213.html

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

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

領支付寶紅包贊助服務器費用

相關文章

  • 用Spring Boot輕松實現(xiàn)定時任務--原理詳解

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

    2024年02月06日
    瀏覽(28)
  • Spring Boot中的@Scheduled注解:定時任務的原理與實現(xiàn)

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

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

    2024年02月22日
    瀏覽(27)
  • Spring Boot進階(68):如何用SpringBoot輕松實現(xiàn)定時任務?集成Quartz來幫你!(附源碼)

    Spring Boot進階(68):如何用SpringBoot輕松實現(xiàn)定時任務?集成Quartz來幫你!(附源碼)

    ????????Quartz是一個非常流行的開源調(diào)度框架,它提供了許多強大的功能,如定時任務調(diào)度、作業(yè)管理、任務持久化等。而SpringBoot是目前Java開發(fā)中非常流行的框架之一,其對各種開源框架集成非常方便。本篇文章將介紹如何在SpringBoot中集成Quartz,以便于更好的管理和調(diào)度

    2024年02月07日
    瀏覽(26)
  • Spring Boot定時任務

    Spring Boot定時任務

    目錄 1.概述 2.Spring Boot定時任務 2.1.快速使用 2.2.cron表達式 3.業(yè)務示例 3.1.業(yè)務描述 3.2.業(yè)務實現(xiàn) 4.實現(xiàn)原理 5.自定義線程池 在某些業(yè)務場景中,需要定時執(zhí)行一些任務,有可能是定時統(tǒng)計然后生成報表,有可能是定時發(fā)起一個任務。最近在工作中就正好遇見一個定時發(fā)起問卷

    2024年02月07日
    瀏覽(30)
  • Spring boot開啟定時任務

    ?? 使用@Scheduled 注解很方便,但缺點是當我們調(diào)整了執(zhí)行周期的時候,需要重啟應用才能生效,這多少有些不方便。為了達到實時生效的效果,那么可以使用接口來完成定時任務,統(tǒng)一將定時器信息存放在數(shù)據(jù)庫中。 1.?在mysql中執(zhí)行一下腳本插入定時任務: 2. Mapper層 3.?

    2024年02月10日
    瀏覽(25)
  • 解密Spring Boot的定時任務

    大家好!歡迎來到本篇博客,今天我們將深入探討Spring Boot中的定時任務,以及它在單線程和多線程環(huán)境下的運行機制。本文將詳細解析定時任務的工作原理,并附帶實際案例進行演示。 1. Spring Boot定時任務的基本概念 Spring Boot的定時任務是基于Quartz Scheduler實現(xiàn)的,它允許您

    2024年01月19日
    瀏覽(37)
  • Spring Boot 面試題——定時任務

    (1)定時任務是一種 在指定的時間點或時間間隔內(nèi)自動觸發(fā)執(zhí)行的任務 。它能夠周期性地執(zhí)行一些重復性、時間敏感或計劃性的操作,而無需人工干預。定時任務的需求主要有以下幾個方面: 自動化 :定時任務可以實現(xiàn)某些操作的自動化,無需人工手動執(zhí)行。這可以提高

    2024年02月08日
    瀏覽(21)
  • spring-boot定時任務

    spring-boot定時任務

    定時任務規(guī)則:0? *? *? * ? *? * 表示任意月的任意周的每天的每時的每分的0秒開始一次任務。 任務加在方法上? 開始一次任務 表示 啟動?一次方法。 0/5 *? *? 5? *? 4? 表示 每月的最后一周的第五天的任意時任意分的0秒開始 每隔5秒啟動一次任務。 定時任務表達式 還有很

    2024年01月21日
    瀏覽(32)
  • Spring Boot 3 整合 xxl-job 實現(xiàn)分布式定時任務調(diào)度,結合 Docker 容器化部署(圖文指南)

    Spring Boot 3 整合 xxl-job 實現(xiàn)分布式定時任務調(diào)度,結合 Docker 容器化部署(圖文指南)

    xxl-job 是一個分布式任務調(diào)度平臺,它提供了強大的任務調(diào)度和執(zhí)行能力,可以幫助我們實現(xiàn)任務的自動化調(diào)度和執(zhí)行。本文將介紹如何在 Docker 環(huán)境下部署 xxl-job,并將其與 Spring Boot 進行整合。 數(shù)據(jù)庫腳本:tables_xxl_job-2.4.0.sql Docker 鏡像地址: https://hub.docker.com/r/xuxueli/xxl-jo

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

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

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

    2024年01月19日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包