在spring中只寫6個字段,分別是秒分時日月周,中間用空格隔開,每乙個欄位也有特殊的寫法,上面已經介紹過了,這裡不再贅述
注意:
周的寫法一定注意,quartz定時框架中中1代表週日,7代表週六,這裡採用外國人的周計算方法,所以一定分清楚;但是spring中1代表周一,7代表週日,這是和中國人的一樣,不過cron表示式做法是一樣的;
看cron表示式應該從最後乙個非萬用字元字段開始看起,然後從右往左看,具有萬用字元的地方代表every每乙個都是如此,當然它是被cron表示式右邊一點的字段限制著;
如何避免定時任務阻塞
cron表示式生成器:
直接上**好說明:
/**
* 秒殺商品定時上架配置
*/@enablescheduling
// 開啟定時任務
@enableasync
// 開啟非同步任務
@configuration
public
class
scheduledconfig
finally
}/**
* 清除前一天的庫存相關資訊,包括商品、庫存,還要把使用之後的庫存更新到資料庫中
*/@scheduled
(cron =
"0 0 5 * * ?"
)public
void
cleanseckillskuinfo()
finally
}}
# 定時任務中用到的非同步任務使用到的執行緒池配置
spring:
task:
execution:
pool:
core-size:
5 max-size:
9 queue-capacity:
100000
keep-alive:
10s
這樣才能真正讓定時任務非同步執行,另外這幾個值我們可以復用,比如我們其他地方還需要使用執行緒池,那我們就可以將這幾個配置用上也是可以的
最後還要說一下裡面的分布式鎖,這是因為非同步執行的時候不能讓多個執行緒同時執行同乙個定時任務,因此我們需要分布式鎖,然後我們還要保證冪等性,不能讓商品上架之後再次上架吧,所以我們需要在所使用的方法中進行冪等性判斷,比如:
// 查詢最近1天的秒殺商品資訊集合
list
seckillvos = couponfeignservice.
getseckillgoods()
;// 將秒殺商品資訊快取到redis中
if(seckillvos != null && seckillvos.
size()
>0)
linux定時任務 at定時任務
at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...
穀粒商城 1
virtualbox vagrant 安裝好vagrant 後 初始化vagrant init centos 7匯入centos7 vagrant up連線centos vagrant ssh修改vagranfile檔案 config.vm.network private network ip 19...
穀粒商城 Gateway
1.建立專案gulimall gateway引入pom org.springframework.cloudgroupid spring cloud starter gatewayartifactid 2.2.3.releaseversion dependency com.alibaba.cloudg...