发表于: 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 {
}
}
}
测试:
测试成功!
今日问题 暂无
评论