当前位置: 首页 > news >正文

校园门户网站建设徐州网页设计

校园门户网站建设,徐州网页设计,wordpress 获取指定分类,东莞网站建设推广哪家好前言 今天要跟大家分享的是监控数据变化#xff0c;实现自己的业务的另一个思路#xff0c;基于数据库的binglog。我这里是用的Binlog4j实现#xff0c;希望看总结的#xff0c;直接看最后。 一、Binlog4j是什么#xff1f; Binlog4j是轻量级 Mysql Binlog 客户端, 提供宕…前言 今天要跟大家分享的是监控数据变化实现自己的业务的另一个思路基于数据库的binglog。我这里是用的Binlog4j实现希望看总结的直接看最后。 一、Binlog4j是什么 Binlog4j是轻量级 Mysql Binlog 客户端, 提供宕机续读, 高可用集群等特性等等。具体看一看它的官网目前已经出到1.9.0版本项目加入了Dromara 社区。 二、使用步骤 先说下我这里用上这个的原因 多个数据增删改触发重新计算不想在每个业务操作方法后调用重新计算不想aop切面处理实现重新计算不想用springboot的事件、监听实现重新计算骨子里想创新接受新事物、新思路 所以我选择了它下面我简单介绍下使用。 官网其实有demo我这里是与springboot集成。 1.引入库 !-- binlog支持 --dependencygroupIdcom.gitee.Jmysy/groupIdartifactIdbinlog4j-spring-boot-starter/artifactIdversion1.9.0/version/dependencymysql的依赖、redis的依赖自行补充。 2.配置文件 spring: binlog4j:database: 要监听的数据库一个实例上有多个库redis-config: #redis配置host: ipport: 端口password: 密码client-configs:master:username: 数据库用户password: 密码host: 数据库ipport: 端口serverId: 1990配置说明 timeOffset 时间偏移量, 单位毫秒serverId 编号redisConfig Redis 配置信息, 详见 RedisConfiginaugural 首次启动, 如果为 true 在启动时不再读取 Redis 记录persistence 是否启用持久化, 默认为 falsestrict 严格模式, 默认为 truemode 模式, 详见: BinlogClientModeusername 数据库账户password 数据库密码host 数据库所在服务器 IP 地址port 数据库占用端口, 默认 3306hikariConfig 数据库连接池配置 3.统一监听处理 MyBinlogEventHandler import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.date.StopWatch; import cn.hutool.json.JSONUtil; import com.gitee.Jmysy.binlog4j.core.BinlogEvent; import com.gitee.Jmysy.binlog4j.core.IBinlogEventHandler; import com.gitee.Jmysy.binlog4j.springboot.starter.annotation.BinlogSubscriber; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import site.morn.rest.RestBuilders; import site.morn.rest.RestMessage;import javax.annotation.Resource;/*** binlog事件处理器* 连接数据的用户需要有binlog读权限** author zwmac*/ Slf4j BinlogSubscriber(clientName master) public class MyBinlogEventHandler implements IBinlogEventHandler {Value(${spring.binlog4j.database:linkappdb})public String monitorDatabase;Resourceprivate ProgressWarnService progressWarnService;Overridepublic void onInsert(BinlogEvent binlogEvent) {//log.info(数据库 binlogEvent.getDatabase());//log.info(数据表 binlogEvent.getTable());//log.info(插入数据 binlogEvent.getData());//需要重新计算场景//1、插入设置 app_progress_warn_config//2、新增实际进度详情 app_progress_real_detail//3、新增进度计划任务子节点app_progress_infoRestMessage restMessage RestBuilders.successMessage();CalProgressWarnVo calVo new CalProgressWarnVo();calVo.setType(1);String tableName binlogEvent.getTable();if (app_progress_warn_config.equals(tableName)) {StopWatch sw new StopWatch();sw.start();calVo.setDataType(1);ProgressWarnConfig progressWarnConfig BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getData()), ProgressWarnConfig.class, true, CopyOptions.create().ignoreNullValue());calVo.setNewData(progressWarnConfig);restMessage progressWarnService.calProgressWarn(calVo);sw.stop();log.info(新增[进度预警配置]数据触发binlog事件执行结果:{}-耗时:{}ms, restMessage.getCode(), sw.getTotalTimeMillis());}if (app_progress_real_detail.equals(tableName)) {StopWatch sw new StopWatch();sw.start();calVo.setDataType(2);ProgressRealDetail realDetail BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getData()), ProgressRealDetail.class, true, CopyOptions.create().ignoreNullValue());calVo.setNewData(realDetail);restMessage progressWarnService.calProgressWarn(calVo);sw.stop();log.info(新增[实际进度详情]数据触发binlog事件执行结果:{}-耗时{}ms, restMessage.getCode(), sw.getTotalTimeMillis());}if (app_progress_info.equals(tableName)) {StopWatch sw new StopWatch();sw.start();Object progressInfoObj binlogEvent.getData();ProgressInfo progressInfo BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getData()), ProgressInfo.class, true, CopyOptions.create().ignoreNullValue());if (progressInfo.getType() 2) {//计划任务才需要重新计算calVo.setDataType(3);calVo.setNewData(progressInfo);restMessage progressWarnService.calProgressWarn(calVo);}sw.stop();log.info(新增[进度任务]数据触发binlog事件执行结果:{}-耗时{}ms, restMessage.getCode(), sw.getTotalTimeMillis());}}Overridepublic void onUpdate(BinlogEvent binlogEvent) {//log.info(数据库 binlogEvent.getDatabase());//log.info(数据表 binlogEvent.getTable());//log.info(原数据 binlogEvent.getOriginalData());//log.info(新数据 binlogEvent.getData());//需要重新计算场景//1、设置表变更 app_progress_warn_config//2、进度详情记录变更 app_progress_real_detail//3、进度计划任务变更计划开始时间、计划结束时间、工期app_progress_infoRestMessage restMessage null;CalProgressWarnVo calVo new CalProgressWarnVo();calVo.setType(2);String tableName binlogEvent.getTable();if (app_progress_warn_config.equals(tableName)) {StopWatch sw new StopWatch();sw.start();calVo.setDataType(1);ProgressWarnConfig oldConfig BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getOriginalData()), ProgressWarnConfig.class, true, CopyOptions.create().ignoreNullValue());ProgressWarnConfig newConfig BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getData()), ProgressWarnConfig.class, true, CopyOptions.create().ignoreNullValue());calVo.setNewData(newConfig);calVo.setOldData(oldConfig);restMessage progressWarnService.calProgressWarn(calVo);sw.stop();log.info(修改[进度预警配置]数据触发binlog事件执行结果:{}-耗时{}ms, restMessage.getCode(), sw.getTotalTimeMillis());}if (app_progress_real_detail.equals(tableName)) {StopWatch sw new StopWatch();sw.start();calVo.setDataType(2);ProgressRealDetail oldDetail BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getOriginalData()), ProgressRealDetail.class, true, CopyOptions.create().ignoreNullValue());ProgressRealDetail newDetail BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getData()), ProgressRealDetail.class, true, CopyOptions.create().ignoreNullValue());calVo.setNewData(newDetail);calVo.setOldData(oldDetail);restMessage progressWarnService.calProgressWarn(calVo);sw.stop();log.info(修改[进度详情]数据触发binlog事件执行结果:{}-耗时{}ms, restMessage.getCode(), sw.getTotalTimeMillis());}if (app_progress_info.equals(tableName)) {StopWatch sw new StopWatch();sw.start();calVo.setDataType(3);ProgressInfo oldInfo BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getOriginalData()), ProgressInfo.class, true, CopyOptions.create().ignoreNullValue());ProgressInfo newInfo BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getData()), ProgressInfo.class, true, CopyOptions.create().ignoreNullValue());calVo.setNewData(newInfo);calVo.setOldData(oldInfo);restMessage progressWarnService.calProgressWarn(calVo);sw.stop();log.info(修改[进度计划任务]数据触发binlog事件执行结果:{}-耗时{}ms, restMessage.getCode(), sw.getTotalTimeMillis());}}Overridepublic void onDelete(BinlogEvent binlogEvent) {//log.info(数据库 binlogEvent.getDatabase());//log.info(数据表 binlogEvent.getTable());//log.info(删除数据 binlogEvent.getData());//需要重新计算场景//1、删除进度详情记录 app_progress_real_detail//2、删除进度任务子节点app_progress_infoRestMessage restMessage null;CalProgressWarnVo calVo new CalProgressWarnVo();calVo.setType(3);String tableName binlogEvent.getTable();if (app_progress_real_detail.equals(tableName)) {StopWatch sw new StopWatch();sw.start();calVo.setDataType(2);ProgressRealDetail oldDetail BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getOriginalData()), ProgressRealDetail.class, true, CopyOptions.create().ignoreNullValue());calVo.setOldData(oldDetail);restMessage progressWarnService.calProgressWarn(calVo);sw.stop();log.info(删除[进度详情]数据触发binlog事件执行结果:{}-耗时{}ms, restMessage.getCode(), sw.getTotalTimeMillis());}if (app_progress_info.equals(tableName)) {StopWatch sw new StopWatch();sw.start();calVo.setDataType(3);ProgressInfo oldInfo BeanUtil.mapToBean(JSONUtil.parseObj(binlogEvent.getOriginalData()), ProgressInfo.class, true, CopyOptions.create().ignoreNullValue());calVo.setOldData(oldInfo);restMessage progressWarnService.calProgressWarn(calVo);sw.stop();log.info(删除[进度计划任务]数据触发binlog事件执行结果:{}-耗时{}ms, restMessage.getCode(), sw.getTotalTimeMillis());}}Overridepublic boolean isHandle(String database, String table) {//log.info(database:{},table:{}, database, table);//只监控aep数据库if (monitorDatabase.equals(database)) {return true;}return false;}} CalProgressWarnVo import lombok.Data;/*** 计算进度预警参数Vo** author zwmac*/ Data public class CalProgressWarnVo {/*** 类型1新增2变更,3删除*/private Integer type;/*** 数据类型1进度预警配置2进度详情,3进度计划任务*/private Integer dataType;/*** 旧数据*/private Object oldData;/*** 新数据*/private Object newData;} 从入参可以看出3类数据增删改都触发重新计算这里的oldData、newData可以直接用于修改的时候传参不用在查一次数据库。 progressWarnService.calProgressWarn(calVo);就是重新计算的具体实现了这就涉及到业务了各位自己实现。 总结 配置的账号要有binlog的读权限项目在跑直接用其他工具操作数据库也可以触发这就是监听binlog的美妙其他项目操作本项目的表也可以监听到原理同上统一入口不用有aop、事件、业务调用那么多入口需要考虑        好了就写到这里希望可以帮到大家拥抱新事物uping
http://www.lakalapos1.cn/news/19469/

