衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從各個維度再次介紹Spring Boot定時任務(wù)調(diào)度

jf_78858299 ? 來源:SpringBoot ? 作者:林祥纖 ? 2023-04-12 11:01 ? 次閱讀

我們先看下本節(jié)的大綱:

(1)定時任務(wù)的幾種實現(xiàn)方式;

(2)Spring Task入門;

(3)cronExpression配置說明;

(4)cronExpression實例;

接下來我們看看具體的每個步驟:

(1)定時任務(wù)的幾種實現(xiàn)方式;

TimerJava自帶的java.util.Timer類,這個類允許你調(diào)度一個java.util.TimerTask任務(wù)。使用這種方式可以讓你的程序按照某一個頻度執(zhí)行,但不能在指定時間運行。一般用的較少。

Quartz :使用Quartz,這是一個功能比較強大的的調(diào)度器,可以讓你的程序在指定時間執(zhí)行,也可以按照某一個頻度執(zhí)行,配置起來稍顯復(fù)雜。

SpringTask :Spring3.0以后自帶的task,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多。

(2)SpringTask入門;

再次我們編寫一個簡單的例子學(xué)習(xí)下定時器的簡單應(yīng)用:

(a)新建一個spring-boot-task工程;

這個步驟很簡單,不多說。

(b)在pom.xml文件添加依賴,如下:

"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd" >

4.0.0

com.kfit

spring-boot-task2

0.0.1-SNAPSHOT

jar

spring-boot-task2

http://maven.apache.org

<project.build.sourceEncoding>UTF-8class="hljs-name"project.build.sourceEncoding>

 

1.8class="hljs-name"java.version>
<parent>

   <groupId>org.springframework.boot<span class="hljs-name"groupId>

   <artifactId>spring-boot-starter-parent<span class="hljs-name"artifactId>

   <version>1.4.1.RELEASE<span class="hljs-name"version>

<span class="hljs-name"parent>
<dependency>

  <groupId>junit<span class="hljs-name"groupId>

  <artifactId>junit<span class="hljs-name"artifactId>

  <scope>test<span class="hljs-name"scope>

<span class="hljs-name"dependency>



    

   <dependency>

       <groupId>org.springframework.boot<span class="hljs-name"groupId>

       <artifactId>spring-boot-starter-web<span class="hljs-name"artifactId>

   <span class="hljs-name"dependency>

(c)編寫啟動類,App.java:

package com.kfit;

import org.springframework.boot.SpringApplication;

**import **org.springframework.boot.autoconfigure.SpringBootApplication;

/**

  • @author Angel --守護天使
  • @version v.0.1
  • @date 2017年3月26日

*/

@SpringBootApplication

**public **class App {

**public ****static ****void** main(String[] args) {

   SpringApplication. *run* (App. **class** , args);

}

}

(c)編寫定時任務(wù)調(diào)度類,MyTask.java:

package com.kfit.task;

import java.util.Date;

import org.springframework.context.annotation.Configuration;

import org.springframework.scheduling.annotation.EnableScheduling;

import org.springframework.scheduling.annotation.Scheduled;

/**

  • @author Angel --守護天使
  • @version v.0.1
  • @date 2017年3月26日

*/

@Configuration

@EnableScheduling

**public **class MyTask {

/**

 * 我們希望這個方法每10秒打印一次.

 * cron:定時任務(wù)表達式.

 *

 * 指定:秒,分鐘,小時,日期,月份,星期,年(可選).

 * *:任意.

 *

 */

@Scheduled(cron="0/10 * ** * *")

//@Scheduled(cron="0/10* * * * ?")

**public ****void** tast1(){

   System. ***out*** .println("MyTask.tast1(),"+**new** Date());

}



/**

 * 我們希望這個方法每1分鐘打印一次.

 */

@Scheduled(cron="0 0/1 * ** *")

**public ****void** tast2(){

   System. ***out*** .println("MyTask.tast2(),"+**new** Date());

}

}

在這里有有一個地方需要特別說明下:

MyTask.tast1()

MyTask.tast1()

MyTask.tast1()

MyTask.tast2()

MyTask.tast1()


tast1: 每10秒打印1次.

task2: 每1分鐘打印1次.


