• Java Web 工作技巧总结 16.8


    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!

    四时不谢之兰,百节长青之竹,万古不败之石,千秋不变之人。


    1. AOP – LOG
    项目中,一个请求过来,一个响应回去。

    1_thumb3.png

    经常我们需要记录请求过来的对应的 类,方法名,请求参数和IP等一些信息,还有响应出去的,如果是 JSON 结果集的话。比如现在一般暴露给前端(前后端分离),或者其他模块基本走 Restful 接口。那怎么优雅的去记录这些东西呢?

    beta 1.0
    1
    2
    3
    4
    5
    6
    7
    8
    @Path("user/get")
    public ListResult<User> getUser(@BeanParam GetUserParam getUserParam){
        LOGGER.info(getUserParam.toString());
        ListResult<User> userList = userService.getUserList(getUserParam);
        LOGGER.info(userList.toString());
     
        return userList;
    }
     
    同样,硬编码加入了两句打印的代码,其实这个没这么简单。可能日志需要输出到日志平台,可能获取IP或者请求来源的一些信息。那怎么升级会优雅呢?Annotation + AOP可能不错哦!
    realease 1.0
    1
    2
    3
    4
    5
    6
    7
    @Path("user/get")
    @ApiAdvice
    public ListResult<User> getUser(@BeanParam GetUserParam getUserParam){
     ListResult<User> userList = userService.getUserList(getUserParam);
     
     return userList;
    }

    ApiAvice 的实现原理是基于 Spring AOP 和 SPring 自定义注解完成。具体这篇文章写得差不多:http://www.xdemo.org/springmvc-aop-annotation/

     

    2. 出、入参封装

    上一点说到了,请求入参和响应出参。
    入参提供一个 BaseParam,包含了 IP ,请求来源机器,机型等各种。PagerParam 继承 BaseParam 类,增加了分页相关的参数。比如,用户的参数 UserGetPagerParam..
    出参提供一个 BaseResult,包含返回码,返回信息及请求 IP等。PlainResult 单个结果集,ListResult 列表结果集,MapResult… 
    同样,两者需要实现序列化。序列化的可以看看这个文章 http://www.infoq.com/cn/articles/serialization-and-deserialization
     
    3. LIMIT
    在处理线上问题的时候,有时候会有脏数据要进行处理。自然 DDL 操作,需要通过审批什么的。这里就不说了。主要在 UPDATE 操作的时候,注意 SQL 的写法。防止一条 SQL 误操作了其他正确的数据,加个 LIMIT 限制语句。例如
    1
    UPDATE user SET name = "BYSocket" WHERE name = "Jeff" LIMIT 1.

    http://database.51cto.com/art/201005/200401.htm


    4.Guava EventBus
    Guava EventBus 是基于事件处理机制,是设计模式中的生产消费模式的实现。使用的场景:多半在异步的场景上。但是基于 JVM 内存上实现的,通俗的说是单机模式。需要评估好,这个异步是否是非常快速可以处理完毕。具体使用见
    http://www.cnblogs.com/peida/p/EventBus.html

    5.GC常用分析命令
    这个总结来自有次 FullGC 特别多,OOM 的场景。然后是这样操作分析的:
    jps -lvm // 查看JVM进程中的状态,并得知 JVM 的具体配置
    jstat -gcutil {pid} 1000 // 每秒钟打印 GC 信息,可以看下 full GC,各种区的 实时信息
    jmap -F -heap {pid} // 查看内存对象信息
     
    主要是
    jmap -dump:format=b,file=dump.bin {pid} // 导出内存对象 dump 文件
    然后分析工具很多,这里用IBM HeapAnalyzer 具体使用看: http://blog.csdn.net/alexbxp/article/details/6756411
     
    JVM 相关也看看
    JVM 参数配置:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
    JVM 监控命令:https://my.oschina.net/feichexia/blog/196575
     

    如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

     

     
     
  • 相关阅读:
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) C. Constellation
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) B Guess the Permutation
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) A Slime Combining(栈)
    在服务器IIS中添加新网站后打开网站需要用户名和密码时怎么办?
    简易通讯录
    先列出所有数据库,再删除其中一个数据库。
    数据库创建mysql_query($sql,$link)
    显示所有数据库 mysql_fetch_object()
    读取数据库数据
    PHP警告错误处理办法
  • 原文地址:https://www.cnblogs.com/Alandre/p/5887310.html
Copyright © 2020-2023  润新知