日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

原来记录系统日志那么简单【Java】【SpringBoot】【Mybatis Plus】【AspcetJ】

發(fā)布時(shí)間:2024/9/27 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原来记录系统日志那么简单【Java】【SpringBoot】【Mybatis Plus】【AspcetJ】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

夫陶公清風(fēng)千古,余又何人,敢稱庶幾

文章目錄

  • 前言
  • 一、系統(tǒng)日志是什么
  • 二、開(kāi)發(fā)技術(shù)
  • 三、開(kāi)發(fā)步驟
    • 3.1引入依賴坐標(biāo)
      • 3.1.1 導(dǎo)入Lombok
      • 3.1.2 數(shù)據(jù)庫(kù)連接依賴
      • 3.1.3 spring aop依賴
      • 3.1.4 aspectJ依賴
      • 3.1.5 Druid連接池(阿里巴巴)
      • 3.1.6 mybatis-plus依賴
    • 3.2配置application.yml
    • 3. 3編寫實(shí)體類
      • 3.4.1系統(tǒng)用戶實(shí)體
      • 3.4.2 日志實(shí)體
    • 3.4 編寫日志注解
    • 3.5 編寫通知類
    • 3.6 編寫mapper
      • 3.6.1 LogMapper
      • 3.6.2 UserMapper
      • 3.6.3 編寫mybaits-plus配置類
    • 3.7 編寫service層
      • 3.7.1 UserService接口
      • 3.7.2 UserService實(shí)現(xiàn)代碼
  • 四、代碼測(cè)試
    • 4.1 編寫測(cè)試類
    • 4.2 測(cè)試添加用戶
    • 4.3 測(cè)試查看所有用戶
  • 總結(jié)


前言

本文是對(duì)面向切面編程的簡(jiǎn)單應(yīng)用。下文中用到的是后置通知實(shí)現(xiàn)日志的記錄,當(dāng)該方法執(zhí)行以后,記錄相關(guān)的日志信息。AspectJ中常用的注解:
@AspectJ:定義一個(gè)切面
@Before:前置通知
@AfterReturning:后置通知
@Around:環(huán)繞通知
@AfterThrowing:異常通知
@After:最終通知

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、系統(tǒng)日志是什么

系統(tǒng)日志是記錄系統(tǒng)中硬件、軟件和系統(tǒng)問(wèn)題的信息,同時(shí)還可以監(jiān)視系統(tǒng)中發(fā)生的事件。用戶可以通過(guò)它來(lái)檢查錯(cuò)誤發(fā)生的原因,或者尋找受到攻擊時(shí)攻擊者留下的痕跡。系統(tǒng)日志包括系統(tǒng)日志、應(yīng)用程序日志和安全日志。

