发表于: 2017-12-21 08:36:06

1 673


今日完成

1.学习shell脚本

(1)编写脚本统计ip访问数和响应时间

#统计statistics.txt里面有多少个ip访问

cat statistics.txt |awk '{print $1}'|sort |uniq > ipnum.txt

#通过shell统计每个ip访问次数

for i in `cat ipnum.txt`

do 

iptj=`cat  access.log |grep $i | grep -v 400 |wc -l`

echo "ip地址"$i"在2017-4-21日全天(24小时)累计成功请求"$iptj"次,平均每分钟请求次数为:"$(($iptj/1440)) >> result.txt

done

#统计响应时间小于600ms的访问数量

echo "小于600ms响应时间访问数量:"$a >> result.txt

echo "小于600ms响应时间访问数量:"cat ${access} | awk ' {if(s10<600) a=a+1} END{print a;}'

#统计响应时间大于800ms的访问数量

echo "大于800ms响应时间访问数量:"$b >> result.txt

echo "大于800ms响应时间访问数量:"cat ${access} | awk ' {if(s10>800) b=b+1} END{print b;}'

研究了半天还是打印不出响应时间,而且日志格式的设置也有问题。先放一放吧,纠结太长时间了。

2.学习使用AOP统计方法执行时间

(1)学习AOP原理

如前所述,切面能帮助我们模块化横切关注点。简而言之,横切关注点可以被描述为影响应用多处的功能。例如,安全就是一个横切关注
点,应用中的许多方法都会涉及到安全规则。图4.1直观呈现了横切关注点的概念。

图4.1展现了一个被划分为模块的典型应用。每个模块的核心功能都是为特定业务领域提供服务,但是这些模块都需要类似的辅助功能,例如安全和事务管理。横切关注点可以被模块化为特殊的类,这些类被称为切面(aspect)。这样做有两个好处:首先,现在每个关注点都集中于一个地方,而不是分散到多处代码中;其次,服务模块更简洁,因为它们只包含主要关注点(或核心功能)的代码,而次要关注点的代码被转移到切面中了。

(2)了解目前的需求

目前需要统计每次执行controller的时间,那么这里就需要使用切面的思想了。切面的主要增强类有

@Before 前置通知,相当于BeforeAdvice

@AfterReturning 后置通知,相当于AfterReturningAdvice

@Around 环绕通知,相当于MethodInterceptor

@AfterThrowing抛出通知,相当于ThrowAdvice

@After 最终final通知,不管是否异常,该通知都会执行

@DeclareParents 引介通知,相当于IntroductionInterceptor (不要求掌握)

这里使用@Before记录开始执行方法的时间,使用@after记录方法执行结束的时间。这样可以得到执行方法的整个时间差。

(3)切面编程步骤

使用基于注解的开发方式

①导入jar包aspectjrt-1.8.0.jar    aspectjweaver-1.8.0.jar

②需要被增强的类

使用AspectJ注解形式:

@Aspect

@componet

public class MyAspect {

@Before("execution(* cn.itcast.spring3.demo1.UserDao.add(..))")

public void before(){

    System.out.println("前置增强....");

}

}

 

第四步:创建applicationContext.xml

* 引入aop的约束:

* <aop:aspectj-autoproxy /> --- 自动生成代理:

* 底层就是AnnotationAwareAspectJAutoProxyCreator

 使用注解自动扫描

 <context:component-scan base-package="lujing"></context:component-scan>

<aop:aspectj-autoproxy />

<bean id="myAspect" class="cn.itcast.spring3.demo1.MyAspect"></bean>

(4)编写切面工具类,添加注解bean标签

(5)查看打印效果

将打印时间的等级设置成info ,然后将log4g的配置也设置成info,只打印info的通知。也可以在log输出文档里面查看相应时间的统计。

