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

SpringBoot日程管理Quartz與定時任務Task實現詳解

 更新時間:2022年09月27日 08:27:42   作者:搗蛋孩學編程  
定時任務是企業(yè)級開發(fā)中必不可少的組成部分,諸如長周期業(yè)務數據的計算,例如年度報表,諸如系統(tǒng)臟數據的處理,再比如系統(tǒng)性能監(jiān)控報告,還有搶購類活動的商品上架,這些都離不開定時任務。本節(jié)將介紹兩種不同的定時任務技術

任務系統(tǒng)指的是定時任務。定時任務是企業(yè)級開發(fā)中必不可少的組成部分,諸如?周期業(yè)務數據的計算,都會?到定時任務

1 Quartz

Quartz是OpenSymphony開源組織在Job scheduling領域的?個開源項?,完全由Java開發(fā)的?個開源的任務?程管理系統(tǒng),在預先確定(被納??程)的時間到達時,負責執(zhí)?(或者通知)其他軟件組件的系統(tǒng)。

核?概念

Job(任務):為?個接?,只定義?個?法 execute(JobExecutionContext context),在實現接?的execute?法中編寫所需要定時執(zhí)?的 Job(任務),JobExecutionContext類提供了調度應?的?些信息。Job運?時的信息保存在JobDataMap實例中。

JobDetail(任務信息):Quartz每次調度Job時,都重新創(chuàng)建?個Job實例,它不直接接受?個Job的實例,相反它接收?個Job實現類(JobDetail,描述Job的實現類及其他相關的靜態(tài)信息,如Job名字、描述、關聯(lián)監(jiān)聽器等信息)。

Trigger(觸發(fā)器):為?個類,描述觸發(fā)Job執(zhí)?的時間觸發(fā)規(guī)則。主要有SimpleTrigger和CronTrigger兩個?類。當且僅當需調度?次或者以固定時間間隔周期執(zhí)?調度,SimpleTrigger是最適合的選擇;?CronTrigger則可以通過Cron表達式定義出各種復雜時間規(guī)則的調度?案。

Scheduler(調度器):調度器就相當于?個容器,裝載著任務和觸發(fā)器。該類是?個接?,代表?個Quartz的獨?運?容器,Trigger和JobDetail可以注冊到Scheduler中。

Springboot整合Quartz

1.導?springboot整合Quartz的starter

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

2.定義任務Bean

按照Quartz的開發(fā)規(guī)范制作,繼承QuartzJobBean

public class MyQuartz extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("quartz task is going......");
    }
}

3.創(chuàng)建Quartz配置類

定義?作明細(JobDetail)與觸發(fā)器的(Trigger)bean

@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail testDetail(){
        return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
    }
    @Bean
    public Trigger testJobTrigger(){
        //創(chuàng)建調度器
        ScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ? ");
        //綁定對應的?作明細
        return TriggerBuilder.newTrigger().forJob(testDetail()).withSchedule(scheduleBuilder).build();
    }
}

cron表達式,定時執(zhí)?

  • 第?位,表示秒,取值 0-59;
  • 第?位,表示分,取值 0-59;
  • 第三位,表示?時,取值 0-23;
  • 第四位,?期天/?,取值 1-31;
  • 第五位,?期?份,取值 1-12;
  • 第六位,星期,取值 1-7,星期?、星期?…;

注:不是第1周、第2周的意思,另外:1表示星期天,2表示星期?。

  • 第七位,年份,可以留空,取值 1970-2099。

特殊符號

  • (*)星號:可以理解為每的意思,每秒、每分、每天、每?、每年
  • (?)問號:問號只能出現在?期和星期這兩個位置,表示這個位置的值不確定,每天 3點執(zhí)?,所以第六位星期的位置是不需要關注的,就是不確定的值。同時,?期和星期是兩個相互排斥的元素,通過問號來表明不指定值。假如 1 ? 10 ?是星期?,如果在星期的位置是另指定星期?,就前后沖突?盾了
  • (-)減號:表達?個范圍,如在?時字段中使?“10-12”,則表示從 10~12 點,即10、11、12
  • (,)逗號:表達?個列表值,如在星期字段中使?“1、2、4”,則表示星期?、星期?、星期四
  • (/)斜杠:如 x/y,x 是開始值,y 是步?,假設在第?位(秒) 0/15 就是,從 0秒開始,每 15 秒,最后就是 0、15、30、45、60,另 */y,等同于 0/y

總結

1. springboot整合Quartz就是將Quartz對應的核?對象交給spring容器管理,包含兩個對象,JobDetail和Trigger對象

2. JobDetail對象描述的是?作的執(zhí)?信息,需要綁定?個QuartzJobBean類型的對象

3. Trigger對象定義了?個觸發(fā)器,需要為其指定綁定的JobDetail是哪個,同時要設置執(zhí)?周期調度器

2. Task

spring根據定時任務的特征,將定時任務的開發(fā)簡化到了極致。

