Spring AOP 打印接口日志
type
Post
status
Published
date
Mar 3, 2021
slug
summary
之前介绍了过滤器和拦截器打印接口日志的方式,这篇记录一下 AOP 打印接口出入参日志的实现方式
tags
项目方案
category
技术分享
icon
password

AOP 使用

SpringBoot 项目中,只需要引入SpringBoot 集成的 AOP 依赖
<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-aop</artifactId> </dependency>
包含了用于解析切点表达式,实现切面类和方法匹配的 AspectJ 中的 Weaver 组件
打印接口耗时的两种方式
type
Post
status
Published
date
Mar 2, 2021
slug
summary
接口耗时是应用监控中重要的指标,可以看出应用处理能力;本文介绍拦截器和过滤器两种方式打印接口耗时统计
tags
项目方案
category
技术分享
icon
password

拦截器方式

Interceptor 拦截器,用于对 Controller 进行前置、后置处理
  • 底层基于 AOP实现,与环绕通知类似
  • 和过滤器 Filter 作用类似,但只用于 SpringMVC 中的控制器
转账案例-引入事务和AOP进行改造
type
Post
status
Published
date
Mar 1, 2021
slug
summary
一个简单的转账业务案例,从最初无事务的基础功能版本,通过代理和AOP逐步进行改造和优化
tags
category
技术分享
icon
password

基础功能


spring 整合 DBUtils ,实现简单的用户转账业务
  • Account 实体类
    自定义数据库连接池的实现
    type
    Post
    status
    Published
    date
    Feb 4, 2021
    slug
    summary
    实现简单的数据库连接池,讨论多种方式归还连接的功能
    tags
    设计模式
    category
    技术分享
    icon
    password

    背景

    数据库连接池用于分配、管理和释放(归还)数据库连接对象 Connection
    • 有了数据库连接池,可以允许应用重复使用一个现有的数据库连接
    • 从而避免了频繁创建和释放连接,消耗系统资源
    常见三大数据库连接池使用及工具类抽取
    type
    Post
    status
    Published
    date
    Feb 1, 2021
    slug
    summary
    DBCP、C3P0、Druid连接池的使用和常见配置
    tags
    项目方案
    category
    技术分享
    icon
    password

    DBCP

    DBCP 是Apache成员之一,在企业开发中也比较常见,也是tomcat内置的连接池

    DBCP 工具类

    public class DBCPUtils {    //1.定义常量 保存数据库连接的相关信息    public static final String DRIVERNAME = "com.mysql.jdbc.Driver";    public static final String URL = "jdbc:mysql://localhost:3306/db5?characterEncoding=UTF-8";    public static final String USERNAME = "root";    public static final String PASSWORD = "123456";    //2.创建连接池对象 (有DBCP提供的实现类)    public static BasicDataSource dataSource = new BasicDataSource();    //3.使用静态代码块进行配置    static{        dataSource.setDriverClassName(DRIVERNAME);        dataSource.setUrl(URL);        dataSource.setUsername(USERNAME);        dataSource.setPassword(PASSWORD);        dataSource.setMaxActive(20);   }    //4.获取连接的方法    public static Connection getConnection() throws SQLException {        //从连接池中获取连接        Connection connection = dataSource.getConnection();        return connection;   }    //5.释放资源方法    public static void close(Connection con, Statement statement){        if(con != null && statement != null){            try {                statement.close();                //归还连接                con.close();           } catch (SQLException e) {                e.printStackTrace();           }       }   }    public static void close(Connection con, Statement statement, ResultSet resultSet){        if(con != null && statement != null && resultSet != null){            try {                resultSet.close();                statement.close();                //归还连接                con.close();           } catch (SQLException e) {                e.printStackTrace();           }       }   } }
    Redis缓存设计案例
    type
    Post
    status
    Published
    date
    Jan 6, 2021
    slug
    summary
    基本的 Redis 缓存和回写操作示例
    tags
    Redis
    category
    技术分享
    icon
    password

    查询

    查询先查 Reids
    • 先从 Redis 里查询,如果有数据直接返回,没有再去查询 Mysql
    • 从 MySQL 查询到数据后,需要将数据写回 Redis 以保障下一次缓存命中