定時檢查資料是否過期,如過期則更新字段

2021-10-07 10:07:37 字數 2722 閱讀 5923

專案中遇到乙個檢查資料庫資料是否過期,並且如果過期的話需要更新欄位的功能,當時想到的是資料庫的儲存過程+定時實現,後續想著很多方法如果能在後端**實現的話就不用在資料庫新增太多功能,所以嘗試搜了一下springboot這塊是否有這個功能,發現還真有,通過定時任務實現該功能,定時檢查是否過期,如果過期更新字段;如果沒有過期的則不作任何操作。在此進行簡單記錄。

1. mysql event實現:

2. springboot實現:

1.1 事件簡介

事件是mysql在相應的時刻呼叫的過程式資料庫物件。乙個事件可呼叫一次,也可週期性的啟動,由乙個特定的執行緒來管理的,即所謂的「事件排程器」。

事件和觸發器類似,都是在某些事情發生的時候啟動。當資料庫上啟動一條語句的時候,觸發器就啟動了,而事件是根據排程事件來啟動的。由於他們彼此相似,所以事件也稱為臨時性觸發器。

1.2 基本用法  參考

1.2.1 檢視是否開啟定時器

show variables like 'event_scheduler';
1.2.2 開啟mysql定時器

方法一:在my.ini中新增 event_scheduler = on,

方法二:命令列中輸入set global event_scheduler = 1; (1為on;0為off)

show variables like 'event_scheduler'檢視可以看到結果為on

1.2.3 建立事件

定義事件的執行間隔事件

sql預覽

1.2.4 開啟事件

1.2.5 關閉事件

alter event expirejudge on 

completion preserve disable;

1.3 測試

開啟事件前:

開啟事件後:(系統當前時間為16:51,所以只要開啟事件就會直接更新兩條字段)

2.1 @scheduled定義定時任務

@component

@service

public class schedulecontroller

//遍歷更新expire=1

for(user user : userlist) : 更新成功,已過期",user.getusername());

}else : 更新失敗",user.getusername());}}

}}

mybatis中進行時間大小判斷可使用cdata標籤,可解析xml解析器解析不了的文字資料

在 xml 元素中,"

cdata 部分中的所有內容都會被解析器忽略。由 "" 結束,

如果遇到特殊字元,將包含sql語句用cdata包裹住即可不被解析器解析

select *

from user

where user.expired=0

and ;

2.2 @eablescheduling開啟定時任務

@enablescheduling //定時器註解

}

2.3 加入並行執行緒機制

/**

* 定時任務的並行實現,目前為3個執行緒

*/@configuration

public class scheduledconfig implements schedulingconfigurer

@bean

public executor settaskexecutors()

}

2.4 測試(每1s執行一次)

2.4.1 未加入並行機制,序列定時結果

2.4.2 加入並行機制,並行定時結果

一般不需要也盡量別對資料庫直接加事務、觸發器、事件等操作(如果是整合的資料庫-後端都有的專案的話),有想法多蒐集資料查一查,邊查邊實踐邊學習邊總結進步~

redis定時過期,清除

我這裡用的是redistemplate控制的redis 可以發現他的put方法 除了key和value 還會放乙個引數進去,就是他的失效時間 redistemplate.opsforvalue set key,value,seconds,timeunit.seconds 只要往redis存值的時候,...

判斷session是否過期

request.getseesion boolean 這個裡面傳了乙個boolean值,這個值如果是true,那麼如果當前的request的session不可用,那麼就建立新的會話,如果存在就返回當前的會話。如果引數是false,那麼在request的當前會話不存在的時候就返回null。這樣就可以很...

判斷session是否過期

前一段時間有好幾個問題,提到怎麼判斷session是否過期。接觸jspo已經很久了,但是還真沒有想過這個問題,當時也就沒有找到乙個滿意的答案給人家。當時,我提到乙個方法,就是實現httpsessionlistener介面,然後在sessiondestroyed 方法中執行一些操作,表示session...