日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Schedule定时关单快速入门

發布時間:2024/4/13 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Schedule定时关单快速入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先講一下Spring Schedule的一個介紹,然后是Spring Schedule的一個快速入門,這里面我們會列一個表格,然后領著大家來看一下,然后是Spring Schedule Cron的生成器,會教大家怎么來使用他

然后我們還會講一下Spring Schedule的一個配置,還有MYSQL的行鎖和表鎖,那我們現在來介紹一下Spring Schedule,一句話理解,用作作業調度,如定時任務,那JDK原生的呢,提供Timer,Task,這些類來完成定時任務,那開源框架還有Quarz,但是我們主要是使用Spring Schedule框架,那我們來看一下Spring Schedule框架的快速入門

那么Spring Schedule Cron表達式呢,其實和Quartz的表達式是一樣的,我們一起來看一下,首先第一個是秒,第二位是分,第三位是小時,第四位是日,第五位是月,第六位是周,第七位是年,年是可選的,那對于年來說,實際生產環境并不是太多,所以我們主要是把前六位弄明白,那如果前六位明白的話,那第七位的年也很輕松理解的我們接著來看,現在對第五六七位的介紹,那我們看一下,關于這些字段允許的值,和允許的特殊字符

首先秒允許的值是0到59,運行的特殊字符是逗號,橫線,星號和斜杠,那分和小時允許的特殊符號一樣的,只不過小時是從0點到23點,月內日期是1到31,然后月大家看一下,1到12,或者英文,周內日期是1到7,年一般都留空,右側的特殊符號第一次接觸的時候也不用慌,我們現在來挨個解釋一下,我們一起來看一下

首先是星號,代表匹配所有的值,那星號用處是最多的,第二個問號,只有在星期域和日期域中使用,他被用來指定非明確的值,那一會在我們實際項目中,使用的Cron表達式也會用到問號,橫線是指定一個范圍,如10-12,代表的是10點,11點,12點,前提是我們把10-12設置在小時域,逗號就是一個可選值,如星期一逗號,星期三逗號,星期五逗號,斜杠是比較重要的,這里表示指定的增量,如0/15,如果在秒域意思是,每分鐘的0秒,15秒,30秒,45秒,那5/15在分鐘域呢,所表示每小時的5分鐘,20分鐘,35分鐘和50分鐘,也就是說從第5分鐘開始,增量15,然后就是20,再增量15就是35,再增量15就是50,然后我們經常能看到的寫法,就是*/10,其實呢,*/10和0/10,是一樣的,也就是初始值都是從0開始的,那對于星號問號,斜杠,我們實際工作當中,使用的是最多的,下面說一下L,表示day-of-month,和day-of-week域,但是這兩個字段中的意思不同,例如day-of-month呢,所表示這個月的最后一天,那后邊有一些例子,L我們實際用的不是太多,有興趣的可以去查一下,然后我們繼續來看

大家看到這么多表不要慌,一會把表達式的生成器一起來理解一下,W是只允許在日期域出現的,這個字符是指定日期的,最近工作日,W相對復雜一些,可以仔細看一下,然后我們看一下LW,L和W是可以在日期中聯合使用的,LW表示這個月最后一周的工作日,井號是只允許在星期域中出現的,這個字符用于指定本月的某某天,而6#3表示本月第三周的星期五,那6就表示星期五,3表示第三周,畢竟Cron表達式是老外發明的,那星期日就作為一周的第一天,星期六作為一周的第七天,那第六天就是一周的星期五,所以4#5就代表第五周的星期三,然后C是允許在星期域和日期域中出現,我們這里面就不詳細的介紹了,一會我們可以做一個實驗

常用Cron表達式介紹,我們已經把年給省掉了,*/1和0/1是一樣的,它是在分鐘域的,后面的星是通配,最后的問號是不確定的,所以我們只看前兩個,他就代表每一分鐘,請仔細看括號里面的內容,例如我從這一分鐘第30秒啟動我們的項目,并不是說,他會在1分30秒的時候,兩分30秒的時候,3分30秒的時候,來執行,它會在啟動30秒之后,等待30秒,等待到1分鐘的整數倍的時候執行,那下面的小時也是同理,例如 0 0 */6代表每6個小時,也就是每6個小時的整數倍,來執行,那這里我拋出一個問題,每6個小時的整數倍,那么又會在哪個時間點執行呢,然后0 0 */1這個比較簡單,每一個小時的整數倍都會執行

