日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

aop记录日志操作

發布時間:2025/3/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 aop记录日志操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在對應方法上添加注解:

@OperationLog(operationType= OperationType.INSERT,operationBu="隱患",operationContent="新增隱患")

日志參數默認值設置:

public enum OperationType {UNKNOWN("unknown"),DELETE("delete"),SELECT("select"),UPDATE("update"),INSERT("insert");private String value;public String getValue() {return value;}public void setValue(String value) {this.value = value;}OperationType(String s) {this.value = s;} } @Documented @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface OperationLog {//操作內容String operationContent() default "";//操作類型OperationType operationType() default OperationType.UNKNOWN;//操作業務模塊String operationBu() default "";}

記錄日志

import com.alibaba.fastjson.JSON; import com.zhjt.annotation.OperationLog; import com.zhjt.security.UserUtil; import lombok.Getter; import lombok.Setter; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.UUID;/*** @ClassName OpLog* @Description 日志切面類* @Author wang* @Date 2019/10/29 16:07**/ @Component @Aspect public class OpLog {@Getter@Setter@Value("${spring.datasource.url}")private String url;@Getter@Setter@Value("${spring.datasource.username}")private String user;@Getter@Setter@Value("${spring.datasource.password}")private String password;public OpLog(){System.out.println("-----日志初始化");}@Pointcut("@annotation(com.zhjt.annotation.OperationLog)")private void log() {}@Around("log()")public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {PreparedStatement pst = null;Connection conn = null;Object res = null;System.out.print("進入日志記錄頁面");MethodSignature signature = (MethodSignature)joinPoint.getSignature();try {res = joinPoint.proceed();return res;} finally {try {//獲取到攔截的接口的方法名 // String methodName = joinPoint.getSignature().getName();//被攔截的方法的參數名稱數組 // String[] parameterNames = signature.getParameterNames();//被攔截的方法的參數值對象數組,這里我們將傳入的參數轉為json字符串格式便于存入數據庫//1.加載驅動程序Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//2.獲得數據庫鏈接conn= DriverManager.getConnection(url, user, password);//方法執行完成后增加日志OperationLog annotation = signature.getMethod().getAnnotation(OperationLog.class);String content = annotation.operationContent();String type = annotation.operationType().getValue();String bu = annotation.operationBu();String uid = UserUtil.getCurrUserId();String id = UUID.randomUUID().toString();Object[] objects = joinPoint.getArgs();StringBuilder args = new StringBuilder("");//暫時只記錄刪除操作if("delete".equals(type)){for (int i = 0; i < objects.length; i++) {String s = JSON.toJSONString(objects[i]);if (i == objects.length - 1){args.append(s);}else {args.append(s).append(",");}}}String businessId = "";//記錄修改if("update".equals(type)) {if(bu.equals("菜單管理")) {args.append(objects[0]);}}String inSql = "insert into opreate_log (id,operate_man,operate_content,operate_type,operate_time,operate_bu,operate_opinions) values(?,?,?,?,GETDATE(),?,?)";pst = conn.prepareStatement(inSql);pst.setString(1,id);pst.setString(2,uid);pst.setString(3,content);pst.setString(4,type);pst.setString(5,bu);pst.setString(6,args.toString());pst.execute();}catch (Exception e){e.printStackTrace();}finally {pst.close();conn.close();}}} }

總結

以上是生活随笔為你收集整理的aop记录日志操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。