MySQL自定义程序(方法)

说明

多活部署springboot应用,程序内有心跳机制,使用定时任务去更新表里面的系统的存活时间。

代码(说明见注释)

DROP PROCEDURE IF EXISTS updHealth;

delimiter /endAll/
CREATE PROCEDURE updHealth ( ) BEGIN
-- 声明变量
-- 异常标识
	DECLARE flag int DEFAULT 0;
-- 临时字段,中间结果使用
	DECLARE tmpnum int DEFAULT 0;

-- 查询不正常标识
select deleted into flag  from system_health;
-- 查询心跳时间在30s之内的系统数 为0表示所有系统都不正常
select count(1) into tmpnum from system_health_heart 
Where update_time+30*1000 > REPLACE(unix_timestamp(current_timestamp(3)),'.','');
-- 所有系统都不正常,而标示正常
IF tmpnum = 0 AND flag = 0 THEN
Update system_health set deleted = 1;
END IF;
-- 有系统正常,而标示不正常
IF tmpnum > 0 AND flag = 1 THEN
Update system_health set deleted = 0,update_time=(select max(update_time) from system_health_heart);

END IF;

END 
/endAll/
	delimiter;

使用该方法

delimiter /endAll/
DROP EVENT IF EXISTS updSystemHealth;
CREATE EVENT IF NOT EXISTS updSystemHealth
-- 每5秒执行一次
  ON SCHEDULE EVERY 30 SECOND
-- 执行完成后保留(对应删除)
  ON COMPLETION PRESERVE
-- 执行完成后直接开始运行
  ENABLE 
  COMMENT '刷新系统健康运行时长'
-- 实际行为
DO 
  call updHealth();
/endAll/
delimiter;

最后

到此事件就创建成功了,但是默认状态事件是不执行的,可用sql查看
SHOW VARIABLES LIKE ‘event_scheduler’;
OFF表示关闭。
我们使用 sql去开启事件执行
SET GLOBAL event_scheduler = ON;
到此就可以定时执行执行的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值