然后說一下Spring Schedule Cron的生成器,那這個生成器我們實際工作當中呢,使用它可以提高我們的效率,我們在搜索引擎搜索cron生成器,現在我們演示生成器生成的方法,首先我們先搜索cron生成器,這里邊有很多,我們剛才說的 0 0 */6 * * ?,*/6和0/6是一樣的,我們解析,反解析到UI,這個時候要說一下,這個網站有時候有一些bug,這里變成了0-6http://cron.qqe2.com/

我們再*/6反解析到UI

所以我們在使用生成器的時候要注意,如果有bug,自己去改一下,那這里面就可以看到,最近5次的運行時間,6點,12點,18點,0點,6點,因為*/6就是0/6,0就代表從0點開始,然后沒到6小時的整數倍,開始執行,所以秒,分鐘,小時的域呢,是*/6,后面的年呢,省略沒有填的,這樣我們就很簡單的通過cron表達式,反解析出來,他最近的一個schedule運行時間是什么樣子,然后上邊我們可以看一下,這里允許的通配符,上面也是有的,然后我們可以在上面進行一個組裝,組裝也可以組成下面的表達式,根據實際的工作和業務場景呢,來這里面使用cron表達式,緊接著我們要學習Spring Schedule的一個配置,首先我們要在Spring配置文件當中,增加task,如果在IDE里邊,我們可以通過快捷鍵,來吧xml的namespace,還有schema,自動的加上,那具體加在那個位置呢,我們實戰當中也會來講的

繼續Spring Schedule的一個配置,那么我們配置完成之后,我們要寫一個Spring Schedule的類,這個類上面呢,我們要加一個注解,@Component,我們通過這個注解把這個類注冊為Spring容器當中的一員,然后繼續,那在我們要執行的方法上邊呢,就可以加@Schedule的這么一個注解,然后我們在注解里面呢,把這個表達式寫上,那這個方法我們就可以認為是一個定時任務方法了,例如我們看一下,我們在方法上增加@Scheduled(cron="0 */1 * * * ?"),這個就代表每一分鐘執行一次

既然是關閉訂單呢,我們這里就要牽扯到,MYSQL的行鎖和表鎖,我們會使用select * from .. for update,這種方式,其實for update是一種悲觀鎖,那后續演進我們也會演進成樂觀鎖的,大家可以從易到難,樂觀鎖在表中增加一個字段,然后它是一個version,version我們可以使用時間戳毫秒數,然后來進行一個判斷,再決定這個值是否要更新,是否要回滾,那么for update呢,是一個悲觀鎖,但是雖說簡單,還是有很多要注意的點,我們來看一下,首先我們要使用Innodb引擎,那在我們項目當中,都是使用的innodb引擎,然后繼續看,for update在明確主鍵的時候,會產生行鎖,如果主鍵不明確的話,會產生表鎖,也是一個ROW-Level Lock,一個Table-Level的Lock

例如我們mmall_product表,有id和name,id是產品的主鍵,name是產品的名稱,首先是明確指定主鍵,并且有結果集的,那就是行鎖select * from mmall_product where id = '66' for update;我們主要看where id,id是明確的主鍵,并且我們產品表里有這個產品,也就代表著有結果集,那么他會產生一個行鎖

明確指定主鍵,并且沒有結果集,我們查一個id是-100的,id也是主鍵,但是呢沒有結果集,不會上鎖,也就是無lock,select * from mmall_product where id = -100 for update;

無主鍵看一下select * from mmall_product where name = 'phone' for update;name并不是主鍵,所以這個SQL語句會產生鎖表,會把整個表鎖住,所以我們在使用for update悲觀鎖的時候,這里一定是要注意的,如果一個不慎就會造成線上的故障

那主鍵不明確呢select * from mmall_product where id <> 66 for update;其實就是不等于,代表主鍵不明確,不等于66的主鍵,非常多,所以這個鎖也會變成表鎖,鎖住整個表,那這個是主鍵不明確

然后再看一下,如果用id like,那主鍵也是不明確,所以還會變成表鎖select * from mmall_product where id like '66' for update;

?

總結

以上是生活随笔為你收集整理的Spring Schedule定时关单快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。