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

福建省建设厅网站首页房产类网站开发

福建省建设厅网站首页,房产类网站开发,深圳php网站开发,个人网页制作教程dw操作留痕功能实现与探讨 背景 接手了一个单体应用项目#xff0c;看系统介绍#xff0c;说实现了【高性能的操作日志留痕】功能#xff0c;就有点好奇它是怎么设计的#xff0c;是阻塞队列还是怎样的线程池。结果我打开代码一看#xff0c;真的是笑洗个人了。它是做了一…操作留痕功能实现与探讨 背景 接手了一个单体应用项目看系统介绍说实现了【高性能的操作日志留痕】功能就有点好奇它是怎么设计的是阻塞队列还是怎样的线程池。结果我打开代码一看真的是笑洗个人了。它是做了一个接口给前端去调用代码和多线程一分钱关系都没有直接是调用到接口拼装了一下内容就入库了。这玩意哪里高性能了url远程调用性能高同步代码高倒不是说这种方案完全不可取文末会分析一下这适用于什么场景和优化建议。 最常用操作留痕设计 基于后端去实现操作留痕都会不可避免地对原代码有侵入性但是我们要想出入侵性最低的方案——基于注解去实现。这么一来我们只需要在方法上加上一个注解和一些参数的设置就可以完成操作日留痕功能的嵌入了。 操作留痕相对于主业务来说它并不是重要的部分所以我们没必要去等待操作留痕功能入库完成后再返回数据。操作留痕对于用户来说是无感的应该用异步去实现。 编码实现 1.罗列操作留痕需要记录什么信息哪些信息是可以自动获取的哪些是要Hard Code的 package org.example.springboot.job.domain;import lombok.Data;import java.util.Date;Data public class OptLogRecord {private Long id; // 主键private String userName; // 操作人员private String userId; // 用户idprivate String optFunc; // 菜单功能模块private String menuTitle; // 具体的菜单private String optButton; // 按钮private String status; // 操作结果private Date optTime; // 操作时间private String optReturn; // 返回结果} 以上是最基本的操作留痕信息进阶考虑的话可以有请求参数、操作ip、操作地点、请求url、失败后的错误信息等。 其中功能模块、菜单、按钮 这些业务类的信息是我们程序中无法区分的。当然如果你能维护非常完美的方法名与业务信息的匹配枚举的话那么我们可以通过切点获取方法名再映射出对应的业务信息。嗯确实不错就是有点麻烦。在这里我就使用Hard Code的方式去实现了。有需要的可以自己去实现方法名与业务信息的映射关系。 2.创建注解 package org.example.springboot.job.annotation;import java.lang.annotation.*;Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface OptLog {String optFunc() default ; // 功能模块String menuTitle() default ; // 菜单标题String optButton() default ; // 按钮} 3.对使用了注解的方法进行切面织入 导入依赖 dependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.9.6/version /dependency创建切面类 Aspect Component public class OptLogAspect {}以下代码内容均为OptLogAspect中的内容为了方便步骤讲解拎出来说明 指明该切面指向的切点为OptLog Pointcut(annotation(org.example.springboot.job.annotation.OptLog))public void optLogPointCut() {}我们需要在使用注解的方法执行完成之后再记录他操作的信息 // 这个result是使用了注解的方法的返回值AfterReturning(pointcut optLogPointCut(), returning result)public void doAfterReturning(JoinPoint joinPoint, Object result) {handleOptLog(joinPoint, result, SUCCESS);}这个handleOptLog方法还没实现别急 如果出现了异常呢那肯定是操作失败了我们也要记录操作失败的信息 AfterThrowing(value optLogPointCut())public void doAfterThrowing (final JoinPoint joinPoint) {handleOptLog(joinPoint, null, FAILED);}实现handleOptLog方法 protected void handleOptLog(final JoinPoint joinPoint, Object result, String status) {MethodSignature methodSignature (MethodSignature) joinPoint.getSignature();OptLog optLog methodSignature null ? null : methodSignature.getMethod().getAnnotation(OptLog.class);if (optLog null) return;// TODO:获取当前用户 根据自己系统方式去获取用户OptLogRecord record new OptLogRecord();// TODO: 设置用户名与用户id略过record.setStatus(status); // 根据不同的切面来区分是否操作成功record.setOptReturn(result.toString());record.setOptTime(new Date());// 读取使用注解时的参数record.setOptFunc(optLog.optFunc());record.setMenuTitle(optLog.menuTitle());record.setOptButton(optLog.optButton());// 异步保存数据库TimerTask task new TimerTask() {Overridepublic void run() {// insert语句保存到数据库System.out.println(insert record.toString());}};ScheduledExecutorService executorService Executors.newSingleThreadScheduledExecutor();executorService.schedule(task, 10, TimeUnit.MILLISECONDS);}这里的异步日志是使用定时任务线程去完成延时10ms执行不影响原本的方法执行效率。 注解使用示范 GetMapping(/test)OptLog(optFunc 系统管理, menuTitle 菜单管理, optButton 添加菜单)public String testCall() throws InterruptedException {Thread.sleep(1000);log.info(hello);AtomicInteger integer new AtomicInteger();return test;}睡眠1秒模拟非常复杂的业务执行时间测试结果如下 总结 到此该操作留痕功能基本已经实现完成有些地方还需要继续优化和规范化。比如使用枚举、常量去规范一些Hard Code。 回到上面的问题这种通过调用接口去实现操作留痕的方案适用于对后端业务无法切入的情况。比如你开发的是一款具备身份权限校验等功能的快速框架别人通过调用你的jar包即可改造自己已有的系统。为了方便别人的开发不对已有代码进行过多的改造那就只能通过这种调接口的方式实现操作留痕。 前端基于axios的拦截器对发起的请求进行拦截将操作记录信息通过接口调用的方式保存。这种方案的最大缺点就是对于大多数的业务场景都需要多进行一次http请求这种性能开销不可忽视。如果说前端对操作留痕的http请求使用异步那么日志留痕的可靠性也会降低不少但随之提升的性能也会非常多。 当http请求到达后端时后端采用异步入库也可以提升不少的性能但前端就无法得知操作留痕是否完成。
http://www.dnsts.com.cn/news/272870.html

