提交 9de63f46 编写于 作者: lakernote's avatar lakernote

优化trace

上级 fa51b12c
package com.laker.admin.framework.aop.trace;
import java.lang.annotation.*;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LakerIgnoreTrace {
}
package com.laker.admin.framework.aop.trace;
import java.util.function.IntConsumer;
import java.util.function.Supplier;
/**
* @author laker
*/
public class TraceCodeBlock {
/**
* 有返回值
*
* @param spanName
* @param supplier
* @param <T>
* @return
*/
public static <T> T trace(String spanName, Supplier<T> supplier) {
try {
TraceContext.addSpan(spanName);
return supplier.get();
} finally {
TraceContext.stopSpan(200);
}
}
/**
* 无返回值调用
*/
public static void trace(String spanName, IntConsumer function) {
try {
TraceContext.addSpan(spanName);
function.accept(0);
} finally {
TraceContext.stopSpan(200);
}
}
}
......@@ -16,9 +16,13 @@ public class TraceContext {
public static void addSpan(ProceedingJoinPoint pjp) {
MethodSignature methodSignature = ((MethodSignature) pjp.getSignature());
String className = methodSignature.getMethod().getDeclaringClass().getName();
String methodName = methodSignature.getMethod().getName();
addSpan(className + "." + methodName);
}
public static void addSpan(String spanName) {
Trace trace = null;
if (null == traceThreadLocal.get()) {
trace = new Trace();
......@@ -26,11 +30,8 @@ public class TraceContext {
} else {
trace = traceThreadLocal.get();
}
Span span = new Span();
span.setId(className + "." + methodName);
span.setClassName(className);
span.setMethodName(methodName);
span.setId(spanName);
span.setStartTime(System.currentTimeMillis());
trace.addSpan(span);
}
......
......@@ -6,12 +6,13 @@ import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//@Component
@Component
@Slf4j
@Aspect
public class TracingAspect {
@Value("${tracing.time:200}")
@Value("${tracing.time:1}")
private long time;
/**
......@@ -44,6 +45,17 @@ public class TracingAspect {
public void withinAspect() {
}
/**
* 拦截【方法】上有@LakerIgnoreTrace的注解
* 使用场景
* - @LakerTrace注解在类上,或者包扫描到了整个类,但是其中的某个方法不想拦截
* - 在方法上注解@LakerIgnoreTrace即可
*/
@Pointcut("!@annotation(com.laker.admin.framework.aop.trace.LakerIgnoreTrace)")
public void annotationIgnoreAspect() {
}
@Pointcut("execution(* com.laker..mapper.*.*(..))")
public void mapperAspect() {
}
......@@ -57,7 +69,7 @@ public class TracingAspect {
}
//@Around("controllerAspect() || serviceAspect() || mapperAspect() || remoteAspect()")
@Around("withinAspect() || remoteAspect()")
@Around("(withinAspect() || annotationAspect()) && annotationIgnoreAspect()")
public Object around(final ProceedingJoinPoint pjp) throws Throwable {
Object obj;
TraceContext.addSpan(pjp);
......
package com.laker.admin.framework.aop.trace.codeblock;
/**
* @description: TODO Class description
* @author: lonli2
* @date: 2022/7/30
**/
public interface ICodeBlock {
<T> T get();
}
......@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.aop.metrics.Metrics;
import com.laker.admin.framework.aop.trace.LakerTrace;
import com.laker.admin.framework.aop.trace.TraceCodeBlock;
import com.laker.admin.framework.model.PageResponse;
import com.laker.admin.framework.model.Response;
import com.laker.admin.framework.utils.EasyAdminSecurityUtils;
......@@ -49,12 +51,17 @@ public class ExtLeaveController extends BaseFlowController {
@GetMapping
@ApiOperation(value = "分页查询")
@LakerTrace
public PageResponse pageAll(@RequestParam(required = false, defaultValue = "1") long page,
@RequestParam(required = false, defaultValue = "10") long limit) {
Page roadPage = new Page<>(page, limit);
LambdaQueryWrapper<ExtLeave> queryWrapper = new QueryWrapper().lambda();
queryWrapper.orderByDesc(ExtLeave::getCreateTime);
Page pageList = extLeaveService.page(roadPage, queryWrapper);
// Page pageList = extLeaveService.page(roadPage, queryWrapper);
IPage pageList = TraceCodeBlock.trace("leaveService.page",
() -> extLeaveService.page(roadPage, queryWrapper));
TraceCodeBlock.trace("xxxmodule.xxmethod", value -> System.out.println(DateUtil.now()));
List<ExtLeave> records = pageList.getRecords();
records.forEach(extLeave -> {
extLeave.setCreateUser(sysUserService.getUserAndDeptById(extLeave.getCreateBy()));
......@@ -77,7 +84,7 @@ public class ExtLeaveController extends BaseFlowController {
@RequestParam(required = false, defaultValue = "10") long limit) {
Page roadPage = new Page<>(page, limit);
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.ge("l.leave_day",1);
queryWrapper.ge("l.leave_day", 1);
queryWrapper.orderByDesc("l.create_time");
IPage pageList = extLeaveService.pageV2(roadPage, queryWrapper);
return PageResponse.ok(pageList.getRecords(), pageList.getTotal());
......
......@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laker.admin.framework.aop.trace.LakerIgnoreTrace;
import com.laker.admin.framework.aop.trace.LakerTrace;
import com.laker.admin.framework.model.PageResponse;
import com.laker.admin.framework.model.Response;
......@@ -50,6 +51,7 @@ public class ExtLogController {
@GetMapping
@ApiOperation(value = "日志分页查询")
@SaCheckPermission("log.list")
@LakerIgnoreTrace
public PageResponse pageAll(@RequestParam(required = false, defaultValue = "1") long page,
@RequestParam(required = false, defaultValue = "10") long limit,
String keyWord) {
......
package com.laker.admin.module.sys.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.laker.admin.framework.aop.trace.LakerTrace;
import com.laker.admin.framework.ext.mybatis.UserDataPower;
import com.laker.admin.module.sys.entity.SysUser;
import com.laker.admin.module.sys.mapper.SysDeptMapper;
......@@ -24,6 +25,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Autowired
SysDeptMapper deptMapper;
@LakerTrace
@Override
public SysUser getUserAndDeptById(Long userId) {
SysUser user = this.getById(userId);
......
package com.laker.admin.module.sys.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.laker.admin.framework.exception.BusinessException;
import com.laker.admin.framework.model.ResultTree;
import com.laker.admin.module.sys.entity.SysPower;
import com.laker.admin.module.sys.entity.SysRole;
import com.laker.admin.module.sys.entity.SysRolePower;
import com.laker.admin.module.sys.service.ISysMenuService;
import com.laker.admin.module.sys.service.ISysRolePowerService;
import com.laker.admin.module.sys.service.ISysRoleService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.internal.matchers.Any;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.util.List;
import static org.mockito.ArgumentMatchers.any;
/**
......@@ -40,10 +30,6 @@ public class SysRoleControllerTest {
SysRoleController SysRoleController;
@Mock
ISysRoleService sysRoleService;
@Mock
ISysMenuService sysMenuService;
@Mock
ISysRolePowerService sysRolePowerService;
@Test
public void getRolePower() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册