欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

項(xiàng)目情況:

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

技術(shù)說明:

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

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

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

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

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

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

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

示例代碼如下:

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: 定時(shí)任務(wù)
* @Date: 2018/7/12_15:15
**/
@Service
public class TaskService {
 
 @Autowired
 private MysqlDao mysqlDao;
 
 @Scheduled(fixedRate = 5*1000)
 public void deleteInvalidCheckCode() {
  mysqlDao.deleteInvalidCheckCode();
 }
 
}

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

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

第二步: 重寫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(); //異步定時(shí)操作
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
   }, new Trigger() {
    @Override
    public Date nextExecutionTime(TriggerContext triggerContext) {
     String cron =cronMapper.getCron();
     if("".equals(cron)||cron==null)
      return null;
     //定時(shí)任務(wù)觸發(fā),可修改定時(shí)任務(wù)的執(zhí)行周期
     CronTrigger trigger=new CronTrigger(cron);
     Date nextExecDate= trigger.nextExecutionTime(triggerContext);
     return nextExecDate;
    }
   });
 }
}

第三步:啟動(dòng)項(xiàng)目,定時(shí)任務(wù)就自動(dòng)添加了。

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

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

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

附定時(shí)任務(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();

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

相關(guān)文章

  • Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例

    Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例

    本篇文章主要介紹了Java 處理圖片與base64 編碼的相互轉(zhuǎn)換的示例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • java實(shí)現(xiàn)酒店管理系統(tǒng)

    java實(shí)現(xiàn)酒店管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • java 學(xué)習(xí)筆記(入門篇)_java的安裝與配置

    java 學(xué)習(xí)筆記(入門篇)_java的安裝與配置

    學(xué)習(xí)Java已經(jīng)很長(zhǎng)時(shí)間了,由于基礎(chǔ)不好遇到問題就無從下手,所以,打算寫Java的隨手筆記來鞏固基礎(chǔ),加強(qiáng)學(xué)習(xí),接下來講解java的安裝,配置等,感興趣的朋友可以參考下
    2013-01-01
  • 詳解Java中異步轉(zhuǎn)同步的六種方法

    詳解Java中異步轉(zhuǎn)同步的六種方法

    針對(duì)應(yīng)用中異步調(diào)用,能不能像同步調(diào)用一樣立刻獲取到命令的執(zhí)行結(jié)果,如何實(shí)現(xiàn)異步轉(zhuǎn)同步?不要擔(dān)心,本文就來為大家詳細(xì)講講Java中異步轉(zhuǎn)同步的六種方法,感興趣的可以了解一下
    2022-06-06
  • SpringBoot如何讀取mock數(shù)據(jù)(高效調(diào)試接口)

    SpringBoot如何讀取mock數(shù)據(jù)(高效調(diào)試接口)

    本文介紹如何在SpringBoot項(xiàng)目中讀取resources目錄下的mock數(shù)據(jù)文件,以便高效調(diào)試接口,在 Spring Boot 項(xiàng)目中,通常會(huì)將靜態(tài)資源或配置文件放在 src/main/resources 目錄下,下面通過實(shí)例給大家詳細(xì)介紹,感興趣的朋友一起看看吧
    2024-12-12
  • spring如何使用命名空間p簡(jiǎn)化bean的配置

    spring如何使用命名空間p簡(jiǎn)化bean的配置

    這篇文章主要介紹了spring如何使用命名空間p簡(jiǎn)化bean的配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 淺談Java中BIO、NIO和AIO的區(qū)別和應(yīng)用場(chǎng)景

    淺談Java中BIO、NIO和AIO的區(qū)別和應(yīng)用場(chǎng)景

    這篇文章主要介紹了Java中BIO、NIO和AIO的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Spring boot集成swagger2生成接口文檔的全過程

    Spring boot集成swagger2生成接口文檔的全過程

    這篇文章主要給大家介紹了關(guān)于Spring boot集成swagger2生成接口文檔的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • SpringBoot配置主從數(shù)據(jù)庫實(shí)現(xiàn)讀寫分離

    SpringBoot配置主從數(shù)據(jù)庫實(shí)現(xiàn)讀寫分離

    現(xiàn)在的 Web 應(yīng)用大都是讀多寫少,本文主要介紹了SpringBoot配置主從數(shù)據(jù)庫實(shí)現(xiàn)讀寫分離,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • spring boot使用@Async異步注解的實(shí)現(xiàn)原理+源碼

    spring boot使用@Async異步注解的實(shí)現(xiàn)原理+源碼

    通常我們都是采用多線程的方式來實(shí)現(xiàn)上述業(yè)務(wù)功能,但spring 提供更優(yōu)雅的方式來實(shí)現(xiàn)上述功能,就是@Async 異步注解,在方法上添加@Async,spring就會(huì)借助AOP,異步執(zhí)行方法,接下來通過本文給大家介紹spring boot異步注解的相關(guān)知識(shí),一起看看吧
    2021-06-06

最新評(píng)論