发表于: 2020-09-02 22:30:18

1 1443


今天完成的事情:

在服务器上使用JMeter进行压力测试

下载安装就不贴上来了,直接官网下载然后解压即可,解压完记得配置一下/etc/profile 环境变量

将本地的测试接口.jmx文件上传到服务器,然后用jmeter打开:

测试的线程数为337左右开始出现错误


使用SpringAOP切面编程记录日志和接口执行时间。

昨天简单学习了一下AOP还没实践,今天来试一下:

首先导入依赖:

除了SpringIOC的依赖之外,还需要导入:

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
 <groupId>org.aspectj</groupId>
 <artifactId>aspectjweaver</artifactId>
 <version>1.9.2</version>

</dependency>

先写一个工具类Logger测试一下:

package com.jnshu.util;

public class Logger {

//在切入点之前执行
   public void printLog(){
System.out.println("Logger类中的printLog方法执行了。。。。");
   }

}

配置applicationContext.xml:

<!--spring中基于xml的AOP配置步骤
   1,把通知bean也交给spring来管理
   2,使用aop:config标签表明开始aop的配置
   3,使用aop:aspect标签表明配置切面
       id属性:给切面提供一个唯一标识
       ref属性:指定通知类的beanid
   4,在aop:aspect标签的内部使用对应标签来配置通知的类型
       先让printLog方法在切入点执行之前执行
       aop:before 表示配置前置通知
            method属性:用于指定Logger类中哪个方法是前置通知
            pointcut属性:用于指定切入点表达式,该表达式的含义指的是对业务层中哪些方法增强

       切入点表达式的写法:
       关键字:execution(表达式)
       表达式:
           访问修饰符   返回值   包名.包名.包名...类名.方法名(参数列表)
-->
<!--配置Logger类-->
<bean id="logger" "com.jnshu.util.Logger"></bean>

<!--配置AOP-->
<aop:config>
   <!--配置切面-->
   <aop:aspect id="logAdvice" ref="logger">
       <!--配置通知的类型,并且建立通知方法和切入点方法的关联-->
       <aop:before method="printLog" pointcut="execution( * com.jnshu.service.StudentServiceImpl.selectStudent())"></aop:before>
   </aop:aspect>
</aop:config>

测试:

@Test
public void findTest(){
System.out.println(studentService.selectStudent());
}

结果:

测试成功。


修改了一下Logger类中的printLog方法,将其改为环绕通知:

package com.jnshu.util;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;

public class LoggerAop {

private static final Logger logger = Logger.getLogger(LoggerAop.class);
   //在切入点之前执行
   public Object printLog(ProceedingJoinPoint pjp){
Object rtValue = null;
       try{
Object[] args = pjp.getArgs();
           logger.info("printLog执行了。。。");
           rtValue = pjp.proceed();
           logger.info("printLog执行了。。。");
           return rtValue;
       }catch (Throwable t){
logger.info("printLog执行了。。。");
           throw new RuntimeException(t);
       }finally {
logger.info("printLog执行了。。。");
       }
}

}

测试结果:


最后将其修改为最终的记录时间方法:

package com.jnshu.util;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;

public class LoggerAop {

private static final Logger logger = Logger.getLogger(LoggerAop.class);
   //在切入点之前执行
   public Object printLog(ProceedingJoinPoint pjp){
Object rtValue = null;
       try{
Object[] args = pjp.getArgs();
           Long start = System.currentTimeMillis();
           rtValue = pjp.proceed();
           Long end = System.currentTimeMillis();
           Long taketime = end - start;
           logger.info("请求耗时:" + taketime);
           return rtValue;
       }catch (Throwable t){
throw new RuntimeException(t);
       }finally {
}
}

}


测试:


测试成功!

今日问题 暂无


返回列表 返回列表
评论

    分享到