無聊想給博客搞一個(gè)自動(dòng)發(fā)布文章功能,自動(dòng)發(fā)布方式有很多種,一般采用計(jì)劃任務(wù)的比較多,一次看到MySQL的事件調(diào)度,于是想就在mysql數(shù)據(jù)庫中進(jìn)行定時(shí)任務(wù)自動(dòng)修改要發(fā)布的文章就可以了。僅供研究測(cè)試,實(shí)際需要根據(jù)情況考慮用于生產(chǎn)環(huán)境中。
什么是mysql的事件調(diào)度器,來說說。
MySQL事件調(diào)度器
修改配置Mysql配置文件,在配置文件末尾添加event_scheduler = 1,然重啟mysql
MySQL從5.1開始支持Event功能,有點(diǎn)類似于MsSQL的Job,可以定時(shí)自動(dòng)執(zhí)行數(shù)據(jù)匯總。
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:定時(shí)器名,最大長度64個(gè)字符,若未指定,則默認(rèn)為當(dāng)前的MySQL用戶名(不區(qū)分大小寫);
schedule:限定執(zhí)行時(shí)間;
ON COMPLETION [NOT] PRESERVE:表示是否需要循環(huán)復(fù)用這個(gè)Event;
sql_statement:要執(zhí)行的SQL語句(也可以使用存儲(chǔ)過程代替?zhèn)鹘y(tǒng)的SQL語句);
comment:對(duì)該時(shí)間調(diào)度器的一個(gè)注釋,最大長度64個(gè)字符;
實(shí)現(xiàn)思路
- 在linux上開啟mysql5.7定時(shí)任務(wù)設(shè)置
- 創(chuàng)建發(fā)布文章存儲(chǔ)過程腳本
- 創(chuàng)建定時(shí)任務(wù)
編寫Mysql存儲(chǔ)腳本
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是草稿狀態(tài)。存儲(chǔ)過程的意思,就是判斷當(dāng)時(shí)草稿文章的發(fā)布時(shí)間小于當(dāng)前時(shí)間,就更改state字段狀態(tài)為1,即發(fā)布狀態(tài)。
創(chuàng)建mysql定時(shí)事件任務(wù)
CREATE EVENT e_auto_publish
ON SCHEDULE EVERY 5 MINUTE
ON COMPLETION PRESERVE
DO
CALL p_auto_publish();
我這里定義的是每5分鐘執(zhí)行一次發(fā)布文章的存儲(chǔ)過程。創(chuàng)建事件任務(wù)具體的語法具體參照上面的說明。好了,就這么多啦,大家可以自行研究,主要是一種嘗試。 覺得 迷神筆記 不錯(cuò),記得來一波關(guān)注哦。