1.開啟定時任務功能

在引導類上開啟定時任務功能的開關,使?注解@EnableScheduling

@SpringBootApplication
@EnableScheduling//打開定時任務開關
public class Demo12SpringbootTaskApplication {
    public static void main(String[] args) {
        SpringApplication.run(Demo12SpringbootTaskApplication.class, args);
    }
}

2.定義Bean

在對應要定時執(zhí)?的操作上?,使?注解@Scheduled定義執(zhí)?的時間,執(zhí)?時間的描述?式還是cron表達式

@Component
public class MyBean {
    @Scheduled(cron = "0/1 * * * * ?")
    public void print() {
        System.out.println(Thread.currentThread().getName() + ":spring task run...");
    }
}

3.配置文件

如何想對定時任務進?相關配置,可以通過配置?件進?

spring:
  task:
    scheduling:
      ## 調度線程名稱前綴 默認scheduling-
      thread-name-prefix: myTask_
      pool:
        # 任務調度線程池?? 默認 1
        size: 1
      shutdown:
        # 線程池關閉時等待所有任務完成
        await-termination: false
        # 調度線程關閉前最?等待時間,確保最后?定關閉
        await-termination-period: 10s

總結

1. spring task需要使?注解@EnableScheduling開啟定時任務功能

2. 為定時執(zhí)?的的任務設置執(zhí)?周期,描述?式cron表達式

到此這篇關于SpringBoot日程管理Quartz與定時任務Task實現詳解的文章就介紹到這了,更多相關SpringBoot Quartz與Task內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA Netty實現聊天室+私聊功能的示例代碼

    JAVA Netty實現聊天室+私聊功能的示例代碼

    這篇文章主要介紹了JAVA Netty實現聊天室+私聊功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 新版SpringSecurity安全配置說明

    新版SpringSecurity安全配置說明

    這篇文章主要介紹了新版SpringSecurity安全配置說明,在 Spring Security 5.7.0-M2 中,我們棄用了WebSecurityConfigurerAdapter,因為我們鼓勵用戶轉向基于組件的安全配置,需要的朋友可以參考下
    2023-07-07
  • 一文詳解Springboot集成mybatis-plus

    一文詳解Springboot集成mybatis-plus

    這篇文章主要介紹了Mybatis-Plus與SpringBoot整合,并在項目中實戰(zhàn)運用,列舉其增刪改查的使用方式,對學習或工作有一定的幫助,需要的小伙伴可以參考閱讀
    2023-04-04
  • spring中的事務執(zhí)行流程圖解

    spring中的事務執(zhí)行流程圖解

    這篇文章主要介紹了spring中的事務執(zhí)行流程圖解,Spring事務是Spring框架提供的一種管理數據庫事務的機制,它通過將一系列數據庫操作封裝在一個事務中,保證這些操作要么全部成功執(zhí)行,要么全部回滾,從而確保數據的一致性和完整性,需要的朋友可以參考下
    2023-10-10
  • 基于Eclipce配置Spring Boot過程圖解

    基于Eclipce配置Spring Boot過程圖解

    這篇文章主要介紹了基于Eclipce配置Spring Boot過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Mybatis-Plus的saveOrUpdateBatch(null)問題及解決

    Mybatis-Plus的saveOrUpdateBatch(null)問題及解決

    這篇文章主要介紹了Mybatis-Plus的saveOrUpdateBatch(null)問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java怎么獲取當前時間、計算程序運行時間源碼詳解(超詳細!)

    Java怎么獲取當前時間、計算程序運行時間源碼詳解(超詳細!)

    有的時候,我們需要查看某一段代碼的性能如何,最為簡單的方式,可以通過計算該段代碼執(zhí)行的耗時,來進行簡單的判斷,這篇文章主要給大家介紹了關于Java怎么獲取當前時間、計算程序運行時間的相關資料,需要的朋友可以參考下
    2024-07-07
  • Mybatis的動態(tài)Sql組合模式詳情

    Mybatis的動態(tài)Sql組合模式詳情

    這篇文章主要介紹了Mybatis的動態(tài)Sql組合模式詳情,這篇文章從組合模式的角度分析了Mybatis動態(tài)sql的部分,SqlNode是組合模式的Component接口,更多相關內容需要的小伙伴可以參考一下
    2022-08-08
  • 將BigDecimal轉成字符串為科學計數法的踩坑記錄

    將BigDecimal轉成字符串為科學計數法的踩坑記錄

    這篇文章主要介紹了將BigDecimal轉成字符串為科學計數法的踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • JAVA多線程中join()方法的使用方法

    JAVA多線程中join()方法的使用方法

    雖然關于討論線程join()方法的博客已經非常極其特別多了,但是前幾天我有一個困惑卻沒有能夠得到詳細解釋,當系統(tǒng)中正在運行多個線程時,join()到底是暫停了哪些線程,所以本文詳細解釋一下希望能幫助到和我有相同困惑的同學
    2021-05-05

最新評論