mysql 定時任務-根據會議時間更改會議狀態

因項目中有會議,在插入數據時會有根據會議更改會議狀態的需求。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%';
  • 顯示的event_scheduler爲OFF時用如下命令開啓
set global event_scheduler=1;
  • 注意:以上的改法在數據庫重啓後將會恢復爲原來狀態,要想數據庫重啓後也可讓event_scheduler開啓,則須要在配置文件my.ini的設置。修改以下,而後重啓mysql服務便可。
[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

        https://blog.csdn.net/jijianshuai/article/details/78409381

        http://www.javashuo.com/article/p-zntpcmbq-d.html

相關文章
相關標籤/搜索