2017-12-21 14:08:49  [ http-bio-8080-exec-9:3121 ] - [ INFO ]  方法执行时间:382ms ;
2017-12-21 14:09:10  [ http-bio-8080-exec-10:23659 ] - [ INFO ]  方法执行时间:6349ms ;
2017-12-21 14:09:10  [ http-bio-8080-exec-10:23667 ] - [ INFO ]  方法执行时间:4ms ;
2017-12-21 14:10:02  [ http-bio-8080-exec-11:75282 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:10:15  [ http-bio-8080-exec-11:88610 ] - [ INFO ]  方法执行时间:2233ms ;
2017-12-21 14:10:15  [ http-bio-8080-exec-11:88616 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:14:24  [ http-bio-8080-exec-14:337466 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:14:29  [ http-bio-8080-exec-14:342671 ] - [ INFO ]  方法执行时间:11ms ;
2017-12-21 14:14:34  [ http-bio-8080-exec-14:348192 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:14:39  [ http-bio-8080-exec-14:352654 ] - [ INFO ]  方法执行时间:6ms ;
2017-12-21 14:14:45  [ http-bio-8080-exec-14:358533 ] - [ INFO ]  方法执行时间:5ms ;
2017-12-21 14:16:42  [ http-bio-8080-exec-18:476213 ] - [ INFO ]  方法执行时间:13ms ;
2017-12-21 14:16:48  [ http-bio-8080-exec-18:481473 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:16:51  [ http-bio-8080-exec-18:484591 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:17:05  [ http-bio-8080-exec-18:498622 ] - [ INFO ]  方法执行时间:8338ms ;
2017-12-21 14:17:05  [ http-bio-8080-exec-18:498628 ] - [ INFO ]  方法执行时间:4ms ;
2017-12-21 14:17:10  [ http-bio-8080-exec-18:504055 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:17:14  [ http-bio-8080-exec-18:508041 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:17:17  [ http-bio-8080-exec-18:510624 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:25:15  [ http-bio-8080-exec-14:988363 ] - [ INFO ]  方法执行时间:0ms ;
2017-12-21 14:43:27  [ http-bio-8080-exec-12:2081001 ] - [ INFO ]  方法执行时间:2821ms ;
2017-12-21 14:43:27  [ http-bio-8080-exec-12:2081025 ] - [ INFO ]  方法执行时间:4ms ;
2017-12-21 14:43:33  [ http-bio-8080-exec-12:2086854 ] - [ INFO ]  方法执行时间:86ms ;
2017-12-21 14:43:33  [ http-bio-8080-exec-12:2086867 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:43:37  [ http-bio-8080-exec-12:2090332 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:43:40  [ http-bio-8080-exec-12:2093807 ] - [ INFO ]  方法执行时间:2402ms ;
2017-12-21 14:43:40  [ http-bio-8080-exec-12:2093811 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:43:49  [ http-bio-8080-exec-12:2102614 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:43:50  [ http-bio-8080-exec-12:2103597 ] - [ INFO ]  方法执行时间:85ms ;
2017-12-21 14:43:50  [ http-bio-8080-exec-12:2103601 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:43:51  [ http-bio-8080-exec-12:2104525 ] - [ INFO ]  方法执行时间:5ms ;
2017-12-21 14:43:55  [ http-bio-8080-exec-12:2109111 ] - [ INFO ]  方法执行时间:103ms ;
2017-12-21 14:43:55  [ http-bio-8080-exec-12:2109115 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:44:00  [ http-bio-8080-exec-12:2113482 ] - [ INFO ]  方法执行时间:0ms ;
2017-12-21 14:44:29  [ http-bio-8080-exec-16:2142471 ] - [ INFO ]  方法执行时间:226ms ;
2017-12-21 14:44:29  [ http-bio-8080-exec-16:2142483 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:46:36  [ http-bio-8080-exec-18:2270127 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:46:37  [ http-bio-8080-exec-18:2271142 ] - [ INFO ]  方法执行时间:117ms ;
2017-12-21 14:46:37  [ http-bio-8080-exec-18:2271147 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:46:38  [ http-bio-8080-exec-18:2272077 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:46:39  [ http-bio-8080-exec-18:2272891 ] - [ INFO ]  方法执行时间:51ms ;
2017-12-21 14:46:39  [ http-bio-8080-exec-18:2272895 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:46:40  [ http-bio-8080-exec-18:2273531 ] - [ INFO ]  方法执行时间:4ms ;
2017-12-21 14:46:41  [ http-bio-8080-exec-18:2274326 ] - [ INFO ]  方法执行时间:88ms ;
2017-12-21 14:46:41  [ http-bio-8080-exec-18:2274330 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:46:41  [ http-bio-8080-exec-18:2275161 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:46:42  [ http-bio-8080-exec-18:2275912 ] - [ INFO ]  方法执行时间:41ms ;
2017-12-21 14:46:42  [ http-bio-8080-exec-18:2275916 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:46:43  [ http-bio-8080-exec-18:2276806 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:46:44  [ http-bio-8080-exec-18:2277661 ] - [ INFO ]  方法执行时间:38ms ;
2017-12-21 14:46:44  [ http-bio-8080-exec-18:2277666 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:46:45  [ http-bio-8080-exec-18:2279115 ] - [ INFO ]  方法执行时间:0ms ;
2017-12-21 14:47:11  [ http-bio-8080-exec-14:2305153 ] - [ INFO ]  方法执行时间:205ms ;
2017-12-21 14:47:11  [ http-bio-8080-exec-14:2305163 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:50:16  [ http-bio-8080-exec-12:2489407 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:50:19  [ http-bio-8080-exec-12:2492254 ] - [ INFO ]  方法执行时间:5ms ;
2017-12-21 14:50:20  [ http-bio-8080-exec-12:2493741 ] - [ INFO ]  方法执行时间:115ms ;
2017-12-21 14:50:20  [ http-bio-8080-exec-12:2493747 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:50:25  [ http-bio-8080-exec-12:2498473 ] - [ INFO ]  方法执行时间:1ms ;
2017-12-21 14:50:27  [ http-bio-8080-exec-12:2500251 ] - [ INFO ]  方法执行时间:36ms ;
2017-12-21 14:50:27  [ http-bio-8080-exec-12:2500254 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:50:31  [ http-bio-8080-exec-12:2504374 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:50:33  [ http-bio-8080-exec-12:2507033 ] - [ INFO ]  方法执行时间:100ms ;
2017-12-21 14:50:33  [ http-bio-8080-exec-12:2507040 ] - [ INFO ]  方法执行时间:5ms ;
2017-12-21 14:50:51  [ http-bio-8080-exec-12:2524613 ] - [ INFO ]  方法执行时间:3ms ;
2017-12-21 14:50:53  [ http-bio-8080-exec-12:2527019 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:50:56  [ http-bio-8080-exec-12:2529367 ] - [ INFO ]  方法执行时间:100ms ;
2017-12-21 14:50:56  [ http-bio-8080-exec-12:2529371 ] - [ INFO ]  方法执行时间:2ms ;
2017-12-21 14:56:03  [ http-bio-8080-exec-17:2836714 ] - [ INFO ]  方法执行时间:0ms ;

一共执行76次,超过100毫秒的10次,其余小于100毫秒。

2.实现restful接口

(1)弄清楚restful的实质。

①一个uri就是一个资源,uri就是典型的url。

②PUT,DELTE,POST,GET  四种方法都有自己独特的用处。

(2)uri中名称的实现


<!-- 浏览器不支持put,deletemethod,由该filter/xxx?_method=delete转换为标准的http delete方法 -->



遇到问题

1.之前任务2做的restful风格都有问题,今天重新梳理了一遍。

2.SMM 框架时间日期类型处理的问题。

明日计划

1.任务三总结。

2.解决任务2中时间日期类型的处理问题。

3.看一下HTTP协议,复习一下其中的知识点。

收获:

1.学习日志打印的重要性,对排错,查看项目性能等有很大的帮助。



返回列表 返回列表
评论

    分享到