無聊想給博客搞一個自動發布文章功能,自動發布方式有很多種,一般采用計劃任務的比較多,一次看到MySQL的事件調度,于是想就在mysql數據庫中進行定時任務自動修改要發布的文章就可以了。僅供研究測試,實際需要根據情況考慮用于生產環境中。
什么是mysql的事件調度器,來說說。
MySQL事件調度器
修改配置Mysql配置文件,在配置文件末尾添加event_scheduler = 1,然重啟mysql
MySQL從5.1開始支持Event功能,有點類似于MsSQL的Job,可以定時自動執行數據匯總。
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval]
| EVERY interval [STARTS timestamp] [ENDS timestamp]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
其中,event_name:定時器名,最大長度64個字符,若未指定,則默認為當前的MySQL用戶名(不區分大小寫);
schedule:限定執行時間;
ON COMPLETION [NOT] PRESERVE:表示是否需要循環復用這個Event;
sql_statement:要執行的SQL語句(也可以使用存儲過程代替傳統的SQL語句);
comment:對該時間調度器的一個注釋,最大長度64個字符;
實現思路
- 在linux上開啟mysql5.7定時任務設置
- 創建發布文章存儲過程腳本
- 創建定時任務
編寫Mysql存儲腳本
CREATE DEFINER=`root`@`localhost` PROCEDURE `blog`.`p_auto_publish`()
BEGIN
update article a set a.state=1 where a.`timestamp` < current_timestamp and a.state=0;
END
博客文章,有state字段,如果為0是草稿狀態。存儲過程的意思,就是判斷當時草稿文章的發布時間小于當前時間,就更改state字段狀態為1,即發布狀態。
創建mysql定時事件任務
CREATE EVENT e_auto_publish
ON SCHEDULE EVERY 5 MINUTE
ON COMPLETION PRESERVE
DO
CALL p_auto_publish();
我這里定義的是每5分鐘執行一次發布文章的存儲過程。創建事件任務具體的語法具體參照上面的說明。好了,就這么多啦,大家可以自行研究,主要是一種嘗試。 覺得 迷神筆記 不錯,記得來一波關注哦。