相关文章:

  • 做网站报价单可以做多边形背景的网站
  • 关于幼儿建设网站ppt模板下载如何制作个人网站主页
  • 乔柘云智能建站logo设计网站在线
  • 拨号服务器做网站nat123个人备案网站可以做淘宝客吗
  • 电子商务网站建设期末考试新野微网站开发
  • 网站维护中一般要多长时间域名空间有了怎么做网站
  • c .net怎么做网站网站开发运营费用
  • 360网站推广官网wordpress前台注册地址
  • 广东网站建设包括什么软件中国建设银行网站特色
  • 专业做网站产品上架的有吗模板做网站
  • 暂时关闭wordpress插件工具站seo
  • 网站申请免费国外网站设计参考
  • 软件公司网站建设做外贸soho 需要有网站吗
  • 开发网站公司多少钱亚马逊公司网站建设的目的
  • 如何选择网站改版公司安居客房产官方网站
  • 深圳网站(建设信科网络)网页游戏交易平台有哪些
  • 哪个做砍价活动的网站好建设外贸网站多少钱
  • dedecms 把自己的网站添加进去企业网站的特点是什么
  • 如何修改管理网站南通做百度网站的公司
  • 网站开发员纵向发展易趣网网站建设与维护
  • 做网站含营销北京微网站app
  • 网站开发软件开发培训网页设计工资统计
  • 网站建设领导小组wordpress上传顶部图像
  • 南京有关制作网站的公司深圳网站托管
  • 网站群系统建设国土分局网站建设方案
  • 做同城特价的网站有哪些属于免费的网络营销方式
  • 微信公众号里的网站怎么做的网站平台建设包括哪些
  • 潍坊网站制作发wordpress 关闭
  • 营销型品牌网站建设价格高端网站定制设计公司
  • 网站做镜像是什么门户网站建设计入什么科目