精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring boot開啟定時任務的三種方式

數據庫 其他數據庫
使用@Scheduled 注解很方便,但缺點是當我們調整了執行周期的時候,需要重啟應用才能生效,這多少有些不方便。為了達到實時生效的效果,那么可以使用接口來完成定時任務,統一將定時器信息存放在數據庫中。

前言

spring boot進行定時任務一共有三種方式,第一種也就是最簡單的一種:基于注解 (@Scheduled)的方式 ;第二種:基于接口 (SchedulingConfigurer) ;第三種:基于注解設定多線程定時任務 。

一、基于注解的方式

首先,打開idea,創建springboot項目,無需引入任何jar,springboot自帶定時。

然后,在啟動類中用注解@EnableScheduling進行標注,表明此類 存在定時任務。在定時執行的方法之上添加注解

@Scheduled(cron ="*/6 * * * * ?")。
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;


@SpringBootApplication
@EnableScheduling
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Scheduled(cron ="*/6 * * * * ?")
    public void sayHello() {
        System.out.println("hello");
    }
}

點擊啟動,即可看到控制臺6秒輸出一次“hello”。

當然,定時任務也可以放在其他類中。例如創建類Task1。

package com.example.task;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @Description
 * @ClassName Task1
 * @Author User
 * @date 2020.06.07 12:24
 */
@Component
public class Task1 {

    @Scheduled(cron ="*/1 * * * * ?")
    public void sayWord() {
        System.out.println("world");
    }
}

然后可以看到控制臺的輸出結果:

圖片圖片

這里有個要注意的細節,就是啟動類需要能掃描到定時任務類,否則定時任務啟動不起來。不僅需要@Component注解,也需要將啟動類位置位于定時任務類之上。如下圖:

圖片圖片

筆者就是犯了這樣的錯,一直沒啟動起來。

@Scheduled除過cron還有三種方式:fixedRate,fixedDelay,initialDelay

cron:

fixedRate:

@Configuration
@EnableScheduling    //開啟定時任務
public class ScheduleTask1 {
    //每3秒執行一次
    @Scheduled(fixedDelay = 3000)
    private void myTasks() {
        System.out.println("I do myself per third seconds");
    }
}

fixedRate:

@Component
@EnableScheduling    //開啟定時任務
public class ScheduleTask2 {
    //每10秒執行一次
    @Scheduled(fixedRate = 10000)
    private void myTasks2() {
        System.out.println("我是一個定時任務");
    }
}

initialDelay:

@Component
@EnableScheduling    //開啟定時任務
public class ScheduleTask {
    //容器啟動后,延遲10秒后再執行一次定時器,以后每10秒再執行一次該定時器。
    @Scheduled(initialDelay = 10000, fixedRate = 10000)
    private void myTasks3() {
        System.out.println("我是一個定時任務3");
    }
}

cron解釋

cron

cron 用法跟linux下是一摸一樣的,如果你搞過linux下的定時,那么必然很熟悉。

結構

cron表達式是一個字符串,分為6或7個域,每兩個域之間用空格分隔,

其語法格式為:"秒域 分域 時域 日域 月域 周域 年域"

取值范圍

常例

本方法的demo地址: https://github.com/SUST-MaZhen/scheduledTask.git

基于接口的方式

使用@Scheduled 注解很方便,但缺點是當我們調整了執行周期的時候,需要重啟應用才能生效,這多少有些不方便。為了達到實時生效的效果,那么可以使用接口來完成定時任務,統一將定時器信息存放在數據庫中。

在mysql中執行一下腳本插入定時任務:

drop table if exists `scheduled`;
create table `scheduled` (
 `cron_id` varchar(30) NOT NULL primary key,
 `cron_name` varchar(30) NULL,
 `cron` varchar(30) NOT NULL
);
insert into `scheduled` values ('1','定時器任務一','0/6 * * * * ?');

創建一個springboot 項目:我們這里只添加一個mapper,不要bean也不要service以及controller,只是為了演示定時功能而已。demo結構:

圖片圖片

數據源基本配置:

## mysql數據源配置
spring.datasource.url=jdbc:mysql://host:3306/dbname?useUnicode=true&serverTimeznotallow=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

