文档章节

Java Web 工作技巧总结 16.8

泥瓦匠BYSocket
 泥瓦匠BYSocket
发布于 2016/09/20 01:15
字数 878
阅读 101
收藏 3

摘要: 原创出处: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

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

© 著作权归作者所有

泥瓦匠BYSocket

泥瓦匠BYSocket

粉丝 954
博文 180
码字总数 247406
作品 4
杭州
程序员
私信 提问
【Java学习路线】新手该如何一步步的学习 Java

新手该如何一步步的学习 Java? 如果真的想学Java,最好要循序渐进,有章有法的学习它! 今天小慕就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容。 首先,给大家分享一张以 企业...

Eddie_yang
2018/11/15
2.4K
0
2013年个人计划

2013关键词: 思考,成长,责任 2013年要做的几件事情: 1. 生活与责任 1. 三十而立,在30岁前完成结婚这件大事。成家后希望自己能有足够的能力承担起一个家庭的责任。做一个有责任心的丈夫,...

长平狐
2013/06/17
147
0
[猎头招聘]【互联网JAVA teamleader】(工作地点:广州)

1)【互联网JAVA teamleader】(工作地点:广州) 职责: 1、负责团队日常技术管理以及团队长短目标的规划和方向指引; 2、负责重点项目架构、质量以及进度的把控 岗位要求: 1、本科以上学历...

DROPS
2012/05/25
574
8
5月份值得一看的 Java 技术干货!

5月又即将要离我们远去了,这个月有小长假51劳动节,有54青年节,有513母亲节,更有坑爹的520神马节?!! 废话不说,又到了总结上个月干货的时候了,这个月我们带来了各种Java技术干货,都是...

Java技术栈
2018/05/31
220
0
如果你想学习Java,那么就来看这篇文章

一、前言 我是从大二开始学习的Java,当时的目标是Java Web开发,当时并不想考研,所以当时的学习是以就业为主,现在我大三了,学习Java Web开发已经一年了,因为种种原因,决定要考研,所以...

Jivanmoon
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用原生js对表格排序

本文转载于:专业的前端网站➸用原生js对表格排序 阿里的模拟笔试题,当时时间有限没写出来,其实是因为自己对原生dom操作不熟悉,这里补一下。 题目的大意是有一个表格,如代码所示 <table>...

前端老手
16分钟前
3
0
IT兄弟连 HTML5教程 HTML5表单 HTML5新增表单元素

HTML5有一些新的表单元素:<datalist>、<keygen>、<output>。不是所有的浏览器都支持HTML5新的表单元素,但即使浏览器不支持该表单属性,仍然可以显示为常规的表单元素。 1 <datalist>元素 ...

老码农的一亩三分地
18分钟前
3
0
【朝花夕拾】Android自定义View篇之(一)View绘制流程

https://www.cnblogs.com/andy-songwei/p/10955062.html

shzwork
20分钟前
4
0
Qt编写自定义控件70-扁平化flatui

一、前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产...

飞扬青云
29分钟前
2
0
教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部