色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SpringBoot如何實現定時任務(上)

jf_78858299 ? 來源:博客園 ? 作者:Jae1995 ? 2023-04-07 14:51 ? 次閱讀

SpringBoot創建定時任務的方式很簡單,主要有兩種方式:一、基于注解的方式(@Scheduled)二、數據庫動態配置。實際開發中,第一種需要在代碼中寫死表達式,如果修改起來,又得重啟會顯得很麻煩;所以我們往往會采取第二種方式,可以直接從數據庫中讀取定時任務的指定執行時間,無需重啟。

下面就來介紹下這兩種方式吧

一、基于注解(@Scheduled)

基于注解是一種靜態的方式,只需要幾行代碼就可以搞定了

添加一個配置類

@Configuration  //標記配置類
 @EnableScheduling   //開啟定時任務
 public class MyScheduleConfig {
 
     //添加定時任務
     @Scheduled(cron = "0/5 * * * * ?")
     private void myTasks() {
         System.out.println("執行定時任務 " + LocalDateTime.now());
     }
 }

上面代碼的cron表達式表示每5秒執行一次,可以通過這個網站(https://qqe2.com/cron)去生成要的cron表達式

啟動應用,控制臺看效果

圖片

這個方式的確很簡單方便,但前面介紹也說到了,有個缺點就是當我們需要去修改定時任務的執行周期或者停止的時候,我們需要到代碼層去修改,重啟。

二、數據庫動態配置

這里使用MySQL數據庫

1、表數據添加,資源配置

1.1 添加表

CREATE TABLE `scheduled_job` (
  `job_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `job_key` varchar(128) NOT NULL COMMENT '定時任務完整類名',
  `cron_expression` varchar(20) NOT NULL COMMENT 'cron表達式',
  `task_explain` varchar(50) NOT NULL DEFAULT '' COMMENT '任務描述',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '狀態,1:正常;-1:停用',
  PRIMARY KEY (`job_id`),
  UNIQUE KEY `job_key` (`job_key`),
  UNIQUE KEY `cron_key_unique_idx` (`job_key`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='定時任務表';

1.2 插入兩條數據,job_key根據是完整的類名

圖片

1.3 引入依賴

<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>
        
        <dependency>
            <groupId>mysql<span class="hljs-name"groupId>
            <artifactId>mysql-connector-java<span class="hljs-name"artifactId>
            <version>5.1.49<span class="hljs-name"version>
            <scope>runtime<span class="hljs-name"scope>
        <span class="hljs-name"dependency>
        
        <dependency>
            <groupId>com.baomidou<span class="hljs-name"groupId>
            <artifactId>mybatis-plus-boot-starter<span class="hljs-name"artifactId>
            <version>3.3.1.tmp<span class="hljs-name"version>
        <span class="hljs-name"dependency>
        
        <dependency>
            <groupId>org.projectlombok<span class="hljs-name"groupId>
            <artifactId>lombok<span class="hljs-name"artifactId>
            <version>1.18.20<span class="hljs-name"version>
            <scope>provided<span class="hljs-name"scope>
        <span class="hljs-name"dependency>

1.4 配置application.yml

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?userUnicode=true&characterEncoding=UTF8&useSSL=false
    username: root
    password: 123
    driver-class-name: com.mysql.jdbc.Driver
server:
  servlet:
    context-path: /demo
  port: 8888

2、瘋狂貼代碼

2.1 創建定時任務線程池

@Configuration
 @Slf4j
 public class ScheduledConfig {
 
     @Bean
     public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
         log.info("創建定時任務調度線程池 start");
         ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
         threadPoolTaskScheduler.setPoolSize(20);
         threadPoolTaskScheduler.setThreadNamePrefix("taskExecutor-");
         threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
         threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
         log.info("創建定時任務調度線程池 end");
         return threadPoolTaskScheduler;
     }
 
 }

2.2 項目啟動時初始化定時任務

@Slf4j
 @Component
 public class ScheduledTaskRunner implements ApplicationRunner {
     @Autowired
     private ScheduledTaskService scheduledTaskService;
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
         log.info("----初始化定時任務開始----");
         scheduledTaskService.initTask();
         log.info("----初始化定時任務完成----");
     }
 }

2.3 定時任務公共接口

public interface ScheduledOfTask extends Runnable{
 
     void execute();
 
     @Override
     default void run() {
         execute();
     }
 }

2.4 創建兩個定時任務實現類

@Component
 @Slf4j
 public class TaskJob1 implements ScheduledOfTask{
     @Override
     public void execute() {
         log.info("執行任務1 "+ LocalDateTime.now());
     }
 }
@Component
 @Slf4j
 public class TaskJob2 implements ScheduledOfTask{
     @Override
     public void execute() {
         log.info("執行任務2 "+ LocalDateTime.now());
     }
 }

2.5 定時任務管理接口

public interface ScheduledTaskService{
 
     Boolean start(ScheduledJob scheduledJob);
 
     Boolean stop(String jobKey);
 
     Boolean restart(ScheduledJob scheduledJob);
 
     void initTask();
 }
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68525
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14338
  • Boot
    +關注

    關注

    0

    文章

    149

    瀏覽量

    35823
  • SpringBoot
    +關注

    關注

    0

    文章

    173

    瀏覽量

    177
收藏 人收藏

    評論

    相關推薦

    linux的循環定時任務

    linux循環定時任務
    發表于 05-20 14:59

    定時任務的發展史是怎么樣的

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

    SpringBoot如何實現動態增刪啟停定時任務

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

    Python定時任務實現方式

    在日常工作中,我們常常會用到需要周期性執行的任務,一種方式是采用 Linux 系統自帶的 crond 結合命令行實現。另外一種方式是直接使用Python。接下來整理的是常見的Python定時任務
    的頭像 發表于 10-08 15:20 ?5725次閱讀

    如何在SpringBoot項目中實現動態定時任務

    之前寫過文章記錄怎么在SpringBoot項目中簡單使用定時任務,不過由于要借助cron表達式且都提前定義好放在配置文件里,不能在項目運行中動態修改任務執行時間,實在不太靈活。
    的頭像 發表于 09-30 11:16 ?1803次閱讀

    解析Golang定時任務庫gron設計和原理

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

    求一種SpringBoot定時任務動態管理通用解決方案

    SpringBoot定時任務的加強工具,實現SpringBoot原生的定時任務進行動態管理,完全兼容原生@Scheduled注解,無需對
    的頭像 發表于 02-03 09:49 ?774次閱讀

    SpringBoot如何實現定時任務(下)

    SpringBoot創建定時任務的方式很簡單,主要有兩種方式:一、基于注解的方式(@Scheduled)二、數據庫動態配置。實際開發中,第一種需要在代碼中寫死表達式,如果修改起來,又得重啟會顯得很麻煩;所以我們往往會采取第二種方式,可以直接從數據庫中讀取
    的頭像 發表于 04-07 14:51 ?1231次閱讀
    <b class='flag-5'>SpringBoot</b>如何<b class='flag-5'>實現</b><b class='flag-5'>定時任務</b>(下)

    Spring Boot中整合兩種定時任務的方法

    在 Spring + SpringMVC 環境中,一般來說,要實現定時任務,我們有兩中方案,一種是使用 Spring 自帶的定時任務處理器 @Scheduled 注解,另一種就是使用第三方
    的頭像 發表于 04-07 14:55 ?1543次閱讀
    Spring Boot中整合兩種<b class='flag-5'>定時任務</b>的方法

    在Spring Boot中如何使用定時任務

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

    如何動態添加修改刪除定時任務

    如何動態添加修改刪除定時任務?那么我們一起看看具體怎么實現,先看下本節大綱: (1)思路說明; (2)代碼解析; (3)修改定時任務執行周期特別說明;
    的頭像 發表于 04-12 11:06 ?1071次閱讀

    Linux如何使用cron進行定時任務的操作

    按計劃執行命令對于計算機來說非常重要,因為假如我親自去執行一些任務的話,可能會因為多方面因素不能按時執行,所以定時任務就顯得非常重要了! cron就是一個能夠執行定時任務的命令,其實該命令本身不難,下面小編帶您詳細了解!
    的頭像 發表于 05-12 16:27 ?2050次閱讀

    python定時任務實踐

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

    定時器如何實現定時任務

    1.1、單次定時任務實現 boost 的asio庫里有幾個定時器,老的有 deadline_timer , 還有三個可配合 C++11 的 chrono
    的頭像 發表于 11-09 17:20 ?944次閱讀

    linux定時任務的用法總結

    習慣了使用 windows 的計劃任務,使用 linux 中的 crontab 管理定時任務時很不適應。
    的頭像 發表于 08-14 18:16 ?838次閱讀
    linux<b class='flag-5'>定時任務</b>的用法總結
    主站蜘蛛池模板: 亚洲三级在线视频| 欧美一区二区视频在线观看| 精精国产www视频在线观看免费| 国产骚妇BB网| 精品国产人成亚洲区| 久久免费精彩视频| 女人高潮久久久叫人喷水| 日本xxx在线观看免费播放| 台湾佬休闲中性娱乐网| 亚洲精品久久久992KVTV| 曰本真人00XX动太图| 99久久综合精品免费| 动漫美女被到爽了流| 国产在线精品视频免费观看| 久久亚洲网站| 人与畜禽CROPROATION免费| 香蕉人人超人人超碰超国产| 樱花动漫成人隐藏入口| qvod电影网站| 国内精品视频在线播放一区| 噜噜噜狠狠夜夜躁精品| 色欲AV精品人妻一区二区三区| 亚洲精品卡2卡3卡4卡5卡区| 99re久久免费热在线视频手机 | 无人区免费一二三四乱码| 亚洲一品AV片观看五月色婷婷 | 被高跟鞋调教丨vk| 国产亚洲tv在线观看| 美女伊人网| 五月丁香啪啪.| 姉调无修版ova国语版| 丰满少妇67194视频| 久99久热只有精品国产99| 噼里啪啦免费观看视频大全| 亚洲不卡视频| JIZJIZJIZ 日本老师水多| 韩国演艺圈悲惨在线| 琪琪色原网20岁以下热热色原网站| 亚洲国产在线播放在线| s8sp视频高清在线播放| 交video|