mysql 定时任务-根据会议时间更改会议状态

因项目中有会议,在插入数据时会有根据会议更改会议状态的需求。

解决方案:

    1. Java 定时任务

       在jdk自带的库中,有两种技术可以实现定时任务。 一种是使用Timer,另外一个则是ScheduledThreadPoolExecutor。

    2. 数据库存储过程 + 定时任务

各自的优缺点:

    1。Java定时任务

    优点:需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现。

    缺点: Timer底层是使用一个单线来实现多个Timer任务处理的,所有任务都是由同一个线程来调度,所有任务都是串行执行,意味着同一时间只能有一个任务得到执行,而前一个任务的延迟或者异常会影响到之后的任务。

                因为Timer中所有的任务都是在一个线程中执行,那么如果有一个定时任务在运行时,产生未处理的异常,那么当前这个线程就会停止,那么所有的定时任务都会停止,受到影响。

    2.  数据库存储过程 + 定时任务

        优点:代码量少,低延迟,更新结果速度快

        缺点:对不熟悉存储过程的人编写不友好

具体解决步骤:

1.Java 定时任务

    考虑到效率问题,为对其进行实现

2.数据库定时任务:

    1、查看定时策略是否开启

  • 查看命令
show variables like '%event_sche%';
  • 显示的event_scheduler为OFF时用以下命令开启
set global event_scheduler=1;
  • 注意:以上的改法在数据库重启后将会恢复为原来状态,要想数据库重启后也可以让event_scheduler开启,则需要在配置文件my.ini的设置。修改如下,然后重启mysql服务即可。
[mysqld]
event_scheduler=ON //这一行加入mysqld标签下

2 . sql 代码块

CREATE DEFINER=`root`@`%` PROCEDURE `UPDATE_STATUS`()
    COMMENT '根据时间更新活动状态"'
BEGIN
	#Routine body goes here...
	#状态(0: 待审核 ;10:审核未通过 ;20:未开始;30:报名中;35; 报名结束; 40:会议进行中;50:已结束)

update cms_activity set status = 30 where registration_startTime <= NOW() AND registration_endTime >= NOW() and status != 0 and  status != 10;
	update cms_activity set status = 35 where registration_endTime <= NOW() AND start_time >= NOW() and status != 0 and  status != 10;
	update cms_activity set status = 40 where start_time <= NOW() AND end_time >= NOW() and status != 0 and  status != 10;
	update cms_activity set status = 50 where end_time <= NOW() and  registration_startTime <= NOW() and status != 0 and  status != 10;

END

3. 定时任务

CREATE DEFINER=`root`@`localhost` EVENT `run_update_status` ON SCHEDULE EVERY 60 SECOND STARTS '2019-05-15 00:01:00' ON COMPLETION PRESERVE ENABLE DO BEGIN
CALL UPDATE_STATUS();
END;

参考:https://www.jianshu.com/p/25eea3863d14

        https://blog.csdn.net/jijianshuai/article/details/78409381

        https://www.cnblogs.com/nxld/p/6624966.html

转载于:https://my.oschina.net/u/3562096/blog/3050434

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值