一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解SpringBoot 創建定時任務(配合數據庫動態執行)

詳解SpringBoot 創建定時任務(配合數據庫動態執行)

2021-01-24 10:52yizhiwazi Java教程

本篇文章主要介紹了SpringBoot 創建定時任務(配合數據庫動態執行),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

序言:創建定時任務非常簡單,主要有兩種創建方式:一、基于注解(@scheduled) 二、基于接口(schedulingconfigurer). 前者相信大家都很熟悉,但是實際使用中我們往往想從數據庫中讀取指定時間來動態執行定時任務,這時候基于接口的定時任務就大派用場了。

一、靜態定時任務(基于注解)

基于注解來創建定時任務非常簡單,只需幾行代碼便可完成。

@scheduled 除了支持靈活的參數表達式cron之外,還支持簡單的延時操作,例如 fixeddelay ,fixedrate 填寫相應的毫秒數即可。

?
1
2
3
4
5
6
7
8
9
@configuration //1.主要用于標記配置類,兼備component的效果。
@enablescheduling // 2.開啟定時任務
public class simplescheduleconfig {
  //3.添加定時任務
  @scheduled(cron = "0/5 * * * * ?")
  private void configuretasks() {
    system.err.println("執行定時任務1: " + localdatetime.now());
  }
}

cron表達式參數分別表示:

秒(0~59) 例如0/5表示每5秒
分(0~59)
時(0~23)
月的某天(0~31) 需計算
月(0~11)
周幾( 可填1-7 或 sun/mon/tue/wed/thu/fri/sat)

啟動應用,可以看到控制臺的信息如下:

詳解SpringBoot 創建定時任務(配合數據庫動態執行)

誠然,使用scheduled 確實很方便,但缺點是當我們調整了執行周期的時候,需要重啟應用才能生效,這多少有些不方便。為了達到實時生效的效果,可以使用接口來完成定時任務。

二、動態定時任務(基于接口)

為了演示效果,這里選用 mysql數據庫 和 mybatis 來查詢和調整定時任務的執行周期,然后觀察定時任務的執行情況。

1.引入依賴

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!--依賴管理 -->
<dependencies>
  <dependency><!--添加web依賴 -->
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
  </dependency>
  <dependency><!--添加mybatis依賴 -->
    <groupid>org.mybatis.spring.boot</groupid>
    <artifactid>mybatis-spring-boot-starter</artifactid>
    <version>1.3.1</version>
  </dependency>
  <dependency><!--添加mysql依賴 -->
    <groupid>mysql</groupid>
    <artifactid>mysql-connector-java</artifactid>
    <scope>runtime</scope>
  </dependency>
  <dependency><!--添加test依賴 -->
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-test</artifactid>
    <scope>test</scope>
  </dependency>
</dependencies>

2.添加數據庫記錄

在navicat 連接本地數據庫,隨便打開查詢窗口,然后執行腳本內容,如下:

?
1
2
3
4
5
6
7
8
9
drop database if exists `socks`;
create database `socks`;
use `socks`;
drop table if exists `cron`;
create table `cron` (
 `cron_id` varchar(30),
 `cron` varchar(30)
);
insert into `cron` values ('1', '0/5 * * * * ?');

詳解SpringBoot 創建定時任務(配合數據庫動態執行)

然后在項目中的application.yml 添加數據源:

#application.yml 配置如下:

?
1
2
3
4
5
spring:
 datasource:
  url: jdbc:mysql://localhost:3306/socks?usessl=false
  username: root
  password: root

3.創建定時器

數據庫準備好數據之后,我們編寫定時任務,注意這里添加的是triggertask,目的是循環讀取我們在數據庫設置好的執行周期,以及執行相關定時任務的內容。具體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@configuration
@enablescheduling
public class completescheduleconfig implements schedulingconfigurer {
 
  @mapper
  public interface cronmapper {
    @select("select cron from cron limit 1")
    string getcron();
  }
 
  @autowired
  @suppresswarnings("all")
  cronmapper cronmapper;
 
  /**
   * 執行定時任務.
   */
  @override
  public void configuretasks(scheduledtaskregistrar taskregistrar) {
    taskregistrar.addtriggertask(
        //1.添加任務內容(runnable)
        () -> system.out.println("執行定時任務2: " + localdatetime.now().tolocaltime()),
        //2.設置執行周期(trigger)
        triggercontext -> {
          //2.1 從數據庫獲取執行周期
          string cron = cronmapper.getcron();
          //2.2 合法性校驗.
          if (stringutils.isempty(cron)) {
            // omitted code ..
          }
          //2.3 返回執行周期(date)
          return new crontrigger(cron).nextexecutiontime(triggercontext);
        }
    );
  }
 
}

4. 動態修改執行周期

啟動應用后,查看控制臺,打印時間是我們預期的每5秒一次:

詳解SpringBoot 創建定時任務(配合數據庫動態執行)

這時候打開navicat ,將執行周期修改為每1秒執行一次,然后觀察控制臺打印效果:

詳解SpringBoot 創建定時任務(配合數據庫動態執行)

可以清楚看到執行周期已經改變,并且不需要我們重啟應用,十分方便。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.jianshu.com/p/d160f2536de7?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产老村长足疗店对白 | 美女沟厕撒尿全过程高清图片 | 放荡的女老板bd中文字幕 | 男人的天堂久久精品激情 | 精品一区二区三区视频 | 免费看美女被靠到爽 | 午夜神器老司机高清无码 | bl超h 高h 污肉快穿np | 欧美日韩一区二区三区免费 | 99视频九九精品视频在线观看 | 亚洲va国产日韩欧美精品色婷婷 | 9191视频 | 91成人免费观看 | 扒开双腿猛进入爽爽视频ai | sss在线观看免费视频 | av排名| 成人影院免费在线观看 | 日韩r | 91桃色视频在线观看 | 教室眠催白丝美女校花 | 亚洲性视频在线观看 | 湖南美女被黑人4p到惨叫 | 共妻高h| 99视频网址 | 免费视频片在线观看大片 | 欧美3d怪物交videos网站 | 9l国产精品久久久久麻豆 | 久久热这里面只有精品 | 欧美日韩视频一区三区二区 | 日本情趣视频 | 日韩手机在线视频 | 亚洲麻豆精品 | 九九九精品视频 | 亚洲精品在线免费观看视频 | 日韩毛片免费在线观看 | 美女视频久久 | 美女福利视频午夜在线 | 男人午夜免费视频 | 国产一级片免费观看 | 精品国产成人a区在线观看 精品高潮呻吟99AV无码视频 | 日本三级s级在线播放 |