欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot定時任務(wù)的實現(xiàn)詳解

 更新時間:2024年01月08日 10:07:23   作者:探索er  
這篇文章主要介紹了SpringBoot定時任務(wù)的實現(xiàn)詳解,定時任務(wù)是企業(yè)級開發(fā)中最常見的功能之一,如定時統(tǒng)計訂單數(shù)、數(shù)據(jù)庫備份、定時發(fā)送短信和郵件、定時統(tǒng)計博客訪客等,簡單的定時任務(wù)可以直接通過Spring中的@Scheduled注解來實現(xiàn),需要的朋友可以參考下

前言

定時任務(wù)是企業(yè)級開發(fā)中最常見的功能之一,如定時統(tǒng)計訂單數(shù)、數(shù)據(jù)庫備份、定時發(fā)送短信和郵件、定時統(tǒng)計博客訪客等。

簡單的定時任務(wù)可以直接通過Spring中的@Scheduled注解來實現(xiàn),復雜的定時任務(wù)則可以通過集成Quartz來實現(xiàn),下面分別予以介紹。

1. @Scheduled

@Scheduled是由Spring提供的定時任務(wù)注解,使用方便,配置簡單,可以解決工作中大部分的定時任務(wù)需求,使用方式如下:

1.1 創(chuàng)建工程

首先創(chuàng)建一個普通的Spring Boot Web工程,添加Web依賴即可,代碼如下:

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

1.2 開啟定時任務(wù)

在項目啟動類上添加@EnableScheduling注解開啟定時任務(wù),代碼如下:

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

1.3 配置定時任務(wù)

定時任務(wù)主要通過@Scheduled注解進行配置,代碼如下:

@Component
public class MySchedule {
    // 當前任務(wù)執(zhí)行結(jié)束1秒后開啟另一個任務(wù)
    @Scheduled(fixedDelay = 1000)
    public void fixedDelay() {
        System.out.println("fixedDelay:"+new Date());
    }
    // 當前任務(wù)開始執(zhí)行2秒后開啟另一個定時任務(wù)
    @Scheduled(fixedRate = 2000)
    public void fixedRate() {
        System.out.println("fixedRate:"+new Date());
    }
    // 當前任務(wù)開始執(zhí)行2秒后開啟另一個定時任務(wù),并且首次延遲1秒執(zhí)行
    @Scheduled(initialDelay = 1000, fixedRate = 2000)
    public void initialDelay() {
        System.out.println("initialDelay:"+new Date());
    }
    // 使用crom 表達式,下面表示定時任務(wù)每分鐘執(zhí)行一次
    @Scheduled(cron = "0 * * * * ?")
    public void cron() {
        System.out.println("cron:"+new Date());
    }
}

代碼解釋:

  • 通過@Scheduled注解來標注一個定時任務(wù),其中fixedDelay= 1000表示在當前任務(wù)執(zhí)行結(jié)束1秒后開啟另一個任務(wù),fixedRate= 2000表示在當前任務(wù)開始執(zhí)行2秒后開啟另一個定時任務(wù),initialDelay= 1000則表示首次執(zhí)行的延遲時間。
  • 在@Scheduled注解中也可以使用cron表達式,cron="0 * * * * ?"表示該定時任務(wù)每分鐘執(zhí)行一次

配置完成后,接下來啟動Spring Boot項目即可,定時任務(wù)部分打印日志如圖所示。

在這里插入圖片描述

2. Quartz

2.1 Quartz簡介

Quartz是一個功能豐富的開源作業(yè)調(diào)度庫,它由Java寫成,可以集成在任何Java應用程序中,包括Java SE和Java EE等。使用Quartz可以創(chuàng)建簡單或者復雜的執(zhí)行計劃,它支持數(shù)據(jù)庫、集群、插件以及郵件,并且支持cron表達式,具有極高的靈活性。Spring Boot中集成Quartz和Spring 中集成Quartz比較類似,主要提供三個Bean: JobDetail、 Trigger 以及SchedulerFactory。

2.2 整合Spring Boot

首先創(chuàng)建Spring Boot項目,添加Quartz依賴,代碼如下:

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

2.3 創(chuàng)建Job

接著我們使用不同的方式創(chuàng)建兩個 Job。

2.3.1 Bean方式

