精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

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

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

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

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

(2)Spring Task入門;

(3)cronExpression配置說明;

(4)cronExpression實(shí)例;

接下來我們看看具體的每個(gè)步驟:

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

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

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

SpringTask :Spring3.0以后自帶的task,可以將它看成一個(gè)輕量級(jí)的Quartz,而且使用起來比Quartz簡(jiǎn)單許多。

(2)SpringTask入門;

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

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

這個(gè)步驟很簡(jiǎn)單,不多說。

(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)編寫啟動(dòng)類,App.java:

package com.kfit;

import org.springframework.boot.SpringApplication;

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

/**

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

*/

@SpringBootApplication

**public **class App {

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

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

}

}

(c)編寫定時(shí)任務(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 --守護(hù)天使
  • @version v.0.1
  • @date 2017年3月26日

*/

@Configuration

@EnableScheduling

**public **class MyTask {

/**

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

 * cron:定時(shí)任務(wù)表達(dá)式.

 *

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

 * *:任意.

 *

 */

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

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

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

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

}



/**

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

 */

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

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

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

}

}

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

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ì)算時(shí)間的時(shí)候,是根據(jù)當(dāng)前服務(wù)器的系統(tǒng)時(shí)間進(jìn)行計(jì)算.

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

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

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

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

(d)啟動(dòng)運(yùn)行程序進(jìn)行測(cè)試:

這個(gè)大家運(yùn)行完之后關(guān)注下控制臺(tái)的打印信息

(3)cronExpression配置說明;

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

特殊字符:

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

星號(hào)(*)

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

問號(hào)(?)

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

減號(hào)(-)

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

逗號(hào)(,)

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

斜杠(/)

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

L

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

W

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

LW****組合

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

井號(hào)(#)

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

C

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

(4)cronExpression實(shí)例;

CRON表達(dá)式 含義

"0 0 12 * * ?" 每天中午十二點(diǎn)觸發(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點(diǎn)開始到2點(diǎn)59分每分鐘一次觸發(fā)

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

"0 0/5 14,18 * *?" 每天的下午2點(diǎn)至2:55和6點(diǎn)至6點(diǎn)55分兩個(gè)時(shí)間段內(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" 每個(gè)周一、周二、周三、周四、周五的10:15觸發(fā)

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

    關(guān)注

    19

    文章

    2958

    瀏覽量

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

    關(guān)注

    0

    文章

    188

    瀏覽量

    33041
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    338

    瀏覽量

    14309
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    python定時(shí)任務(wù)實(shí)踐

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

    Spring Boot Actuator快速入門

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

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

    習(xí)慣了使用 windows 的計(jì)劃任務(wù),使用 linux 中的 crontab 管理定時(shí)任務(wù)時(shí)很不適應(yīng)。
    的頭像 發(fā)表于 08-14 18:16 ?802次閱讀
    linux<b class='flag-5'>定時(shí)任務(wù)</b>的用法總結(jié)