最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實(shí)現(xiàn)動態(tài)定時任務(wù)

 更新時間:2020年09月24日 15:29:46   作者:我滴太陽233  
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)動態(tài)定時任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

項目情況:

在當(dāng)前項目中需要一個定時任務(wù)來清除過期的校驗(yàn)碼,如果使用數(shù)據(jù)庫存儲過程的話不方便維護(hù)。因此采用SpringBoot自帶的方式來設(shè)置定時任務(wù)。

技術(shù)說明:

SpringBoot自帶的方式有兩種可以實(shí)現(xiàn):

一種是使用@Scheduled注解的方式,只需要在啟動類或者它所在的類上添加@EnableScheduling注解允許執(zhí)行定時任務(wù),并且設(shè)置Schecduled注解的參數(shù),諸如:

        1.cron是設(shè)置定時執(zhí)行的表達(dá)式,如 0 0/5 * * * ?每隔五分鐘執(zhí)行一次

        2.zone表示執(zhí)行時間的時區(qū)

        3.fixedDelay 和fixedDelayString 表示一個固定延遲時間執(zhí)行,上個任務(wù)完成后,延遲多長時間執(zhí)行

        4.fixedRate 和fixedRateString表示一個固定頻率執(zhí)行,上個任務(wù)開始后,多長時間后開始執(zhí)行

        5.initialDelay 和initialDelayString表示一個初始延遲時間,第一次被調(diào)用前延遲的時間

示例代碼如下:

package com.allcom.service;
 
import com.allcom.dao.MysqlDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
 
/**
* @Author: zy
* @Description: 定時任務(wù)
* @Date: 2018/7/12_15:15
**/
@Service
public class TaskService {
 
 @Autowired
 private MysqlDao mysqlDao;
 
 @Scheduled(fixedRate = 5*1000)
 public void deleteInvalidCheckCode() {
  mysqlDao.deleteInvalidCheckCode();
 }
 
}

另一種方式是通過自定義配置類的方式,步驟如下:

第一步:新建一個類實(shí)現(xiàn)SchedulingConfigurer接口,并添加@Configuration注解,@EnableScheduling注解可以寫在這里也可以寫在啟動類上,這里我寫在了啟動類上。

第二步: 重寫configureTasks方法如下代碼所示:

package com.allcom.task;
 
import com.allcom.service.TaskService;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
 
 
 
import java.util.Date;
 
 
@Configuration
public class MyScheduledTask implements SchedulingConfigurer {
 
 @Mapper
 public interface CronMapper {
  @Select("select cron from user_cron limit 1")
  String getCron();
 }
 
 @Autowired
 @SuppressWarnings("all")
 CronMapper cronMapper;
 
 
 @Autowired
 @SuppressWarnings("all")
 private TaskService taskService;
 
 @Override
 public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
   scheduledTaskRegistrar.addTriggerTask(new Runnable() {
    @Override
    public void run() {
     try {
      taskService.deleteInvalidCheckCode(); //異步定時操作
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
   }, new Trigger() {
    @Override
    public Date nextExecutionTime(TriggerContext triggerContext) {
     String cron =cronMapper.getCron();
     if("".equals(cron)||cron==null)
      return null;
     //定時任務(wù)觸發(fā),可修改定時任務(wù)的執(zhí)行周期
     CronTrigger trigger=new CronTrigger(cron);
     Date nextExecDate= trigger.nextExecutionTime(triggerContext);
     return nextExecDate;
    }
   });
 }
}

第三步:啟動項目,定時任務(wù)就自動添加了。

注意:這里我使用的是@Mapper注解使用Mybatis寫了一個獲取cron表達(dá)式的接口,可以從數(shù)據(jù)庫中查詢自定義表的cron字段值。這樣的話項目運(yùn)行的過程中,不用重新啟動項目,只需要修改數(shù)據(jù)庫中的字段值就可以動態(tài)的修改定時任務(wù)中的cron值,實(shí)現(xiàn)動態(tài)修改定時任務(wù)執(zhí)行時間的功能。

但是,這種方式有一個缺點(diǎn)就是,將數(shù)據(jù)庫cron字段值設(shè)為null或者“”以及不正確的值,這樣定時任務(wù)就會停止執(zhí)行,這樣就算你下一次再給cron字段添加了正確的值,項目也不會執(zhí)行定時任務(wù)了,這個時候就需要重新啟動數(shù)據(jù)庫才行。

這種方式適合于前臺給幾個特定的值給用戶選擇,不能讓用戶隨便填。

附定時任務(wù)執(zhí)行內(nèi)容:

/**
* @Author: zy
* @Description: 刪除用戶過期的校驗(yàn)碼
* @Date: 2018/7/12_15:20
**/
@Delete("DELETE from registinfo where id in (select id from (SELECT id FROM registinfo WHERE TIMESTAMPDIFF(MINUTE,lastupdatetime,NOW()) >= 15)a )")
void deleteInvalidCheckCode();

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中SynchronousQueue的底層實(shí)現(xiàn)原理剖析