相关文章:

  • 怎样做阿里巴巴网站的店招东莞阳性最新消息
  • 华茂达建设集团网站看摄影作品的网站
  • 国外建筑设计网站公司做网站设计要注意
  • 电子商务网站开发课程html精美登录界面源码
  • 规则网站建设vultr 做网站空间
  • 微信网站搭建公司营销策划岗位职责
  • 网站建设与管理专业人才调研如何制作课程网站模板下载
  • 网站单页模板下载做投票网站
  • 阿里百秀网站黑马培训
  • 数字域名有哪些网站个人理财的网站开发
  • 建设五证在那个网站可以查毕业设计网站代做多少钱
  • 网站设计制作的价格低廉张家港高端网站建设
  • 建设银行网站查询不显示整存争取金额淘宝推广费用多少钱一天
  • 普通的订阅号怎么做微网站卧龙区网站建设页面
  • 给别人做ppt的网站网页制作图
  • 自贡市工程造价信息网seo是对网站进行什么优化
  • 织梦响应式茶叶网站内容营销是一种什么模式
  • 陕西省城乡和住房建设厅网站陇城科技网站建设
  • 网站建设的简历范文郑州服务设计公司网站
  • 芜湖南陵网站建设上海手机网站建设多少钱
  • 做英文网站哪里好高端品牌网页设计
  • 网站多套系统如何调用热门关键词
  • 现在有什么网站可以做兼职的网站建设侵权
  • 找源码的网站2022营业执照年审
  • 怎么做打鱼网站新的网站后台不显示网站栏目
  • 网站集约化建设的意义新乡住房与城乡建设厅网站
  • 网站开发前端和后端怎么连接wordpress缓存清除缓存
  • 惠东做网站公司软文营销网
  • 大连网站建设免费山东济南软件公司排名
  • 网站仿制公司网站建设从入门到精通