91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何理解Java spring定時任務

發布時間:2021-10-08 09:37:28 來源:億速云 閱讀:151 作者:iii 欄目:開發技術

這篇文章主要講解了“如何理解Java spring定時任務”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何理解Java spring定時任務”吧!

目錄
  • 一、定時任務

    • 1、cron表達式

    • 2、cron示例

    • 3、SpringBoot整合

  • 總結

    一、定時任務

    1、cron表達式

    語法:秒 分 時 日 月 周 年

    (其中“年”Spring不支持,也就是說在spring定時任務中只能設置:秒 分 時 日 月 周)

    如何理解Java spring定時任務

    如何理解Java spring定時任務

    2、cron示例

    如何理解Java spring定時任務

    如何理解Java spring定時任務

    3、SpringBoot整合

    @EnableScheduling

    @Scheduled

    實例:

    package com.xunqi.gulimall.seckill.scheduled;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.scheduling.annotation.Async;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    import java.util.concurrent.TimeUnit;
    /**
     * @Description:
     * @Created: with IntelliJ IDEA.
     * @author: 夏沫止水
     * @createTime: 2020-07-09 18:49
     **/
    /**
     * 定時任務
     *      1、@EnableScheduling 開啟定時任務
     *      2、@Scheduled開啟一個定時任務
     *
     * 異步任務
     *      1、@EnableAsync:開啟異步任務
     *      2、@Async:給希望異步執行的方法標注
     */
    @Slf4j
    @Component
    @EnableScheduling
    public class HelloScheduled {
        /**
         * 1、在Spring中表達式是6位組成,不允許第七位的年份
         * 2、在周幾的的位置,1-7代表周一到周日
         * 3、定時任務不該阻塞。默認是阻塞的
         *      1)、可以讓業務以異步的方式,自己提交到線程池
         *              CompletableFuture.runAsync(() -> {
         *         },execute);
         *
         *      2)、支持定時任務線程池;設置 TaskSchedulingProperties
         *        spring.task.scheduling.pool.size: 5
         *
         *      3)、讓定時任務異步執行
         *          異步任務
         *
         *      解決:使用異步任務 + 定時任務來完成定時任務不阻塞的功能
         *
         */
         @Scheduled(cron = "*/1 * * * * ?")
         public void hello() {
             log.info("hello...");
             try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
         }
    }

    定時任務默認是阻塞的線程,也就是說即使你設置成每一秒執行一次,但是方法內部的業務時間需要5秒才能執行完,也會造成定時任務每6秒才能執行一次。

    當然我們可以開啟異步線程:

    @EnableAsync

    @Async

    實例:

    package com.xunqi.gulimall.seckill.scheduled;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.scheduling.annotation.Async;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    import java.util.concurrent.TimeUnit;
    /**
     * @Description:
     * @Created: with IntelliJ IDEA.
     * @author: 夏沫止水
     * @createTime: 2020-07-09 18:49
     **/
    /**
     * 定時任務
     *      1、@EnableScheduling 開啟定時任務
     *      2、@Scheduled開啟一個定時任務
     *
     * 異步任務
     *      1、@EnableAsync:開啟異步任務
     *      2、@Async:給希望異步執行的方法標注
     */
    @Slf4j
    @Component
    @EnableAsync
    @EnableScheduling
    public class HelloScheduled {
        /**
         * 1、在Spring中表達式是6位組成,不允許第七位的年份
         * 2、在周幾的的位置,1-7代表周一到周日
         * 3、定時任務不該阻塞。默認是阻塞的
         *      1)、可以讓業務以異步的方式,自己提交到線程池
         *              CompletableFuture.runAsync(() -> {
         *         },execute);
         *
         *      2)、支持定時任務線程池;設置 TaskSchedulingProperties
         *        spring.task.scheduling.pool.size: 5
         *
         *      3)、讓定時任務異步執行
         *          異步任務
         *
         *      解決:使用異步任務 + 定時任務來完成定時任務不阻塞的功能
         *
         */
         @Async
         @Scheduled(cron = "*/1 * * * * ?")
         public void hello() {
             log.info("hello...");
             try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
         }
    }

    這樣就會開啟異步線程,并且是非阻塞線程,因為每次都會開啟一個線程來執行,我們可以看一下源碼配置的截圖,這個就是異步執行的默認配置,核心線程數是8,最大線程數是無限大,這時如果一直每秒執行一次,則會造成服務器資源耗盡。

    如何理解Java spring定時任務

    當然,我們可以在配置文件中進行定時任務線程池的設定:

    #核心線程數

    spring.task.execution.pool.core-size=20

    #最大線程數

    spring.task.execution.pool.max-size=50

    #隊列大小

    spring.task.execution.pool.queue-capacity=10000

    感謝各位的閱讀,以上就是“如何理解Java spring定時任務”的內容了,經過本文的學習后,相信大家對如何理解Java spring定時任務這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

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

    AI

    宕昌县| 普格县| 五台县| 浪卡子县| 丘北县| 蒲城县| 紫阳县| 水城县| 惠东县| 随州市| 夏津县| 辽中县| 金昌市| 纳雍县| 常山县| 格尔木市| 祁东县| 祁连县| 繁昌县| 潼南县| 河曲县| 普陀区| 桐柏县| 姚安县| 会宁县| 体育| 滦平县| 和林格尔县| 新密市| 南丰县| 全椒县| 奉贤区| 手机| 且末县| 黄冈市| 富阳市| 宁蒗| 峨眉山市| 即墨市| 胶州市| 邛崃市|