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

Spring Task定時任務(wù)使用

 更新時間:2024年08月02日 09:29:40   作者:Gambler_Tu  
這篇文章主要介紹了Spring Task定時任務(wù)使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Spring Task 定時任務(wù)

在項目開發(fā)中,經(jīng)常需要定時任務(wù)來幫助我們來做一些內(nèi)容,比如定時派息、跑批對賬、業(yè)務(wù)監(jiān)控等。

實現(xiàn)定時任務(wù)有 3 種方式:

  • java 自帶的 API:java.util.Timer 類和 java.util.TimerTask 類;
  • Quartz 框架:開源 功能強大 使用起來稍顯復(fù)雜;
  • Spring 3.0 以后自帶了 task 調(diào)度工具,也稱 Spring Task,它比 Quartz 更加的簡單方便。

pom 包配置

pom 包里面只需要引入 SpringBoot Starter 包即可,SpringBoot Starter 包中已經(jīng)內(nèi)置了定時的方法。

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

啟動類開啟定時

在啟動類上面加上 @EnableScheduling 即可開啟定時:

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

創(chuàng)建定時任務(wù)實現(xiàn)類

使用 SpringBoot 自帶的定時非常的簡單,只需要在方法上面添加 @Scheduled 注解即可。

定時任務(wù) 1:

@Component
public class SchedulerTask {
    private static final Logger log = LoggerFactory.getLogger(SchedulerTask.class);
    private int count = 0;

    @Scheduled(cron="*/6 * * * * ?")
    private void process() {
        log.info("{}", "this is scheduler task running " + (count++));
    }
}

設(shè)置 process() 每隔六秒執(zhí)行一次,并統(tǒng)計執(zhí)行的次數(shù)。

我們還有另外的一種方案來設(shè)置,固定時間周期執(zhí)行方法。

定時任務(wù) 2:

@Component
public class Scheduler2Task {
    private static final Logger log = LoggerFactory.getLogger(Scheduler2Task.class);
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 6000)
    public void reportCurrentTime() {
        log.info("{}", "現(xiàn)在時間:" + dateFormat.format(new Date()));
    }
}

啟動項目之后,就會在控制臺看到打印的結(jié)果。

結(jié)果如下:

