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

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

 

 
 

Java Web 工作技巧总结 16.8的更多相关文章

  1. Java Web 工作技巧总结 16.10

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 在你成为领导者以前,成功只同自己的成长有关.当你成为领导者以后,成功都同别人的成长有关. 1.聊 ...

  2. java web面试技巧,数据库面试,java web轻量级开发面试教程

    我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...

  3. java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试

    本内容摘自 java web轻量级开发面试教程 https://baike.baidu.com/item/Java%20Web%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%BC%80% ...

  4. 第一章 Java Web工作原理

    一:在本章我们将学到如下的内容 >HTTP协议原理 >服务器端Web编程原理 >Servlet与Web容器 >Java Web应用程序的组成 >Tomcat介绍 一:1. ...

  5. Java web 调试技巧之查看浏览器中调试中的network

    在java web开发过程中尤其后台开发经常需要查看浏览器调试中的network项:今天在开发在线预览系统时用到了flexpaper插件,这个插件会调用FlexPaperViewer.swf这个软件( ...

  6. Java Web工作原理(转载)

    知识要点: 1.HTTP协议 2.web服务器的缺陷及其解决方案 3.对Servlet的认识 4.Servlet的主要任务 5.web容器对Servlet的支持包括的内容 HTTP协议---(Hype ...

  7. Java Web工作原理

    解析HTTP协议 HTTP:超文本传输协议(HyperText Transfer Protocol) HTTP是一种无状态的协议,意思是指在Web浏览器和Web服务器之间不需要建立持久的连接. HTT ...

  8. Java Web学习总结(16)——JSP的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  9. 面试技巧,如何通过索引说数据库优化能力,内容来自Java web轻量级开发面试教程

    上星期写了一个篇文章,数据库方面的面试技巧,如何从建表方面展示自己能力,承蒙管理员抬举,放入首页,也承蒙各位厚爱,两天内收获了将近770个点击,也一度进入48小时热榜. 为了感谢管理员和大家的支持,再 ...

随机推荐

  1. Windows上一步一步CoreRun

    起步只有3个文件:CoreRun.exe, coreclr.dll, mscorlib.dll, HelloWorld.exe 运行命令:CoreRun HelloWorld.exe 出错: Asse ...

  2. 配置Hadoop开发环境(Eclipse)

    参考博文: http://blog.csdn.net/zythy/article/details/17397153 http://www.tuicool.com/articles/AjUZrq 注意事 ...

  3. [MSSQL2012]CUME_DIST函数

    CUME_DIST函数以某列作为基准,计算其它行相对于基准行数据的比例.差距比例,比较容易理解 先看下测试数据 DECLARE @TestData TABLE(     ID INT IDENTITY ...

  4. [Java Web整合开发王者归来·刘京华] 1、 Java Web开发

      目录: 1.Web技术简介 2.动态网站与静态网站 3.Java Web开发模式 4.JavaScript简介 1.Web技术简介 PS: 最近还有更凶残的技术,即整个操作系统都是基于Web的,如 ...

  5. HBase在单Column和多Column情况下批量Put的性能对比分析

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2013/11/28/hba ...

  6. C#与数据库访问技术总结(十一)之数据阅读器(DataReader)1

    数据阅读器 当执行返回结果集的命令时,需要一个方法从结果集中提取数据. 处理结果集的方法有两个: 第一,使用数据阅读器(DataReader): 第二,同时使用数据适配器(Data Adapter)和 ...

  7. 常用linux命令索引

    每天一个linux命令(61):wget命令 每天一个linux命令(60):scp命令 每天一个linux命令(59):rcp命令 每天一个linux命令(58):telnet命令 每天一个linu ...

  8. new一个Object对象占用多少内存?

    Java的自动内存管理机制省却了很多编码工作,大大地提高了Java的生产力,而且JVM的性能也越来越好,特别是G1的出现,改善了垃圾回收中stop the world的状况. 也许很多人都没有考虑过这 ...

  9. Autoprefixer处理CSS3属性前缀

    http://www.w3cplus.com/css3/autoprefixer-css-vender-prefixes.html

  10. 让JNLP应用程序从Firefox浏览器启动起来