亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中怎么使用定時任務

發布時間:2021-07-08 17:22:37 來源:億速云 閱讀:186 作者:Leah 欄目:編程語言

本篇文章為大家展示了SpringBoot中怎么使用定時任務,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1. 線程實現

利用線程可以設定休眠時間的方式可以實現簡單的定時任務邏輯。

    public static void main(String[] args){        //定時任務間隔時間
        int sleepTime=2*1000;        new Thread(new Runnable() {            @Override
            public void run() {                while (true){                    try {
                        System.out.println("Thread方式執行一次定時任務");                        //線程休眠規定時間
                        Thread.sleep(sleepTime);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

2. Timer類

Timer類允許調度一個TimerTask任務。使用這種方式可以讓你的程序按照某一個頻度執行。

    public static void main(String[] args){        int sleepTime=2*1000;
        TimerTask timerTask = new TimerTask() {            @Override
            public void run() {
                System.out.println("Timer方式執行一次定時任務");
            }
        };        new Timer().schedule(timerTask,1,sleepTime);
    }

3. ScheduledExecutorService類

ScheduledExecutorService,是基于線程池設計的定時任務類,每個調度任務都會分配到線程池中的一個線程去執行,也就是說,任務是并發執行,互不影響。
因此,基于ScheduledExecutorService類的定時任務類,歸根到底也是基于線程的調度實現的。

    public static void main(String[] args){        int sleepTime=2*1000;
        ScheduledExecutorService scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutor.scheduleAtFixedRate(                new Runnable() {                    @Override
                    public void run() {
                        System.out.println("ScheduledExecutorService方式執行一次定時任務");
                    }
                }
        ,1,sleepTime, TimeUnit.SECONDS);
    }

4. 整合Quartz

Quartz是一個完全由Java編寫的開源作業調度框架,為在 Java 應用程序中進行作業調度提供了簡單卻強大的機制,要理解它的使用方式,需要先理解它的幾個核心概念:

  1. Job: 表示一個工作,要執行的具體內容。此接口中只有一個方法,如下:

void execute(JobExecutionContext context)

  1. JobDetail: 表示一個具體的可執行的調度程序,Job 是這個可執行程調度程序所要執行的內容,另外 JobDetail 還包含了這個任務調度的方案和策略。

  2. Trigger: 代表一個調度參數的配置,什么時候去調。

  3. Scheduler: 代表一個調度容器,一個調度容器中可以注冊多個 JobDetail 和Trigger。當 Trigger 與 JobDetail 組合,就可以被 Scheduler 容器調度了。

有了這些概念之后,我們就可以把Quartz整合到我們的springboot項目中了。

  1. 引入quartz依賴

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

@Configurationpublic class QuartzConfig {    @Bean
    public JobDetail quartzDetail(){        return JobBuilder.newJob(QuartzTest.class).withIdentity("QuartzTest").storeDurably().build();
    }    @Bean
    public SimpleTrigger quartzTrigger(){
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10)
                .repeatForever();        return TriggerBuilder.newTrigger().forJob(quartzDetail())
                .withIdentity("QuartzTest")
                .withSchedule(scheduleBuilder)
                .build();
    }
}
  1. 測試

public class QuartzTest extends QuartzJobBean {    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext){
        System.out.println("quartz執行一次定時任務 ");
    }
}

5. 使用Scheduled注解

@Scheduled是spring為定時任務而生的一個注解,查看注解的源碼:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Repeatable(Schedules.class)public @interface Scheduled {//cron表達式
    String cron() default "";//接收一個java.util.TimeZone#ID。
    String zone() default "";//上一次執行完畢時間點之后多長時間再執行
    long fixedDelay() default -1;//支持占位符形式的字符串類型的fixedDelay
    String fixedDelayString() default "";//上一次開始執行時間點之后多長時間再執行
    long fixedRate() default -1;//支持占位符形式的字符串類型的fixedRateString
    String fixedRateString() default "";//第一次延遲多長時間后再執行    
    long initialDelay() default -1;//支持占位符形式的字符串類型的initialDelay
    String initialDelayString() default "";
}

可以看出:Scheduled注解中的參數用來設置“定時”動作,通常情況下,比較常用的參數是cron(),這意味著我們需要學會一些cron表達式相關的語法,但由于內容較多,篇幅較長,在這里暫不鋪開講解,我們把cron語法相關放到文章最后,在此先講解如何用Scheduled注解來實現定時任務。

  1. 開啟定時任務支持

@SpringBootApplication/**
 * 開啟定時任務支持
 */@EnableSchedulingpublic class TestApplication  extends SpringBootServletInitializer {    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {        return builder.sources(this.getClass());
    }
}
  1. 使用

@Componentpublic class ScheduledTest {    private Logger logger = LoggerFactory.getLogger(ScheduledTest.class);    /**
     * 每15秒執行一次定時任務
     */
    @Scheduled(cron = "0/15 * * * * ? ")    public void testCron(){
        logger.info("Scheduled 執行一次定時任務");
    }
}

6. cron表達式

cron表達式是一個字符串其語法為:

[秒] [分] [小時] [日] [月] [周] [年]

其中[年]為非必填項,因此通常cron表達式通常由6或7部分內容組成,內容的取值為數字或者一些cron表達式約定的特殊字符,這些特殊字符稱為“通配符”,每一個通配符分別代指一種值。cron表達式可以用這樣的表格來表示:

順序取值范圍特殊字符串范圍
0~60, - * /
0-60, - * /
0-23, - * /
1-31, - * /
1-12 / JAN-DEC, - * ? / L W
1-7 / SUN-SAT, - * ? / L #
年(可省略)1970-2099, - * /

其中通配符的解釋以及作用如下:

通配符代表的值解釋
*所有值如:時字段為*,代表每小時都觸發
?不指定值如:周字段為?,代表表達式不關心是周幾
-區間如:時字段設置2-5,代表2,3,4,5點鐘時都觸發
,多個值如:時字段設置2,3,5,代表2,3,5點都會觸發
/遞增值如:時字段設置0/2,代表每兩個小時觸發,時字段設置 2/5,代表從2時開始每隔5小時觸發一次
L最后值如:日字段設置L,代表本月最后一天
W最近工作日如:在日字段設置13W,代表沒約13日最近的那個工作日觸發一次
#序號如:在周字段設置5#2,代表每月的第二個周五

上述內容就是SpringBoot中怎么使用定時任務,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高州市| 墨竹工卡县| 监利县| 庄河市| 盖州市| 马鞍山市| 和林格尔县| 龙游县| 秦皇岛市| 突泉县| 喀喇| 汝城县| 隆化县| 雅江县| 洪洞县| 美姑县| 蒙自县| 绥芬河市| 丹寨县| 云林县| 林州市| 保靖县| 博客| 双峰县| 宁津县| 新野县| 江川县| 澄江县| 固始县| 葫芦岛市| 三门县| 平乡县| 民和| 乌恰县| 格尔木市| 永和县| 黑水县| 长乐市| 新营市| 遂溪县| 疏附县|