    Java中SynchronousQueue的底層實(shí)現(xiàn)原理剖析

    BlockingQueue的實(shí)現(xiàn)類中,有一種阻塞隊列比較特殊,就是SynchronousQueue(同步移交隊列),隊列長度為0。本文就來剖析一下SynchronousQueue的底層實(shí)現(xiàn)原理,感興趣的可以了解一下
    2022-11-11
  • postman中參數(shù)和x-www-form-urlencoded傳值的區(qū)別及說明

    postman中參數(shù)和x-www-form-urlencoded傳值的區(qū)別及說明

    在Postman中,參數(shù)傳遞有多種方式,其中params和x-www-form-urlencoded最為常用,Params主要用于URL中傳遞查詢參數(shù),適合GET請求和非敏感數(shù)據(jù),其特點(diǎn)是將參數(shù)作為查詢字符串附加在URL末尾,適用于過濾和排序等操作
    2024-09-09
  • 詳解Java Spring AOP

    詳解Java Spring AOP

    這篇文章主要為大家介紹了Java Spring AOP,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java圖形界面超實(shí)用使用教程

    Java圖形界面超實(shí)用使用教程

    在Java編程中圖形界面應(yīng)用程序是非常常見和重要的一部分,下面這篇文章主要給大家介紹了關(guān)于Java圖形界面的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • IDEA下"File is read-only"可能原因分析及"找不到或無法加載主類"的問題

    IDEA下"File is read-only"可能原因分析及"找不到

    這篇文章主要介紹了IDEA下"File is read-only"可能原因分析及"找不到或無法加載主類"的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 基于Java和FFmpeg實(shí)現(xiàn)視頻壓縮和剪輯功能

    基于Java和FFmpeg實(shí)現(xiàn)視頻壓縮和剪輯功能

    在視頻處理開發(fā)中,壓縮和剪輯是常見的需求,本文將介紹如何使用 Java 結(jié)合 FFmpeg 實(shí)現(xiàn)視頻壓縮和剪輯功能,同時去除數(shù)據(jù)庫操作,僅專注于視頻處理,需要的朋友可以參考下
    2025-08-08
  • JSP 開發(fā)之 releaseSession的實(shí)例詳解

    JSP 開發(fā)之 releaseSession的實(shí)例詳解

    這篇文章主要介紹了JSP 開發(fā)之 releaseSession的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • idea更換jdk版本的完整步驟(附詳細(xì)圖文)

    idea更換jdk版本的完整步驟(附詳細(xì)圖文)

    idea很多地方都設(shè)置了jdk版本,不同模塊的jdk版本也可能不一樣,這篇文章主要介紹了idea更換jdk版本的完整步驟,通過文中介紹的步驟可以成功更換jdk版本,需要的朋友可以參考下
    2025-04-04
  • SpringBoot處理接口冪等性的兩種方法詳解

    SpringBoot處理接口冪等性的兩種方法詳解

    接口冪等性處理算是一個非常常見的需求了,我們在很多項目中其實(shí)都會遇到。本文為大家總結(jié)了兩個處理接口冪等性的兩種常見方案,需要的可以參考一下
    2022-06-06
  • Spring中WebClient的創(chuàng)建和使用詳解

    Spring中WebClient的創(chuàng)建和使用詳解

    這篇文章主要介紹了Spring中WebClient的創(chuàng)建和使用詳解,在Spring5中,出現(xiàn)了Reactive響應(yīng)式編程思想,并且為網(wǎng)絡(luò)編程提供相關(guān)響應(yīng)式編程的支持,如提供了WebFlux,它是Spring提供的異步非阻塞的響應(yīng)式的網(wǎng)絡(luò)框架,需要的朋友可以參考下
    2023-11-11

最新評論

涡阳县| 山丹县| 公主岭市| 阿尔山市| 郑州市| 丹巴县| 台前县| 静乐县| 绿春县| 革吉县| 容城县| 获嘉县| 武宣县| 宁乡县| 明水县| 桃源县| 阿尔山市| 沽源县| 旬阳县| 秦安县| 秭归县| 浙江省| 扎兰屯市| 汉沽区| 曲麻莱县| 广元市| 英超| 三明市| 廊坊市| 吉木萨尔县| 大庆市| 南雄市| 比如县| 龙川县| 喀喇| 阿合奇县| 句容市| 沽源县| 广德县| 长葛市| 祁东县|