Java Web 工作技巧总结 16.8

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

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

1. AOP – LOG

项目中,一个请求过来,一个响应回去。


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

beta 1.0

@Path("user/get")

publicListResult getUser(@BeanParamGetUserParam getUserParam){

LOGGER.info(getUserParam.toString());

ListResult userList = userService.getUserList(getUserParam);

LOGGER.info(userList.toString());

returnuserList;

}

同样,硬编码加入了两句打印的代码,其实这个没这么简单。可能日志需要输出到日志平台,可能获取IP或者请求来源的一些信息。那怎么升级会优雅呢?Annotation + AOP可能不错哦!

realease 1.0

@Path("user/get")

@ApiAdvice

publicListResult getUser(@BeanParamGetUserParam getUserParam){

ListResult userList = userService.getUserList(getUserParam);

returnuserList;

}

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 限制语句。例如

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,123评论 25 709
  • 作者:一字马胡 转载标志 【2017-11-12】 更新日志 日期更新内容备注 2017-11-12新建文章初版 ...
    beneke阅读 6,657评论 0 7
  • 一 、java虚拟机底层结构详解 我们知道,一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、...
    葡萄喃喃呓语阅读 5,393评论 0 4
  • 好像已经过了爱哭的年龄,但再见时还是会热泪盈眶,转身时还是会泪流满面,离开时还是会害怕很久不见。 我很害怕离别。可...
    是_不二阅读 1,688评论 0 0

友情链接更多精彩内容