1分鐘是60秒 = 沒打印6次task1之后才能夠打印1次task2.


spring task 在計算時間的時候,是根據(jù)當(dāng)前服務(wù)器的系統(tǒng)時間進行計算.

如果是每10秒執(zhí)行一次的話,那么它是從系統(tǒng)時間的0,10,20秒進行計算的.

如果是每1分鐘執(zhí)行一次的話,那么它是從系統(tǒng)時間的1分鐘,2分鐘進行計算的。

如果是這樣的話,那么我會碰到這樣的情況:就是當(dāng)我們剛剛啟動程序的時候,我們的時間

剛好是9:39:55秒,那么就會出現(xiàn)5秒之后會執(zhí)行1次task1和1次task2.

(d)啟動運行程序進行測試:

這個大家運行完之后關(guān)注下控制臺的打印信息

(3)cronExpression配置說明;

字段 允許值 允許的特殊字符
0-59 , - * /
0-59 , - * /
小時 0-23 , - * /
日期 1-31 , - * ? / LWC
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / LC #
年(可選) 留空, 1970-2099 , - * /

特殊字符:

在Cron表達式的時間字段中,除允許設(shè)置數(shù)值外,還能你使用一些特殊的字符,提供列表、范圍、通配符等功能

星號(*)

可用在所有字段下,表示對應(yīng)時間域名的每一個時刻,如*用在分鐘字段,表示“每分鐘”。

問號(?)

只能用在日期和星期字段,代表無意義的值,比如使用L設(shè)定為當(dāng)月的最后一天,則配置日期配置就沒有意義了,可用?作占位符的作用。

減號(-)

表示一個范圍,如在日期字段5-10,表示從五號到10號,相當(dāng)于使用逗號的5,6,7,8,9,10

逗號(,)

表示一個并列有效值,比如在月份字段使用JAN,DEC表示1月和12月

斜杠(/)

x/y表示一個等步長序列,x為起始值,y為增量步長值,如在小時使用1/3相當(dāng)于1,4,7,10當(dāng)時用*/y時,相當(dāng)于0/y

L

