web - 在java开发时常遇到定时的业务,大家说说自己的项目中都是怎么做的呀,不用很详细
迷茫
迷茫 2017-04-17 13:30:04
0
10
546

比如要做一个5点下线的团购,但是如果不用定时器做的话,5点后没人访问,就一直是开启状态,直到第一个人去触发下架动作,这期间要写数不清的烂代码,恳请前辈点拨

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(10)
阿神

石英

Ty80

quartz到點定時觸發,
或者採用Lazy模式,等一個前端用戶觸發了這個團購,業務邏輯中檢查是否已經過期了,不好的地方在於業務耦合度高了

巴扎黑

兩個方法:
1. 用crontab指定5點開始執行下架任務。
2. 跑一個服務不斷輪詢時間,查詢時間要下架的商品,並執行下架任務。

小葫芦

必需quartz

大家讲道理

描述的業務邏輯沒有看明白,quartz是標配
如果在spring3.x的環境下,最簡單的方式:
定時任務的類別添加@Component註解,執行任務的方法加入@Scheduled(cron = "0/5 * * * ?")註解。
讓Spring掃描到該類別:spring設定檔中加<task:annotation-driven />這個配置,
其中@Scheduled註解是(org.springframework.scheduling.annotation.Scheduled)

黄舟

用quartz是最可靠的。
但就像樓主自己說的

5點後沒人訪問,就一直是開啟狀態,直到第一個人去觸發下架動作

其實這樣子做也是蠻可靠的。就是每次刷這個團購頁面都需要去判斷這個團購是否已經過期。
因為你不能完全依靠定時任務,定時任務只是在確定的時候去做一件事,但是做件事還是需要時間的。所以你最後還需要需要在團購頁面渲染的時候做校驗的

Peter_Zhu

做個job server

迷茫

Java中用quartz框架比較好,如果只是簡單的任務,直接使用jdk自帶的定時任務也可以

左手右手慢动作

org.springframework.scheduling.timer.ScheduledTimerTask

用spring配置一個任務計劃,配置要執行的class就可以了,這樣子自己只任務計劃的管邏輯內容即可。
或是需要更進階功能,可以使用Job/schedule相關的框架

但是這個功能似乎windows上是利用windows的任務計劃呼叫bat的方式比較多,bat下可以透過java指令來執行一個jar。 linux下同樣系統也提供了任務計劃,呼叫shell即可

洪涛

比較複雜的任務,例如定時定點,用Quartz,專案中用到Spring的話,Spring與Quartz可完美結合。
一般簡單的任務,每隔多久執行的,可以直接使用jdk自備的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!