因項目中有會議,在插入數據時會有根據會議更改會議狀態的需求。html
解決方案:mysql
1. Java 定時任務sql
在jdk自帶的庫中,有兩種技術能夠實現定時任務。 一種是使用Timer,另一個則是ScheduledThreadPoolExecutor。數據庫
2. 數據庫存儲過程 + 定時任務.net
各自的優缺點:線程
1。Java定時任務3d
優勢:須要執行一些簡單的定時任務,無須作複雜的控制,咱們能夠考慮使用JDK中的Timer定時任務來實現。code
缺點: Timer底層是使用一個單線來實現多個Timer任務處理的,全部任務都是由同一個線程來調度,全部任務都是串行執行,意味着同一時間只能有一個任務獲得執行,而前一個任務的延遲或者異常會影響到以後的任務。htm
由於Timer中全部的任務都是在一個線程中執行,那麼若是有一個定時任務在運行時,產生未處理的異常,那麼當前這個線程就會中止,那麼全部的定時任務都會中止,受到影響。blog
2. 數據庫存儲過程 + 定時任務
優勢:代碼量少,低延遲,更新結果速度快
缺點:對不熟悉存儲過程的人編寫不友好
具體解決步驟:
1.Java 定時任務
考慮到效率問題,爲對其進行實現
2.數據庫定時任務:
一、查看定時策略是否開啓
show variables like '%event_sche%';
set global event_scheduler=1;
[mysqld] event_scheduler=ON //這一行加入mysqld標籤下
2 . sql 代碼塊
CREATE DEFINER=`root`@`%` PROCEDURE `UPDATE_STATUS`() COMMENT '根據時間更新活動狀態"' BEGIN #Routine body goes here... #狀態(0: 待審覈 ;10:審覈未經過 ;20:未開始;30:報名中;35; 報名結束; 40:會議進行中;50:已結束) update cms_activity set status = 30 where registration_startTime <= NOW() AND registration_endTime >= NOW() and status != 0 and status != 10; update cms_activity set status = 35 where registration_endTime <= NOW() AND start_time >= NOW() and status != 0 and status != 10; update cms_activity set status = 40 where start_time <= NOW() AND end_time >= NOW() and status != 0 and status != 10; update cms_activity set status = 50 where end_time <= NOW() and registration_startTime <= NOW() and status != 0 and status != 10; END
3. 定時任務
CREATE DEFINER=`root`@`localhost` EVENT `run_update_status` ON SCHEDULE EVERY 60 SECOND STARTS '2019-05-15 00:01:00' ON COMPLETION PRESERVE ENABLE DO BEGIN CALL UPDATE_STATUS(); END;
參考:https://www.jianshu.com/p/25eea3863d14