Java Web 工作技巧总结 16.8
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!
四时不谢之兰,百节长青之竹,万古不败之石,千秋不变之人。
1. AOP – LOG
项目中,一个请求过来,一个响应回去。
经常我们需要记录请求过来的对应的 类,方法名,请求参数和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
如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。