Job 可以是一個普通的 JavaBean。如果是普通的 JavaBean,那么可以先添加 @Component 注解將之注冊到 Spring 容器中。

@Component
public class MyFirstJob {
    public void sayHello() {
        System.out.println("MyFirstJob:sayHello:" + new Date());
    }
}

2.3.2 抽象類 QuartzJobBean

Job 也可以繼承抽象類 QuartzJobBean。若繼承自 QuartzJobBean,則要實現(xiàn)該類中的 executeInternal 方法,該方法在任務(wù)被調(diào)用時使用。

public class MySecondJob extends QuartzJobBean {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    @Override
    protected void executeInternal(JobExecutionContext context) {
        System.out.println("hello:" + name + ":" + new Date());
    }
}

2.4 提供 Quartz 相關(guān)配置 Bean

接下來創(chuàng)建 QuartzConfig 對 JobDetail 和 Trigger 進行配置,并創(chuàng)建 SchedulerFactory。

JobDetail 的配置有兩種方式:

  • 第一種方式通過 MethodInvokingJobDetailFactoryBean 類配置 JobDetail,只需要指定 Job 的實例名和要調(diào)用的方法即可,注冊這用方式無法在創(chuàng)建 JobDetail 時傳遞參數(shù)。
  • 第二種方式通過 JobDetailFactoryBean 來實現(xiàn),這種方式只需要指定 JobClass 即可,然后可以通過 JobDataMap 傳遞參數(shù)到 Job 中,Job 中只需要提供屬性名,并且提供一個相應的 set 方法即可接收到參數(shù)。

Trigger 有多種不同的實現(xiàn),這里展示兩種常用的 Trigger:SimpleTrigger 和 CronTrigger。

  • SimpleTrigger 使用 SimpleTriggerFactoryBean 進行創(chuàng)建。在 SimpleTriggerFactoryBean 對象中,首先設(shè)置 JobDetail,接著配置任務(wù)循環(huán)次數(shù)、任務(wù)啟動延遲時間、任務(wù)的時間間隔。
  • CronTrigger 使用 CronTriggerFactoryBean 進行創(chuàng)建。在 SimpleTriggerFactoryBean 對象中,則主要配置 JobDetail 和 Cron 表達式。
@Configuration
public class QuartzConfig {
    /********** 配置兩個 JobDetail **********/
    // 通過 MethodInvokingJobDetailFactoryBean 類配置 JobDetail
    @Bean
    MethodInvokingJobDetailFactoryBean jobDetail1() {
        MethodInvokingJobDetailFactoryBean bean =
                new MethodInvokingJobDetailFactoryBean();
        bean.setTargetBeanName("myFirstJob");
        bean.setTargetMethod("sayHello");
        return bean;
    }
    // 通過 JobDetailFactoryBean 來實現(xiàn) JobDetail
    @Bean
    JobDetailFactoryBean jobDetail2() {
        JobDetailFactoryBean bean = new JobDetailFactoryBean();
        bean.setJobClass(MySecondJob.class);
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("name","sang");
        bean.setJobDataMap(jobDataMap);
        bean.setDurability(true);
        return bean;
    }
    /********** 創(chuàng)建兩個 Trigger **********/
    // 創(chuàng)建一個 SimpleTrigger
    @Bean
    SimpleTriggerFactoryBean simpleTrigger() {
        SimpleTriggerFactoryBean bean = new SimpleTriggerFactoryBean();
        bean.setJobDetail(jobDetail1().getObject()); // 設(shè)置 jobDetail
        bean.setRepeatCount(3); // 任務(wù)循環(huán)次數(shù)為3(總共會執(zhí)行4次)
        bean.setStartDelay(2000); // 任務(wù)啟動延遲2秒執(zhí)行
        bean.setRepeatInterval(2000);  // 任務(wù)的時間間隔為2秒
        return bean;
    }
    // 創(chuàng)建一個 CronTrigger
    @Bean
    CronTriggerFactoryBean cronTrigger() {
        CronTriggerFactoryBean bean = new CronTriggerFactoryBean();
        bean.setJobDetail(jobDetail2().getObject()); // 設(shè)置 jobDetail
        bean.setCronExpression("* * * * * ?"); // 設(shè)置 Cron 表達式
        return bean;
    }
    /********** 創(chuàng)建 SchedulerFactory **********/
    @Bean
    SchedulerFactoryBean schedulerFactory() {
        // 通過 SchedulerFactoryBean 創(chuàng)建 SchedulerFactor
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        // 配置兩個 Trigger
        SimpleTrigger simpleTrigger = simpleTrigger().getObject();
        CronTrigger cronTrigger = cronTrigger().getObject();
        bean.setTriggers(simpleTrigger,cronTrigger);
        return bean;
    }
}

