用户自定义实现定时任务?很简单我教你实现!
需求背景:项目是公司内自己人用的项目,有一个类似于闹钟的提醒的功能,提醒集成的是友盟推送,定时任务进行请求推送这个提醒;实现个人自定义定时任务。
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字段:比如周一,周二,周三,周四1,2,3,4 这种类型的字符串就行时间节点字段 就是正常的 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个线程左右,如果跑满的话回宕机的哦。
文章持续更新,有问题可以留言。
用户自定义实现定时任务?很简单我教你实现!相关推荐
- 学计算机可以玩王者吗,很简单!教你用电脑玩王者荣耀的方法
原标题:很简单!教你用电脑玩王者荣耀的方法 你是不是都是在手机上玩王者荣耀? 你知道吗,电脑上也可以玩 手机毕竟不如电脑操作更方便 教给你用电脑玩王者荣耀的技巧 不怕卡顿断网,畅玩王者荣耀 王者荣耀火 ...
- 视频分割很简单,教你方法三分钟搞定视频剪辑
很多朋友不知道怎么分割视频,今天小编就分享怎么在电脑上分割视频的方法,使用媒体梦工厂操作起来不难,新手小白也能轻松学会,一起接着往下看吧. 第一步,开始剪辑之前,小编准备了多段视频用于演示分割效果,可 ...
- p20华为云电脑白屏_教你一招让华为P20秒变电脑,真的很简单!
教你一招让华为P20秒变电脑,真的很简单! 2018年05月30日 17:45作者:鸿雁编辑:鸿雁 分享 华为P20/P20 pro发布至今已经两个多月,因为有着AI加持带来了更出色的拍照性能和更流畅 ...
- 电脑tdr太低是什么意思_电脑越来越慢怎么办?我教你一招很简单的
教你一招30秒清理你电脑所有文件!让速度快如轮转! ?? ?要轻松流畅上网你是否注意到你的电脑系统磁盘的可用空间正在一天天在减少呢?是不是像老去的猴王一样动作一天比一天迟缓呢? 没错!在windows ...
- 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 参考地址为:手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
- 微信和QQ如何互传文件?其实方法很简单,手把手教你操作
工作中经常需要互传文件,而经常使用的工具就是微信和QQ.按方便快捷来说,肯定QQ互传文件要好一些.不过在工作中,一般都是加微信好友,QQ则是比较私人的,但是QQ处理文件更加方便?那微信和QQ如何互传文 ...
- 教你双开QQ游戏,很简单
教你双开QQ游戏,很简单 首先打开QQGAME所在的目录.(用鼠标右键单击桌面上QQ游戏的快捷方式,再选择属性,然后点查找目标.就可以找到所在的目录了)然后找到common\Utility.dll这个 ...
- php怎么做驾考理论考试,怎么样才能过科目一啊,教你用技巧,考驾照很简单!...
原标题:怎么样才能过科目一啊,教你用技巧,考驾照很简单! 小伙伴们大家好,众多伙伴报考驾照的时候在问的怎么样才能过科目一啊,此时借此机会就来讲解下怎么样才能过科目一吧,那学员多看看怎么样才能过科目一讲 ...
- 64位游戏找call_网络小游戏怎么修改技能满级,满血?教大家一个很简单的修改方法!...
最近去忙着给小弟培训,都忘记上来发文章了,刚好小弟找了个小游戏练练逆向数据分析,下面就给大家讲讲他是怎么做到修改数据后,达到无限满血,全技能升级完的. 首先介绍几个概念: 网络游戏的变态功能的一般实现 ...
最新文章
- 我的Android进阶之旅------gt;Java全角半角的转换方法
- 深入Java单例模式
- c语言未声明的标识符什么意思_C语言中%d和%f是什么意思啊?
- Java Web-面试题
- JavaScript:综合案例---房贷计算器的实现
- word2016 图片去底灰_几块钱买的葫芦,三四十双手套轮换用,他个个盘出玻璃底...
- 编译错误:GL/glew.h, GL/glut.h, EGL/egl.h没有那个文件或目录
- 远程计算机怎么安装软件安装,不需要U盘,手机电脑给电视远程安装软件的两种方法...
- (王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征
- 程序员技能与成长:程序员的必备工具箱(值得收藏)
- Spark独到见解--3控制算子
- 《UniBench A Benchmark for Multi-Model Database Management Systems》阅读笔记
- appcan ajax mysql_APPCAN MAS接口之AJAX
- mysql 查询本月所有天数统计对应数据
- OLS最小二乘法回归模型
- TP-link二级路由器配置
- 今天,王坚正式把“杭州城市大脑”作为礼物献给世界...
- 计算机技术 在职,计算机技术在职研究生招生简章
- accumulate函数
- 1602 c语言驱动程序,[共享]发一个LCD1602驱动程序(四位数据线)