INFO [   scheduling-1] com.example.timingtask.Scheduler2Task    : 現(xiàn)在時間:20:12:02
INFO [   scheduling-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 0
INFO [   scheduling-1] com.example.timingtask.Scheduler2Task    : 現(xiàn)在時間:20:12:08
INFO [   scheduling-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 1
INFO [   scheduling-1] com.example.timingtask.Scheduler2Task    : 現(xiàn)在時間:20:12:14
INFO [   scheduling-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 2

說明兩個方法都按照固定 6 秒的頻率來執(zhí)行。

參數(shù)說明

@Scheduled 參數(shù)可以接受兩種定時的設(shè)置

  • 一種是我們常用的 cron="*/6 * * * * ?"
  • 一種是 fixedRate = 6000

兩種都可表示固定周期執(zhí)行定時任務(wù)。

fixedRate 說明:

  • @Scheduled(fixedRate = 6000) : 上一次開始執(zhí)行時間點之后 6 秒再執(zhí)行。
  • @Scheduled(fixedDelay = 6000) : 上一次執(zhí)行完畢時間點之后 6 秒再執(zhí)行。
  • @Scheduled(initialDelay=1000, fixedRate=6000) : 第一次延遲 1 秒后執(zhí)行,之后按 fixedRate 的規(guī)則每 6 秒執(zhí)行一次。

cron 說明:

  • 用來配置定時任務(wù)的時間表達式,通常用于在Unix/Linux系統(tǒng)中設(shè)置定時任務(wù)。
  • 在Java應(yīng)用程序中,Cron表達式也被廣泛使用,比如在Quartz調(diào)度框架中用來配置定時任務(wù)的觸發(fā)時間。
  • Cron表達式由7個字段組成,分別表示秒、分鐘、小時、日期、月份、星期和年(可選)。
  • 每個字段可以包含多個取值,以逗號分隔,或者可以使用通配符和范圍來表示時間。

以下是Cron表達式的基本格式:

plaintext 秒 分 時 日 月 星期 年 其中,各字段的取值范圍如下:

  • 秒(0-59)、分鐘(0-59)、小時(0-23)、日期(1-31)、月份(1-12或者 JAN-DEC) 星期(0-7或者 SUN-SAT,0和7都代表星期日)、年(可選,留空表示每年)。

以下是一些常見的Cron表達式示例:

  • 0 0 12 * * ?:每天中午12點觸發(fā)
  • 0 0/5 * * * ?:每隔5分鐘觸發(fā)
  • 0 0 8-10 * * ?:每天上午8點至10點之間每小時觸發(fā)
  • 0 0 6,18 * * ?:每天早上6點和晚上6點觸發(fā)
  • 0 0 9 ? * MON-FRI:周一至周五的早上9點觸發(fā)

并行任務(wù)

了解:

之前的的定時任務(wù)都是串行執(zhí)行的。所謂串行執(zhí)行指的是只由一個線程來執(zhí)行任務(wù)。

除了這種方式 Spring Task 還支持并行執(zhí)行任務(wù),即由多個線程來執(zhí)行不同的任務(wù)。

要實現(xiàn)這樣的功能,你需要去進行額外的配置:

@Configuration
@EnableScheduling
public class TimingTaskConfig implements SchedulingConfigurer, AsyncConfigurer {

    // 線程池線程數(shù)量
    private static final int corePoolSize = 5;

    @Bean
    public ThreadPoolTaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.initialize(); // 初始化線程池
        scheduler.setPoolSize(corePoolSize); // 線程池容量
        return scheduler;
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setTaskScheduler(taskScheduler());
    }

    @Override
    public Executor getAsyncExecutor() {
        return taskScheduler();
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }
}

注意,這時 @EnableScheduling 注解標注在了這個配置類上,因此,Spring Boot 的入口類上就不再需要標注它了。(當(dāng)然,你硬要把它標注在入口類上其實也可以)。

其它的相關(guān)代碼無需修改,運行項目你會看到類似如下的日志輸出:

INFO [taskScheduler-1] com.example.timingtask.Scheduler2Task    : 現(xiàn)在時間:20:08:57
INFO [taskScheduler-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 0
INFO [taskScheduler-2] com.example.timingtask.Scheduler2Task    : 現(xiàn)在時間:20:09:03
INFO [taskScheduler-3] com.example.timingtask.SchedulerTask     : this is scheduler task running 1
INFO [taskScheduler-1] com.example.timingtask.Scheduler2Task    : 現(xiàn)在時間:20:09:09
INFO [taskScheduler-4] com.example.timingtask.SchedulerTask     : this is scheduler task running 2

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用JSqlParser解析SQL語句應(yīng)用場景

    Java使用JSqlParser解析SQL語句應(yīng)用場景

    JSqlParser是一個功能全面的Java庫,用于解析SQL語句,支持多種SQL方言,它可以輕松集成到Java項目中,并提供靈活的操作方式,本文介紹Java使用JSqlParser解析SQL語句總結(jié),感興趣的朋友一起看看吧
    2024-09-09
  • JAVA類變量及類方法代碼實例詳解

    JAVA類變量及類方法代碼實例詳解

    這篇文章主要介紹了JAVA類變量及類方法代碼實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 在Intellij Idea中使用jstl標簽庫的方法

    在Intellij Idea中使用jstl標簽庫的方法

    這篇文章主要介紹了在Intellij Idea中使用jstl標簽庫的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • springboot+mongodb 實現(xiàn)按日期分組分頁查詢功能

    springboot+mongodb 實現(xiàn)按日期分組分頁查詢功能

    這篇文章主要介紹了springboot+mongodb 實現(xiàn)按日期分組分頁查詢功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • 使用concurrentHashMap如何實現(xiàn)緩存

    使用concurrentHashMap如何實現(xiàn)緩存

    文章介紹了使用ConcurrentHashMap實現(xiàn)緩存的線程安全性和初始化方法,以及如何處理高并發(fā)場景下的緩存清理和數(shù)據(jù)一致性問題,包括分桶、使用ConcurrentLinkedQueue以及使用CountDownLatch來確保緩存數(shù)據(jù)的不丟失
    2025-02-02
  • JVM原理之完整的一次GC流程解讀

    JVM原理之完整的一次GC流程解讀

    這篇文章主要介紹了JVM原理之完整的一次GC流程解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java基礎(chǔ)之final關(guān)鍵字作用案例

    Java基礎(chǔ)之final關(guān)鍵字作用案例

    這篇文章主要介紹了Java基礎(chǔ)之final關(guān)鍵字作用案例,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 解決feign接口返回泛型設(shè)置屬性為null的問題

    解決feign接口返回泛型設(shè)置屬性為null的問題

    這篇文章主要介紹了解決feign接口返回泛型設(shè)置屬性為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 如何獲得spring上下文的方法總結(jié)

    如何獲得spring上下文的方法總結(jié)

    這篇文章主要介紹了如何獲得spring上下文的方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java使用FTPClient類讀寫FTP

    Java使用FTPClient類讀寫FTP

    這篇文章主要為大家詳細介紹了Java使用FTPClient類讀寫FTP的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論

马公市| 河北区| 沙河市| 景洪市| 平南县| 彩票| 抚远县| 若尔盖县| 阿尔山市| 寿宁县| 平阴县| 青川县| 新竹县| 武鸣县| 都江堰市| 循化| 咸宁市| 白玉县| 古蔺县| 山丹县| 华坪县| 富顺县| 内乡县| 衡山县| 湖口县| 巴彦淖尔市| 米林县| 九江县| 崇文区| 巴南区| 肇州县| 巩留县| 五华县| 宁安市| 礼泉县| 诸暨市| 个旧市| 吴旗县| 济宁市| 巴林右旗| 冷水江市|