經(jīng)過這幾步的配置,定時任務(wù)就配置成功了。接下來啟動Spring Boot項目,控制臺打印日志如圖所示。

在這里插入圖片描述

可以看到 MyFirstJob 在重復 3 次之后便不再執(zhí)行(一共執(zhí)行 4 次),而 MySecondJob 則每秒執(zhí)行 1 次,一直執(zhí)行下去。

到此這篇關(guān)于SpringBoot定時任務(wù)的實現(xiàn)詳解的文章就介紹到這了,更多相關(guān)SpringBoot定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java之HashMap.values()轉(zhuǎn)List時的錯誤和正確演示

    Java之HashMap.values()轉(zhuǎn)List時的錯誤和正確演示

    這篇文章主要介紹了Java之HashMap.values()轉(zhuǎn)List時的錯誤和正確演示,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java與Python兩種編程語言的比較與應用舉例詳解

    Java與Python兩種編程語言的比較與應用舉例詳解

    這篇文章主要介紹了Java與Python兩種編程語言比較與應用的相關(guān)資料,Java和Python各有特點,Java適用于企業(yè)級應用開發(fā),Python則在數(shù)據(jù)科學和機器學習領(lǐng)域占優(yōu)勢,兩者在語法、應用領(lǐng)域、性能、開發(fā)效率等方面存在差異,需要的朋友可以參考下
    2025-02-02
  • java 關(guān)鍵字static詳細介紹及如何使用

    java 關(guān)鍵字static詳細介紹及如何使用

    這篇文章主要介紹了java 關(guān)鍵字static詳細介紹及如何使用的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 詳解SpringMVC中的異常處理機制

    詳解SpringMVC中的異常處理機制

    本篇文章將為大家詳細介紹一下springmvc的異常處理機制,用到了ControllerAdvice和ExceptionHandler注解,感興趣的小伙伴可以了解一下
    2022-07-07
  • Spring集成Mybatis過程詳細講解

    Spring集成Mybatis過程詳細講解

    mybatis-plus是一個Mybatis的增強工具,在Mybatis的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Mybatis-plus案例及用法實例的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • java實現(xiàn)的日期時間轉(zhuǎn)換工具類完整示例

    java實現(xiàn)的日期時間轉(zhuǎn)換工具類完整示例

    這篇文章主要介紹了java實現(xiàn)的日期時間轉(zhuǎn)換工具類,結(jié)合完整實例形式分析了java針對日期時間常見的轉(zhuǎn)換、計算、格式化等相關(guān)操作與封裝技巧,需要的朋友可以參考下
    2019-10-10
  • 如何完成spring的最小化XML配置

    如何完成spring的最小化XML配置

    這篇文章主要介紹了如何完成spring的最小化XML配置,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2019-06-06
  • 一文詳解Java中的反射與new創(chuàng)建對象

    一文詳解Java中的反射與new創(chuàng)建對象

    Java中的反射(Reflection)和使用new關(guān)鍵字創(chuàng)建對象是兩種不同的對象創(chuàng)建方式,各有優(yōu)缺點和適用場景,本文小編給大家詳細介紹了Java中的反射與new創(chuàng)建對象,感興趣的小伙伴跟著小編一起來看看吧
    2024-07-07
  • 新版IDEA使用Spring Initializr創(chuàng)建工程的兩種方法

    新版IDEA使用Spring Initializr創(chuàng)建工程的兩種方法

    這篇文章主要介紹了新版IDEA使用Spring Initializr創(chuàng)建工程(兩種方法,官方工具和IDEA),文中通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-10-10
  • 在SSM框架中將圖片上傳到數(shù)據(jù)庫中的實現(xiàn)代碼

    在SSM框架中將圖片上傳到數(shù)據(jù)庫中的實現(xiàn)代碼

    這篇文章主要介紹了在SSM框架中將圖片上傳到數(shù)據(jù)庫中的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論