L(Last)只能在日期和星期字段使用,但意思不同。在日期字段,表示當(dāng)月最后一天,在星期字段,表示星期六(如果按星期天為一星期的第一天的概念,星期六就是最后一天。如果L在星期字段,且前面有一個整數(shù)值X,表示“這個月的最后一個星期X”,比如3L表示某個月的最后一個星期二。

W

選擇離給定日期最近的工作日(周一至周五)。例如你指定“15W”作為day of month字段的值,就意味著“每個月與15號最近的工作日”。所以,如果15號是周六,則觸發(fā)器會在14號(周五)觸發(fā)。如果15號是周日,則觸發(fā)器會在16號(周一)觸發(fā)。如果15號是周二,則觸發(fā)器會在15號(周二)觸發(fā)。但是,如果你指定“1W”作為day of month字段的值,且1號是周六,則觸發(fā)器會在3號(周一)觸發(fā)。quartz不會“跳出”月份的界限。

LW****組合

在日期字段可以組合使用LW,表示當(dāng)月最后一個工作日(周一至周五)

井號(#)

只能在星期字段中使用指定每月第幾個星期X。例如day of week字段的“6#3”,就意味著“每月第3個星期五”(day3=星期五,#3=第三個);“2#1”就意味著“每月第1個星期一”;“4#5”就意味著“每月第5個星期3。需要注意的是“#5”,如果在當(dāng)月沒有第5個星期三,則觸發(fā)器不會觸發(fā)。

C

只能在日期和星期字段中使用,表示計劃所關(guān)聯(lián)的誒其,如果日期沒有被關(guān)聯(lián),相當(dāng)于日歷中的所有日期,如5C在日期字段相當(dāng)于5號之后的第一天,1C在日期字段使用相當(dāng)于星期填后的第一天

(4)cronExpression實例;

CRON表達式 含義

"0 0 12 * * ?" 每天中午十二點觸發(fā)

"0 15 10 ? * *" 每天早上10:15觸發(fā)

"0 15 10 * * ?" 每天早上10:15觸發(fā)

"0 15 10 * * ? *" 每天早上10:15觸發(fā)

"0 15 10 * * ?2005" 2005年的每天早上10:15觸發(fā)

“0 * 14 * * ?" 每天從下午2點開始到2點59分每分鐘一次觸發(fā)

"0 0/5 14 * * ?" 每天從下午2點開始到2:55分結(jié)束每5分鐘一次觸發(fā)

"0 0/5 14,18 * *?" 每天的下午2點至2:55和6點至6點55分兩個時間段內(nèi)每5分鐘一次觸發(fā)

"0 0-5 14 * * ?" 每天14:00至14:05每分鐘一次觸發(fā)

"0 10,44 14 ? 3WED" 三月的每周三的14:10和14:44觸發(fā)

"0 15 10 ? *MON-FRI" 每個周一、周二、周三、周四、周五的10:15觸發(fā)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2975

    瀏覽量

    105157
  • XML
    XML
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    33142
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14391
收藏 人收藏

    評論

    相關(guān)推薦

    Spring Boot如何實現(xiàn)異步任務(wù)

    Spring Boot 提供了多種方式來實現(xiàn)異步任務(wù),這里介紹三種主要實現(xiàn)方式。 1、基于注解 @Async @Async 注解是 Spring
    的頭像 發(fā)表于 09-30 10:32 ?1477次閱讀

    Linux系統(tǒng)定時任務(wù)Crond

    會定期(默認(rèn)每分鐘檢查一次)檢查系統(tǒng)中是否有要執(zhí)行的任務(wù)工作,如果有,便會根據(jù)其預(yù)先設(shè)定的定時任務(wù)規(guī)則自動執(zhí)行該定時任務(wù)工作,這個crond定時任務(wù)服務(wù)就相當(dāng)于我們平時早起使用的鬧鐘一
    發(fā)表于 07-05 06:22

    定時任務(wù)的發(fā)展史是怎么樣的

    定時任務(wù)是互聯(lián)網(wǎng)行業(yè)里最常用的服務(wù)之一,本文給大家介紹定時任務(wù)在我司的發(fā)展歷程。 linux系統(tǒng)中一般使用crontab命令來實現(xiàn),在Java世界里,使用最廣泛的就是quartz了。我司
    發(fā)表于 07-18 17:38 ?0次下載
    <b class='flag-5'>定時任務(wù)</b>的發(fā)展史是怎么樣的

    Spring Boot定時任務(wù)的重寫方法

    Spring Boot應(yīng)該是目前最火的java開源框架了,它簡化了我們創(chuàng)建一個web服務(wù)的過程,讓我們可以在很短時間、基本零配置就可以啟動一個web服務(wù)。
    的頭像 發(fā)表于 01-20 17:38 ?2485次閱讀

    SpringBoot如何實現(xiàn)動態(tài)增刪啟停定時任務(wù)

    spring boot項目中,可以通過 @EnableScheduling 注解和@Scheduled注解實現(xiàn)定時任務(wù),也可以通過SchedulingConfigurer接口來實現(xiàn)定時任務(wù)
    的頭像 發(fā)表于 09-24 09:49 ?3002次閱讀
    SpringBoot如何實現(xiàn)動態(tài)增刪啟停<b class='flag-5'>定時任務(wù)</b>

    Python定時任務(wù)的實現(xiàn)方式

    調(diào)度模塊schedule實現(xiàn)定時任務(wù) 利用任務(wù)框架APScheduler實現(xiàn)定時任務(wù) Job 作業(yè) Trigger 觸發(fā)器 Executor 執(zhí)行器 Jobstore 作業(yè)存儲 Eve
    的頭像 發(fā)表于 10-08 15:20 ?6369次閱讀

    說說Spring定時任務(wù)如何大規(guī)模企業(yè)級運用

    定時任務(wù)是業(yè)務(wù)應(yīng)用開發(fā)中非常普遍存在的場景(如:每分鐘掃描超時支付的訂單,每小時清理一次數(shù)據(jù)庫歷史數(shù)據(jù),每天統(tǒng)計前一天的數(shù)據(jù)并生成報表等等),解決方案很多,Spring 框架提供了一種通過注解來配置定時任務(wù)的解決方案,接入非常的
    的頭像 發(fā)表于 11-04 09:36 ?734次閱讀

    解析Golang定時任務(wù)庫gron設(shè)計和原理

    正巧,最近看到了 gron 這個開源項目,它是用 Golang 實現(xiàn)一個并發(fā)安全的定時任務(wù)庫。實現(xiàn)非常簡單精巧,代碼量也不多。今天我們就來一起結(jié)合源碼看一下,怎樣基于 Golang 的能力做出來一個【定時任務(wù)庫】。
    的頭像 發(fā)表于 12-15 13:57 ?1385次閱讀

    xxl-job任務(wù)調(diào)度中間件解決定時任務(wù)調(diào)度問題

    xxl-job是一款非常優(yōu)秀的任務(wù)調(diào)度中間件,輕量級、使用簡單、支持分布式等優(yōu)點,讓它廣泛應(yīng)用在我們的項目中,解決了不少定時任務(wù)調(diào)度問題。
    的頭像 發(fā)表于 01-31 09:53 ?2104次閱讀

    求一種SpringBoot定時任務(wù)動態(tài)管理通用解決方案

    SpringBoot的定時任務(wù)的加強工具,實現(xiàn)對SpringBoot原生的定時任務(wù)進行動態(tài)管理,完全兼容原生@Scheduled注解,無需對原本的定時任務(wù)進行修改
    的頭像 發(fā)表于 02-03 09:49 ?825次閱讀

    Spring Boot中整合兩種定時任務(wù)的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個 Spring 中的定時任務(wù)實現(xiàn)策
    的頭像 發(fā)表于 04-07 14:55 ?1603次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>中整合兩種<b class='flag-5'>定時任務(wù)</b>的方法

    Spring Boot中如何使用定時任務(wù)

    本文介紹Spring Boot 中如何使用定時任務(wù),使用非常簡單,就不做過多說明了。
    的頭像 發(fā)表于 04-12 10:56 ?1015次閱讀

    python定時任務(wù)實踐

    由于程序需求,監(jiān)測配置變化需要設(shè)置定時任務(wù),每分鐘執(zhí)行一次,對任務(wù)持久化要求不高,不需要時可以關(guān)閉定時任務(wù)
    的頭像 發(fā)表于 05-20 17:53 ?1007次閱讀
    python<b class='flag-5'>定時任務(wù)</b>實踐

    Spring Boot Actuator快速入門

    不知道大家在寫 Spring Boot 項目的過程中,使用過 Spring Boot Actuator 嗎?知道 Spring
    的頭像 發(fā)表于 10-09 17:11 ?673次閱讀

    linux定時任務(wù)的用法總結(jié)

    習(xí)慣了使用 windows 的計劃任務(wù),使用 linux 中的 crontab 管理定時任務(wù)時很不適應(yīng)。
    的頭像 發(fā)表于 08-14 18:16 ?904次閱讀
    linux<b class='flag-5'>定時任務(wù)</b>的用法總結(jié)
    榆次百家乐官网的玩法技巧和规则| 汇丰百家乐官网的玩法技巧和规则| 威尼斯人娱乐网址| 百家乐官网的出牌技巧| 在线棋牌游戏平台| 百家乐赢钱公式1| 百家乐官网游戏网上投注| 沙田区| 二八杠网站| 百家乐赌场筹码| 百家乐官网官方网站| 正品百家乐玩法| 澳门百家乐代理| 百家乐官网单人操作扫描道具| 金乡县| 博彩交流| 威尼斯人娱乐城 线路畅通中心| 百家乐官网打法心得| 砚山县| 战神娱乐| 大发888娱乐城出纳柜台| 百家乐小路单图解| 玩百家乐是否有技巧| 皇室百家乐官网的玩法技巧和规则 | 大发888游戏平台hplsj| 莫斯科百家乐的玩法技巧和规则 | 荷规则百家乐官网的玩法技巧和规则 | 大发888娱乐城怎么玩| 赌神网百家乐的玩法技巧和规则 | 太子百家乐官网的玩法技巧和规则 | 百家乐官网发牌的介绍| 棋牌娱乐城| 棋牌游戏| 六合彩报纸| 69棋牌游戏| 大发888官方 46| 免费百家乐统计| 太阳城招聘| 老虎机下载| 大发888娱乐场 手机版| 迪威百家乐官网赌场娱乐网规则 |