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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久嫩草影院网站 | 欧美色青| 日本免费的一级绿象 | 色中色官网 | 全黄h全肉细节文在线观看 全彩成人18h漫画 | 办公室强行丝袜秘书啪啪 | 色综合视频在线 | 99热这里有免费国产精品 | 大伊香蕉在线精品不卡视频 | 午夜免费啪视频观看视频 | 欧美美女一级片 | 91短视频版高清在线观看免费 | 日本三级免费看 | 万域之王在线观看 | 婷婷网址 | 日日爽日日操 | 亚洲男gay同性同志 亚洲免费在线看 | 欧美激烈精交gif动态图18p | caoporen在线视频入口 | 无码AV精品一区二区三区 | 日韩二三区 | 99久久精品久久久久久清纯 | 91tv破解版不限次数 | 天天亚洲综合 | 国产酒店自拍 | 亚洲国产精品网站久久 | 国产高清视频一区二区 | chinaspanking调教 chanelpreston欧美网站 | 欧美疯狂做爰xx | 亚洲AV无码A片在线观看蜜桃 | 99精品国产久热在线观看66 | 草莓视频在线观看免费 | 处女摘花 | 恩不要好大好硬好爽3p | 歪歪私人影院成人毛片 | 婷婷综合在线 | xxxxx性中国hd| 乌克兰一级毛片 | 国产欧美成人不卡视频 | 欧美最猛性xxxxx69交 | 99精品免费在线 |