亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

Spring Task 定時(shí)任務(wù)

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

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

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

pom 包配置

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

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

啟動(dòng)類開(kāi)啟定時(shí)

在啟動(dòng)類上面加上 @EnableScheduling 即可開(kāi)啟定時(shí):

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

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

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

定時(shí)任務(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)計(jì)執(zhí)行的次數(shù)。

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

定時(shí)任務(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)在時(shí)間:" + dateFormat.format(new Date()));
    }
}

啟動(dòng)項(xiàng)目之后,就會(huì)在控制臺(tái)看到打印的結(jié)果。

結(jié)果如下:

INFO [   scheduling-1] com.example.timingtask.Scheduler2Task    : 現(xiàn)在時(shí)間: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)在時(shí)間: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)在時(shí)間:20:12:14
INFO [   scheduling-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 2

說(shuō)明兩個(gè)方法都按照固定 6 秒的頻率來(lái)執(zhí)行。

參數(shù)說(shuō)明

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

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

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

fixedRate 說(shuō)明:

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

cron 說(shuō)明:

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

以下是Cron表達(dá)式的基本格式:

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

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

以下是一些常見(jiàn)的Cron表達(dá)式示例:

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

并行任務(wù)

了解:

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

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

要實(shí)現(xiàn)這樣的功能,你需要去進(jì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;
    }
}

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

其它的相關(guān)代碼無(wú)需修改,運(yùn)行項(xiàng)目你會(huì)看到類似如下的日志輸出:

INFO [taskScheduler-1] com.example.timingtask.Scheduler2Task    : 現(xiàn)在時(shí)間: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)在時(shí)間: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)在時(shí)間:20:09:09
INFO [taskScheduler-4] com.example.timingtask.SchedulerTask     : this is scheduler task running 2

總結(jié)

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

相關(guān)文章

  • Java并發(fā)工具類LongAdder原理實(shí)例解析

    Java并發(fā)工具類LongAdder原理實(shí)例解析

    這篇文章主要介紹了Java并發(fā)工具類LongAdder原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • org.springframework.dao.OptimisticLockingFailureException樂(lè)觀鎖失敗的解決方法

    org.springframework.dao.OptimisticLockingFailureException樂(lè)觀鎖

    本文主要介紹了org.springframework.dao.OptimisticLockingFailureException樂(lè)觀鎖失敗的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • JDBC增刪改查和查唯一的完整代碼解析

    JDBC增刪改查和查唯一的完整代碼解析

    這篇文章主要介紹了JDBC增刪改查和查唯一的完整代碼解析,代碼分為第四部分,每部分代碼都不錯(cuò),對(duì)jdbc增刪改查操作感興趣的朋友一起學(xué)習(xí)吧
    2016-12-12
  • Spring詳細(xì)講解FactoryBean接口的使用

    Spring詳細(xì)講解FactoryBean接口的使用

    這篇文章主要為大家介紹了Spring容器FactoryBean工廠實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Spring boot從安裝到交互功能實(shí)現(xiàn)零基礎(chǔ)全程詳解

    Spring boot從安裝到交互功能實(shí)現(xiàn)零基礎(chǔ)全程詳解

    這篇文章主要介紹了Spring boot從安裝到交互功能得實(shí)現(xiàn)全程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Spring加載XSD文件發(fā)生錯(cuò)誤的解決方法

    Spring加載XSD文件發(fā)生錯(cuò)誤的解決方法

    這篇文章主要介紹了Spring加載XSD文件發(fā)生錯(cuò)誤的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • java從字符串中提取數(shù)字的簡(jiǎn)單實(shí)例

    java從字符串中提取數(shù)字的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇java從字符串中提取數(shù)字的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例

    java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例

    這篇文章主要介紹了java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能,結(jié)合完整實(shí)例形式分析了Aes加密解密功能的定義與使用方法,需要的朋友可以參考下
    2017-01-01
  • Java單例模式簡(jiǎn)單示例

    Java單例模式簡(jiǎn)單示例

    這篇文章主要介紹了Java單例模式,結(jié)合實(shí)例形式簡(jiǎn)單分析了java單例模式的定義與使用技巧,需要的朋友可以參考下
    2017-06-06
  • Jedis出現(xiàn)connection timeout問(wèn)題解決方法(JedisPool連接池使用實(shí)例)

    Jedis出現(xiàn)connection timeout問(wèn)題解決方法(JedisPool連接池使用實(shí)例)

    這篇文章主要介紹了Jedis出現(xiàn)connection timeout問(wèn)題解決方法,使用Jedis的JedisPool連接池解決了這個(gè)問(wèn)題,需要的朋友可以參考下
    2014-05-05

最新評(píng)論