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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用户自定义实现定时任务?很简单我教你实现!

發布時間:2024/1/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用户自定义实现定时任务?很简单我教你实现! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求背景:項目是公司內自己人用的項目,有一個類似于鬧鐘的提醒的功能,提醒集成的是友盟推送,定時任務進行請求推送這個提醒;實現個人自定義定時任務。

Service public class CronServiceImpl implements CronService {private Logger log = LoggerFactory.getLogger(getClass());******//ScheduledInfoMapper 是我自己的業務代碼,一定確保實體類中的id唯一 有cron表達 式 別的什么東西看你自己業務 有這兩個就可以啟動定時任務,一下所有這個mapper查出來的都此道理********** @Autowiredprivate ScheduledInfoMapper scheduledInfoMapper;@Autowiredprivate ThreadPoolTaskScheduler threadPoolTaskScheduler;private Map<String, ScheduledFuture<?>> futureMap = new HashMap<>();!!!!!!!!!!!!!!!!!!!!scheduledInfoModel = 你的需要處理的實體類或者僅僅是為了開這個定時任務的參數!!!!!!!!!!!!!!!!!!@Beanpublic ThreadPoolTaskScheduler threadPoolTaskScheduler() {return new ThreadPoolTaskScheduler();}public void startCron(String id) {log.info("定時任務 startCron 方法");//這個是校驗定時任務池子里有咩有相同id正在跑的定時任務。if (!futureMap.containsKey(id)) {//查詢我自己數據庫中需要推送的詳細信息 ScheduledInfoModel scheduledInfoModel = scheduledInfoMapper.selectById(id);if (scheduledInfoModel != null){//這一段是啟動定時任務的關鍵代碼ScheduledFuture<?> future = threadPoolTaskScheduler.schedule(new MyRunnable(scheduledInfoModel), new CronTrigger(scheduledInfoModel.getCron()));futureMap.put(scheduledInfoModel.getId(), future);//------------此處可以做自己的業務 比如更新數據庫記錄此條消息已經進行定時任務---------log.info("啟動定時任務成功,任務id:{},推送人id:{},任務提醒時刻:{}",scheduledInfoModel.getId(),scheduledInfoModel.getAuthId(),scheduledInfoModel.getContent());}else {log.warn("已經存在重復任務,任務id:{},任務標題:{},任務提醒時刻:{}",scheduledInfoModel.getId(),scheduledInfoModel.getAuthId(),scheduledInfoModel.getContent());return;}}}@Overridepublic void stopCron(String id) {log.info("定時任務 stopCron 方法");ScheduledInfoModel scheduledInfoModel = scheduledInfoMapper.selectById(id);ScheduledFuture<?> future = futureMap.get(id);if (future != null) {future.cancel(true);futureMap.remove(id);log.info("關閉定時任務成功,任務id:{},任務標題:{},任務提醒時刻:{}",scheduledInfoModel.getId(), scheduledInfoModel.getAuthId(), scheduledInfoModel.getContent());}}@Overridepublic void changeCron(String id) {log.info("定時任務 changeCron 方法");stopCron(id);// 先停止,在開啟.startCron(id);}private class MyRunnable implements Runnable {//我自己的東西private ScheduledInfoModel scheduledInfoModel;public MyRunnable(ScheduledInfoModel scheduledInfoModel) {this.scheduledInfoModel = scheduledInfoModel;}@Overridepublic void run() {//--------------------自己業務處理}}}

然后到這里就完了?不! 你是不是還在發愁cron表達式怎么生成? 不慌看下邊

ublic class TransPortUtil {public static Cron trans(傳入你的實體類){實體類中需要包含的東西必要的就是 week字段 和 時間節點week字段:比如周一,周二,周三,周四1234 這種類型的字符串就行時間節點字段 就是正常的 YYYYMMDD HHmmss 類型的我們只截HHmmss 這一段還有很多年月日各種cron生成的辦法可在csdn百度SimpleDateFormat shi = new SimpleDateFormat("HH");SimpleDateFormat fen = new SimpleDateFormat("mm");SimpleDateFormat miao = new SimpleDateFormat("ss");String hour = shi.format(time);String minutes = fen.format(time);String seconds = miao.format(time);String cron = CronUtil.getCron(week, hour, minutes, seconds);//cron生成完成//加以改造返回你的實體類return Cron;} }

到此結束,主要就是利用定時任務線程池進行線程的開啟修改和關閉
但是一定要了解到就是一個定時任務就是一個線程,java大概可以同時跑1000個線程左右,如果跑滿的話回宕機的哦。

文章持續更新,有問題可以留言。

總結

以上是生活随笔為你收集整理的用户自定义实现定时任务?很简单我教你实现!的全部內容,希望文章能夠幫你解決所遇到的問題。

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