二、開(kāi)發(fā)技術(shù)

  • idea 2019
  • SpringBoot
  • MybatisPlus
  • Druid連接池
  • 三、開(kāi)發(fā)步驟

    3.1引入依賴坐標(biāo)

    3.1.1 導(dǎo)入Lombok

    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version><scope>provided</scope> </dependency>

    3.1.2 數(shù)據(jù)庫(kù)連接依賴

    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version> </dependency>

    3.1.3 spring aop依賴

    <dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.12.RELEASE</version> </dependency>

    3.1.4 aspectJ依賴

    <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.12.RELEASE</version> </dependency>

    3.1.5 Druid連接池(阿里巴巴)

    <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.4</version> </dependency>

    3.1.6 mybatis-plus依賴

    <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version> </dependency>

    3.2配置application.yml

    server:port: 8088 spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/aop-test?useSSL=false&useUnicode=true&characterEncoding=UTF-8username: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver

    代碼如下(示例):

    3. 3編寫實(shí)體類

    3.4.1系統(tǒng)用戶實(shí)體

    /*** <p>用戶實(shí)體</p>* @author XinLiu */ @Data @ToString @TableName(value = "sysUser") public class SysUser {/*** 主鍵*/@TableIdprivate String id;/*** 用戶名*/@TableField("name")private String name;/*** 密碼*/@TableField("password")private String password;/*** 創(chuàng)建時(shí)間*/@TableField("createDate")private Date createDate; }

    對(duì)應(yīng)的數(shù)據(jù)表:

    3.4.2 日志實(shí)體

    /*** <p>日志實(shí)體</p>* @author XinLiu */ @Data @ToString @TableName("log") public class SysLog {/*** 主鍵*/@TableIdprivate String id;/*** 訪問(wèn)的類名*/@TableField("className")private String className;/*** 執(zhí)行的操作*/@TableField("methodName")private String methodName;/*** 創(chuàng)建日志時(shí)間*/@TableField("createDate")private Date createDate;}

    對(duì)應(yīng)的數(shù)據(jù)表:

    3.4 編寫日志注解

    @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Log {/*** 執(zhí)行操作的名稱* @return 操作名*/String value() ; }

    3.5 編寫通知類

    這里其實(shí)是面向切面編程的典型應(yīng)用,此處日志的實(shí)現(xiàn)用到了后置通知,也就是當(dāng)訪問(wèn)的方法正確返回時(shí)執(zhí)行此后置通知。首先我們需要編寫一個(gè)切入點(diǎn),也就是聲明要執(zhí)行那個(gè)方法或者那些方法,前面我們自定義了一個(gè)注解:@Log,此注解有一個(gè)屬性value,它的作用是用于保存執(zhí)行指定操作的名稱;接下來(lái)我們需要編寫一個(gè)后置通知,也就是增強(qiáng)的方法,方法需要一個(gè)參數(shù)JoinPoint joinPoint,通過(guò)它可以獲得@Log注解,通過(guò)反射可以獲得注解上的值,這個(gè)值就是操作名稱,我們需要保存到日志表中;編寫好通知后,我們就可以保存我們需要保存的日志信息了,比如:訪問(wèn)者用戶名、請(qǐng)求參數(shù)、請(qǐng)求的URI、請(qǐng)求者IP地址、執(zhí)行的操作等等。

    /**<p>通知類</p>* @author XinLiu */ @SuppressWarnings("all") @Component @Aspect public class LogAdvice {@Autowiredprivate LogMapper logMapper;/*** 配置切入點(diǎn)*/@Pointcut("@annotation(com.qingfeng.aoptest.common.anno.Log)")private void serviceAspect() {}/*** 后置通知,用于記錄日志** @param joinPoint* @return* @throws Throwable*/@AfterReturning("serviceAspect()")public void doBefore(JoinPoint joinPoint) throws Throwable {MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();Method method = methodSignature.getMethod();Log log = method.getAnnotation(Log.class);SysLog sysLog = new SysLog();sysLog.setId((UUID.randomUUID().toString()).replaceAll("-", ""));sysLog.setClassName(joinPoint.getTarget().getClass().getName());sysLog.setMethodName(log.value());sysLog.setCreateDate(new Date());logMapper.insert(sysLog);} }

    3.6 編寫mapper

    3.6.1 LogMapper

    簡(jiǎn)單解釋一下,這里繼承了一個(gè)BaseMapper<SysLog>類,通過(guò)繼承該類 ,我們就可以使用mybatis plus里的方法,里面實(shí)現(xiàn)常用的操作,比如CRUD。

    public interface LogMapper extends BaseMapper<SysLog> { }

    3.6.2 UserMapper

    /*** <p>系統(tǒng)用戶數(shù)據(jù)層</p>* @author XinLiu*/ public interface UserMapper extends BaseMapper<SysUser> { }

    3.6.3 編寫mybaits-plus配置類

    這是一個(gè)配置類,@Configuration注解的作用是,將此類交給ioc容器處理;@MapperScan("com.qingfeng.aoptest.mapper")的作用是掃描該包路徑下的所有mapper接口,簡(jiǎn)化每次都要在mapper類上添加注解:@Mapper,如果配置了此類,就可以不用寫@Mapper注解了。

    @Configuration @MapperScan("com.qingfeng.aoptest.mapper") public class MybatisPlusConfig { }

    3.7 編寫service層

    3.7.1 UserService接口

    /*** @author XinLiu*/ public interface UserService extends IService<SysUser> {/*** 用戶注冊(cè)* @param sysUser 用戶實(shí)體* @return*/public boolean reg(SysUser sysUser);/*** 查詢所有的用戶* @return*/public List<SysUser> queryAllUser(); }

    3.7.2 UserService實(shí)現(xiàn)代碼

    @Service public class UserServiceImpl extends ServiceImpl<UserMapper,SysUser> implements UserService {@Autowiredprivate UserMapper userMapper;/*** 用戶注冊(cè)** @param sysUser 用戶實(shí)體* @return*/@Override@Log("用戶注冊(cè)")public boolean reg(SysUser sysUser) {return userMapper.insert(sysUser)>0;}@Override@Log("查詢所有的用戶")public List<SysUser> queryAllUser() {return userMapper.selectList(new QueryWrapper<SysUser>());} }

    四、代碼測(cè)試

    4.1 編寫測(cè)試類

    @SpringBootTest @RunWith(SpringRunner.class) class AopTestApplicationTests {@Autowiredprivate UserService userService;@Testvoid contextLoads() {}}

    4.2 測(cè)試添加用戶

    @Test public void testReg(){System.out.println(userService);SysUser sysUser = new SysUser();sysUser.setCreateDate(new Date());sysUser.setId((UUID.randomUUID().toString()).replaceAll("-",""));sysUser.setName("admin");sysUser.setPassword("123456");userService.reg(sysUser);}

    運(yùn)行結(jié)果:


    4.3 測(cè)試查看所有用戶

    @Testpublic void testFindAll(){List<SysUser> sysUsers = userService.queryAllUser();sysUsers.forEach(sysUser -> System.out.println(sysUser));}

    運(yùn)行結(jié)果:

    總結(jié)

    提示:這里對(duì)文章進(jìn)行總結(jié):
    例如:以上就是今天要講的內(nèi)容,本文僅僅簡(jiǎn)單介紹了如何通過(guò)注解的方式實(shí)現(xiàn)日志,以及AspectJ的使用, 對(duì)一個(gè)小白入門是有一些幫助的,此文也有很多東西未實(shí)現(xiàn),因?yàn)闆](méi)有寫前端,所有日志中沒(méi)有保存訪問(wèn)的用戶。

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的原来记录系统日志那么简单【Java】【SpringBoot】【Mybatis Plus】【AspcetJ】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。