## Mybatis 配置
# 配置為 com.example.bean 指向實體類包路徑
#mybatis.typeAliasesPackage=com.zhenma.bean

mapper也就是dao:

package com.zhenma.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

@Repository
@Mapper
public interface CronMapper {
    @Select("select cron from scheduled where cron_id = #{id}")
    public String getCron(int id);
}

task類:

package com.zhenma.scheduled;

import com.zhenma.mapper.CronMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

/**
 * @Description
 * @ClassName MyTask
 * @Author User
 * @date 2020.06.07 15:23
 */
@Component
@EnableScheduling
public class MyTask implements SchedulingConfigurer {

    @Autowired
    protected CronMapper cronMapper;

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.addTriggerTask(() -> process(),
                triggerContext -> {
                    String cron = cronMapper.getCron(1);
                    if (cron.isEmpty()) {
                        System.out.println("cron is null");
                    }
                    return new CronTrigger(cron).nextExecutionTime(triggerContext);
                });
    }

    private void process() {
        System.out.println("基于接口定時任務");
    }
}

運行結果:

圖片圖片

從結果中可以看出,是按照每6秒也就是數據庫中查詢的結果來進行的。

需求:我現在需要每10秒執行一次定時任務,該怎么辦呢?對!只需要修改數據庫值即可,server無需重啟。觀察修改后的結果。

圖片圖片

感覺好(????)??嗨哦。

demo地址:https://github.com/SUST-MaZhen/scheduledtask2.git

四、 基于注解設定多線程定時任務

前面講到了@Scheduled執行周期任務會受到上次一個任務的執行時間影響。那么可以開啟多線程執行周期任務。

創建springboot項目,創建一個多線程定時任務類如下:

package com.example.task;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @Description
 * @ClassName MultiThreadTask
 * @Author User
 * @date 2020.06.07 18:56
 */
@EnableScheduling   // 1.開啟定時任務
@EnableAsync        // 2.開啟多線程
@Component
public class MultiThreadTask {

    @Async
    @Scheduled(fixedDelay = 1000)  //間隔1秒
    public void first() throws InterruptedException {
        System.out.println("第一個定時任務開始 : " + LocalDateTime.now().toLocalTime() + "\r\n線程 : " + Thread.currentThread().getName());
        Thread.sleep(1000 * 10);
    }

    @Async
    @Scheduled(fixedDelay = 2000)
    public void second() {
        System.out.println("第二個定時任務開始 : " + LocalDateTime.now().toLocalTime() + "\r\n線程 : " + Thread.currentThread().getName());
    }
}

 執行結果如下:

圖片圖片

從結果可以看出:第一個任務的執行時間也不受其本身執行時間的限制。兩個任務也互不影響。

demo地址:  https://github.com/SUST-MaZhen/scheduledtash3.git

五、總結

本文介紹了spring boot創建定時任務的三種方式,當然還有其他方式,例如最近本的定時器來進行等等。

責任編輯:武曉燕 來源: 程序員子龍
相關推薦

2024-09-20 05:49:04

SpringBoot后端

2024-10-15 16:41:35

2012-07-17 09:16:16

SpringSSH

2021-03-09 14:12:07

Java 框架定時

2022-10-18 10:41:44

Flowable服務任務

2025-10-09 07:47:04

2009-07-20 15:08:41

Spring實例化Be

2011-06-03 11:53:06

Spring接口

2021-06-30 07:19:34

SpringBoot定時任務

2012-02-07 13:31:14

SpringJava

2022-01-04 11:15:02

Spring Boot任務阻塞

2021-08-05 07:28:25

Java實現方式

2022-07-07 07:59:46

Spring定時任務

2024-01-22 08:53:00

策略任務RocketMQ

2021-11-22 12:35:40

Python命令定時任務

2024-02-26 11:12:33

定時任務線程

2024-01-31 08:38:57

Python定時任務函數

2023-12-02 18:32:32

SpringDocker鏡像

2025-07-29 04:11:00

SpringJSON數據

2022-03-23 11:45:39

Quartz數據庫節點
點贊
收藏

51CTO技術棧公眾號

