最近在项目中遇到了一个问题, 对于新建的活动, 活动设置了开始时间和结束时间, 也就是数据库中的一个状态码的改变而已. 但是,这里就有问题了, 如何去实现到时间更改活动状态呢?

1. 刚开始的时候,我想了下定时任务, 但是怎么也想不出配置的时间问题,  对于活动来说, 配置的定时任务肯定是有延迟的, 这就导致了时间到了,但是活动还未开始或者结束. 
2. 后来在万般苦思之后,相处了一个笨方法,就是在外部调用的每个接口前面加上了一个方法来处理活动的开始和结束,这样的话接口查询到的就是正常的开始或者结束的数据,但是页面上显示的活动还是有延时.本来已近结束,但是页面显示进行中.这样也会出现问题,即可能会被投诉虚假活动.

3.终于在被主管骂了一顿之后,才得知,在juc包中还有定时器这么个方法, 即创建一个定时的线程,利用ScheduledExecutorService 去定时执行,这样就会在指定时间更改活动状态,这样任务就算圆满完成,下面附上部分代码,以作备忘

//执行定时对象池
private ScheduledExecutorService scheduleExecutor = Executors.newScheduledThreadPool(2); //所有的定时任务
@SuppressWarnings("rawtypes")
private Map<String, List<Future>> currentJob = new HashMap<>(); /**
* 添加启动定时任务
* @param id
* @param millSecond
* @param clearFlag
* @return
*/
@SuppressWarnings("rawtypes")
public synchronized Future addStartJob(String id, Long millSecond, boolean clearFlag) {
if (clearFlag) {
//清除任务
clearJobsById(id);
}
if (null == currentJob.get(id)) {
currentJob.put(id, new ArrayList<>());
} ScheduledFuture<?> scheduledFuture = scheduleExecutor.schedule(new Runnable() {
@Override
public void run() {
logger.debug("/r/n 活动定时生效 活动ID: " + id + "时间: " + millSecond);
try {
startTask(id);
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage(), e.fillInStackTrace());
}
}
}, millSecond, TimeUnit.MILLISECONDS);
//加入集合
currentJob.get(id).add(scheduledFuture); return null;
}
/**
* 通过id清除任务
* @param id
*/
public void clearJobsById(String id) {
if (null != currentJob.get(id)) {
for (@SuppressWarnings("rawtypes") Future future : currentJob.get(id)) {
if (null != future && !future.isDone()) {
future.cancel(false); //正在运行是否干扰
}
}
currentJob.remove(id);
}
logger.debug("/r/n 活动清除定时任务! 任务ID: " + id);
currentJob.put(id, new ArrayList<>());
} }
 

SpringBoot实现定时器定时处理任务的更多相关文章

  1. 关于springboot的定时器配置

    关于springboot的定时器: 比较重要的两个注解: @EnableScheduling:标注启动定时任务. @Scheduled(fixedRate = 1000 * 30)  定义某个定时任务 ...

  2. 实现定时器定时 1 秒钟,LED 亮灭显示

    实现定时器定时 1 秒钟,LED 亮灭显示 要求 每隔一秒钟,实现LED灯的显隐转换 实验代码 /*************************************************** ...

  3. 关于给springboot添加定时器的两种方式

    原文:https://blog.csdn.net/liboyang71/article/details/72781526 首先,搭建好一个springboot项目,可使用maven或者gradle或者 ...

  4. Stm32 定时器 定时时间设置及PWM频率 占空比的设置总结

    一.定时器的时钟: 当SYSCLK等于72M,APB1等于36M APB2等于72M时,定时器的时钟为72M.注意图中这句话:如果APB1/APB2预分频器=1则频率不变,否则频率x2.如果此时,AP ...

  5. Springboot+websocket+定时器实现消息推送

    由于最近有个需求,产品即将到期(不同时间段到期)时给后台用户按角色推送,功能完成之后在此做个小结 1. 在启动类中添加注解@EnableScheduling package com.hsfw.back ...

  6. STM32——TIM2定时器定时

    STM32 中一共有11 个定时器,其中2 个高级控制定时器,4 个普通定时器和2 个基本定时器,以及2 个看门狗定时器和1 个系统嘀嗒定时器.其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗 ...

  7. 【GMT43智能液晶模块】例程四:SYSTICK定时器——定时读取触摸值

    实验原理: 本实验采用系统定时器,通过简单的初始化定时20ms,每20ms读取一次触 摸值,并基于emWin的UI界面将读到的触摸值显示在界面上. 实验现象: 源代码下载链接: 链接:http://p ...

  8. STM32 Cubemx 配置定时器定时1mS

    最近才发现原来我把定时器里的配置参数代表的意义给搞混了,这里记录一下,防止以后自己忘记. 以建立一个定时1mS定时器为例: 1.先打开定时器 2.配置好时钟 3.配置定时器设置 重点来了,以前在这里我 ...

  9. Mysql定时器定时删除表数据

    由于测试环境有张日志表没定时2分钟程序就狂插数据,导致不到1一个月时间,这张日志表就占用了6.7G的空间,但是日志刷新较快,有些日志就没什么作用,就写了个定时器,定期删除这张表的数据 首先先查看mys ...

随机推荐

  1. php操作成功返回当前页并刷新

    echo "<script>alert('操作成功');location.href='".$_SERVER["HTTP_REFERER"].&quo ...

  2. cmake log

    20:28:54: 为项目RoboticArmProject_CarTerminal_V20190530执行步骤 ...20:28:54: 正在启动 "/usr/bin/make" ...

  3. 图解 HTTP 笔记(五)——Web 服务器

    该章的主要内容是讲解与 HTTP 协作的 Web 服务器 一.用单台虚拟主机实现多个域名 基于虚拟主机的功能,可以只使用一台物理机实现多个域名的网站部署. 在互联网上,域名通过 DNS 域名解析系统可 ...

  4. mysql主从数据一致性校验和修复

    1. 安装 yum install -y perl-IO-Socket-SSL.noarch perl-Digest-MD5 yum -y install http://www.percona.com ...

  5. CDH集群部署hive建表中文乱码

    背景:部署CDH集群的 hive 服务,选用 mysql 作为 hive 元数据的存储数据库,通过 hive cli 建表时发现中文注释均乱码. 现象:hive端建表中文注释乱码. 定位: 已经确认过 ...

  6. 生产者-消费者问题与quene模块

    生产者-消费者问题与quene模块 下面使用线程锁以及队列来模拟一个典型的案例:生产者-消费者模型.在这个场景下,商品或服务的生产者生产商品,然后将其放到类似队列的数据结构中,生产商品的时间是不确定的 ...

  7. Anaconda中安装Cascade RCNN(Detectron)的若干问题

    安装参考https://github.com/zhaoweicai/Detectron-Cascade-RCNN/blob/master/INSTALL.md 1.对于在 python detectr ...

  8. c++ hex string array 转换 串口常用

    c++ hex string array 转换 效果如下 tset string is follow 0x50 55 0x35 00 10 203040506073031323334ff format ...

  9. HDU4513 【mannacher算法】

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4513 Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在 ...

  10. 《C专家编程》读书笔记之第1~4章

    一.C:穿越时空的迷雾 1. C标准中定义了描述编译器的特点的一些术语: (1) 由编译器定义的(imprementation-defined) 由编译器设计者决定如何处理.例如:整型数右移时要不要扩 ...