亚洲一二三区在线| 国产成人av网址| 波多野结衣三级视频| 成人免费一区二区三区牛牛| 99精品视频在线观看| 91av成人在线| 中文字幕求饶的少妇| 少妇高潮一区二区三区99| 一区二区三区四区激情| 精品在线视频一区二区三区| 亚洲午夜无码久久久久| 91精品91| 精品网站999www| 中文字幕 日韩 欧美| 天天色天天射天天综合网| 337p粉嫩大胆噜噜噜噜噜91av| 国产不卡在线观看| 免费看一级一片| 红桃视频在线观看一区二区| 91精品国产91久久久久久一区二区 | 尤物99国产成人精品视频| 99精品999| 乡村艳史在线观看| 最新日韩在线视频| 欧美深深色噜噜狠狠yyy| 99热这里是精品| 久久福利影视| 久久噜噜噜精品国产亚洲综合| 国产精品美女高潮无套| 美国成人xxx| 欧美一区二区三区四区视频| www.涩涩涩| 国模精品视频| 亚洲一区精品在线| 亚洲mv在线看| 牛牛影视精品影视| heyzo一本久久综合| 91免费视频国产| 亚洲熟女乱色一区二区三区久久久| 伊人精品成人久久综合软件| 色偷偷9999www| 中文字幕人妻一区二区三区在线视频| 风间由美性色一区二区三区四区 | 欧美亚洲成人网| 久久久久噜噜噜亚洲熟女综合| 欧美少妇xxxx| 亚洲欧美日韩一区在线| 特级西西人体wwwww| 中文无码日韩欧| 欧美一区二区三区人| 天天操,天天操| 日韩av电影资源网| 色综合久久久网| 国产福利视频在线播放| 蜜桃视频在线观看播放| 亚洲一本大道在线| 久久成人福利视频| 久久一卡二卡| 亚洲二区视频在线| 五十路熟女丰满大屁股 | 欧美最近摘花xxxx摘花| 国产视频91在线| 在线亚洲观看| 欧美在线免费视频| 无码人妻久久一区二区三区 | 国产精品欧美日韩一区二区| 中文字幕一区在线播放| 亚洲综合社区| 国产精品va在线播放| 五月天激情四射| 日韩电影在线免费观看| 国产精品亚发布| 在线视频你懂得| 韩国av一区二区三区在线观看| 91视频免费在线| 亚洲av无码国产综合专区 | 欧美 日韩 国产 成人 在线观看 | 99色这里只有精品| ****av在线网毛片| 欧美视频在线免费看| 成人午夜视频免费在线观看| 性高爱久久久久久久久| 欧美三级三级三级| 一级黄色免费毛片| 美国成人xxx| 夜夜嗨av一区二区三区免费区| 成人午夜免费影院| 伊人成人在线视频| 国产99久久精品一区二区 夜夜躁日日躁 | 国产在线资源| 亚洲丝袜精品丝袜在线| 成人免费观看cn| 日韩av电影资源网| 精品精品国产高清一毛片一天堂| 欧美图片一区二区| 亚洲精品成人| 日韩暖暖在线视频| 国产成人久久精品77777综合| 99视频一区二区| 亚洲国产精品毛片| 国产蜜臀在线| 欧美手机在线视频| 天天躁日日躁狠狠躁av| 欧美三级情趣内衣| 欧美日本高清视频| 欧美亚洲另类小说| 国产精品99久久久久| 欧美亚洲免费在线| 日韩欧美一起| 欧美三区在线视频| 西西大胆午夜视频| 雨宫琴音一区二区三区| 日本精品久久久久久久| 亚洲精品久久久久avwww潮水| 久久精品一区二区三区四区| 欧美中日韩在线| 99久久er| 亚洲热线99精品视频| 久久免费在线观看视频| 老鸭窝一区二区久久精品| 久草一区二区| 婷婷色在线播放| 欧美日韩激情在线| 欧美狂猛xxxxx乱大交3| 精品91视频| 亚洲一区二区三区在线免费观看| 福利片在线观看| 精品成人av一区| 岛国大片在线免费观看| 欧美freesextv| 国产精品电影一区| 日韩成人黄色| 婷婷久久综合九色国产成人| 男男受被啪到高潮自述| 91久久久精品国产| 国产精品免费网站| 日本a一级在线免费播放| 亚洲午夜av在线| 极品白嫩少妇无套内谢| 我不卡影院28| 成人a在线观看| 91在线看片| 欧美色图一区二区三区| 老头老太做爰xxx视频| 狂野欧美一区| 欧美日韩精品一区| 欧美电影网站| 亚洲人成电影网站色| 欧美一区二区激情视频| 91丨porny丨中文| 精品这里只有精品| 好吊妞视频这里有精品| 九九热最新视频//这里只有精品| 国产乱码精品一区二区三区精东| 国产精品成人免费精品自在线观看| 国产超碰在线播放| 精品香蕉视频| 国产综合在线观看视频| av片在线观看网站| 精品剧情在线观看| 欧美不卡视频在线观看| 91免费版在线| 高清一区二区视频| 91精品国产自产拍在线观看蜜| 成人网在线免费看| 手机电影在线观看| 亚洲成年人影院在线| 国产情侣自拍av| 欧美激情一区二区在线| 日本超碰在线观看| 欧美日韩91| 国产一区二区三区四区五区在线 | 污视频在线看网站| 亚洲精品久久久久久久久久久| 五月天综合激情| 国产欧美日韩三区| 999热精品视频| av不卡在线| 亚洲精品一区二区三区av| 亚洲精品第一| 久久久久久12| 黄色在线视频观看网站| 欧美日韩大陆一区二区| 国产无遮无挡120秒| 久久久精品日韩欧美| 五月花丁香婷婷| 99国产一区| 亚洲成人蜜桃| 成人香蕉社区| 国产精品久久久久久久av电影| 亚洲区欧洲区| 亚洲人在线视频| 国产成人精品毛片| 欧洲另类一二三四区| 国产乱国产乱老熟300| 久久综合久久综合九色| 欧美国产日韩另类 | 免费黄频在线观看| 国产农村妇女精品一二区| 亚洲午夜精品久久| 天堂成人娱乐在线视频免费播放网站 | 成人三级伦理片| 三级在线免费看| 狠狠88综合久久久久综合网| 色女孩综合网| 青青一区二区| 99久久99久久精品国产片| 中文字幕在线视频久| 久久97精品久久久久久久不卡| 国产黄色免费在线观看| 亚洲成人av资源网| 国产一区二区在线视频聊天| 精品成人在线视频| 久久久久成人精品无码| 亚洲欧洲日韩综合一区二区| 欧美做受喷浆在线观看| 国产福利不卡视频| 欧美激情第3页| 老牛嫩草一区二区三区日本| 人体内射精一区二区三区 | 热99这里只有精品| 欧美在线网站| 中文字幕人妻互换av久久 | 在线综合+亚洲+欧美中文字幕| 中文在线观看免费网站| 亚洲精品视频自拍| 国产调教在线观看| 91香蕉视频黄| 色综合久久五月| 国产成人亚洲综合a∨猫咪| 看欧美ab黄色大片视频免费| 国产日韩精品视频一区二区三区 | 在线电影福利片| 色琪琪综合男人的天堂aⅴ视频| av女名字大全列表| 亚洲成年人在线播放| 草草视频在线播放| 3atv一区二区三区| 一区二区久久精品66国产精品| 日韩欧美在线视频日韩欧美在线视频 | 国产精品嫩草视频| 欧美动物xxx| 日本欧美爱爱爱| 偷拍精品精品一区二区三区| 欧美亚州一区二区三区| 午夜激情在线播放| 欧美在线视频免费播放| 欧亚av在线| 国产91av在线| 国模冰冰炮一区二区| 青青a在线精品免费观看| 在线看片福利| 日韩美女在线播放| 高清电影一区| 国产日韩欧美夫妻视频在线观看 | 久久丫精品忘忧草西安产品| 久久久激情视频| 女人黄色一级片| 国产精品久99| 校园春色 亚洲| 一区二区三区四区视频精品免费| 国产小视频在线观看免费| 亚洲五月六月丁香激情| xxxx.国产| 欧洲日韩一区二区三区| 国产精品视频无码| 精品国产一区二区三区忘忧草| 欧美 日韩 国产 在线| 日韩av在线网| 国产爆初菊在线观看免费视频网站 | 亚洲美女在线播放| 久久女同互慰一区二区三区| 极品久久久久久久| 亚洲精品国产第一综合99久久 | 99九九电视剧免费观看| 日韩激情网站| 亚洲精品高清视频| 欧美日韩一区二区高清| av黄色在线网站| 免费久久精品视频| 日本少妇xxxx软件| 国产亚洲精品7777| 中文字幕手机在线观看| 精品国产鲁一鲁一区二区张丽 | 日韩免费一区二区| 青青草在线免费视频| 中文字幕亚洲国产| 黄色的视频在线观看| 国产成人福利视频| 天堂va在线高清一区| 欧美一级二级三级| 欧美精选在线| 亚洲性生活网站| 国产高清精品网站| www色com| 午夜亚洲国产au精品一区二区| 中文字幕欧美色图| 亚洲国产99精品国自产| 大片免费播放在线视频| 中文字幕亚洲自拍| 国产黄大片在线观看| 午夜精品一区二区三区在线播放| 小黄鸭精品aⅴ导航网站入口| 91香蕉嫩草影院入口| 嫩草影视亚洲| 男女啪啪免费观看| 免费视频一区二区| 视频免费在线观看| 中文字幕中文字幕中文字幕亚洲无线| 欧美另类视频在线观看| 色婷婷久久99综合精品jk白丝| 中国老头性行为xxxx| 精品对白一区国产伦| 成年人免费在线视频| 26uuu国产精品视频| 成人国产精品久久| 欧美18视频| 亚洲国产综合在线看不卡| 五月婷婷激情久久| 久久久欧美精品sm网站| 久久黄色免费网站| 欧美日韩免费高清一区色橹橹| 外国精品视频在线观看| 少妇精69xxtheporn| 色在线视频网| 国产精品久久久久久搜索 | 九色91国产| 欧美日韩调教| 亚洲五月激情网| 国产精品不卡视频| 超碰在线97观看| 亚洲国产精品美女| wwwww亚洲| 成人久久一区二区三区| 日韩在线高清| 成人免费视频久久| 91麻豆成人久久精品二区三区| 国产精品自拍视频一区| 欧美一区二区三区公司| 里番在线观看网站| 国产精品爽爽爽爽爽爽在线观看| 精品欧美午夜寂寞影院| 无码人妻少妇伦在线电影| 激情欧美一区二区三区在线观看| 亚洲精品成人无码熟妇在线| 亚欧色一区w666天堂| 成 人片 黄 色 大 片| 久久99亚洲热视| 深夜激情久久| 椎名由奈jux491在线播放| 国内成人精品2018免费看| 成人免费视频入口| 91精品国产综合久久精品| 在线观看完整版免费| 国产97色在线| 色狮一区二区三区四区视频| 性刺激的欧美三级视频| 自拍偷在线精品自拍偷无码专区| 91激情在线观看| 美日韩精品免费视频| 成人午夜888| 国内外成人激情免费视频| 粉嫩欧美一区二区三区高清影视| 欧美人妻一区二区| 亚洲大胆人体视频| 国产一二三在线| 欧美一区二区三区在线播放| 美女爽到高潮91| 中文乱码字幕高清一区二区| 日韩一级片在线观看| 久草在线新免费首页资源站| 成人福利免费观看| 亚洲国产mv| av在线网站观看| 欧美三级电影一区| 好吊日视频在线观看| 国产在线一区二区三区播放| 一本色道精品久久一区二区三区| 亚洲av无码国产精品久久| 欧美日韩免费一区二区三区视频| 国产原厂视频在线观看| 国产伦精品一区二区三区视频黑人| 99精品国产一区二区青青牛奶 | 久久色精品视频| 精品国产亚洲一区二区三区在线| 三级在线免费观看| 久久综合久久鬼色| 国产又黄又大又爽| 97视频在线观看亚洲| 欧美日韩123| 一二三级黄色片| 亚欧色一区w666天堂| 91在线品视觉盛宴免费| 国产一级特黄a大片99| 琪琪一区二区三区| 精品无码一区二区三区电影桃花 | 成人av资源电影网站| 香蕉视频免费网站| 在线免费av一区| segui88久久综合9999|