从0到1带你实现一个业务日志组件(三)starter封装篇

✨这里是第七人格的博客✨小七,欢迎您的到来~✨

🍅系列专栏:【架构思想】🍅

✈️本篇内容: 从0到1带你实现一个业务日志组件(三)✈️

🍱本篇收录完整代码地址:gitee.com/diqirenge/b...

楔子

在本系列的第二章,我们完成了核心代码的编写,已经实现了功能,但是目前的代码只能在我们自己的项目中使用,不能在其他的项目中引用,这样会有一个很严重的问题,就是不能 *!对于这种事情我们怎么能忍呢?赶快封装成starter,让其他人都用用~开干!

starter封装

分支名称

231016-52javaee.com-BizLogSpringBootStarter

仓库地址

gitee.com/diqirenge/b...

分支描述

抽取 日志组件 为Spring boot starter 。

代码实现

删除所有不相关代码和依赖

重构后依赖如下:

xml 复制代码
<!--依赖-->
<dependencies>
    <!--引入lombok插件-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.2</version>
    </dependency>
    <!--引入fastjson-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.74</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.1.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
        <version>2.1.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
        <version>2.1.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.1.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>2.1.5.RELEASE</version>
    </dependency>

</dependencies>

项目信息修改如下

xml 复制代码
<groupId>com.run2code</groupId>
<artifactId>biz-log-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>

修改BizLogAutoConfiguration

java 复制代码
// 某个class位于路径上,才会实例化一个Bean
@ConditionalOnClass(BizLogProperties.class)
// 表示该类能够使用BizLogProperties
@EnableConfigurationProperties({BizLogProperties.class})

添加配置项

以后业务日志组件的配置属性都可以往这下面放

java 复制代码
/**
 * 用于创建前缀为 biz.log 的配置项
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2023/10/16
 */
@ConfigurationProperties(prefix = BizLogProperties.BIZ_LOG)
@Data
public class BizLogProperties {

    public static  final String BIZ_LOG = "biz.log";
    /**
     * 是否开启操作日志,默认不开启
     */
    private boolean enable = false;

}

修改BizLogAspect

引入配置项

java 复制代码
@Resource
private BizLogProperties bizLogProperties;

在切面方法中增加

java 复制代码
// 如果配置项为false,那么就不会执行业务日志的逻辑
if (!bizLogProperties.isEnable()) {
    // 执行目标方法
    return joinPoint.proceed();
}

添加spring.factories文件

xml 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.run2code.log.config.BizLogAutoConfiguration

mvn install

小结

封装starter其实就是让Spring自动去加载我们的配置类,那怎么能够定位到我们的配置类呢?在约定的spring.factories以key-value的形式配置一下就行了。

项目测试

分支名称

231016-52javaee.com-WebDemo

仓库地址

gitee.com/diqirenge/b...

分支描述

Spring boot 项目集成 biz-log-spring-boot-starter

代码实现

引入我们刚刚install的依赖

xml 复制代码
<!--引入biz-log-starter-->
<dependency>
    <groupId>com.run2code</groupId>
    <artifactId>biz-log-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

实现ILogRecordService接口

java 复制代码
/**
 * 自定会日志记录器
 * 关注公众号【奔跑的码畜】,一起进步不迷路
 *
 * @author 第七人格
 * @date 2023/10/16
 */
@Service
@Slf4j
public class CustomLogRecordService implements ILogRecordService {
    @Override
    public void record(BizLogInfo bizLogInfo) {
        log.info("自定义日志记录服务====>{}", JSON.toJSONString(bizLogInfo));
    }
}

在application.yml中开启业务日志组件

yml 复制代码
biz:
  log:
    enable: true

启动项目

执行http-test-api.http脚本

执行Get请求,结果

bash 复制代码
自定义日志记录服务====>{"content":"[第七人格]请求get测试接口,参数内容为[测试get请求-公众号【奔跑的码畜】],请求后的内容参数为[ after result demo]","module":"测试模块","operateTime":1697447461807,"operator":"第七人格","result":"\"第七人格\"","success":true,"type":"查询"}

执行Post请求,结果

bash 复制代码
自定义日志记录服务====>{"bizNo":"业务编号","content":"用户:[第七人格-第七人格],请求post测试接口,参数内容为[业务编号]","module":"测试模块","operateTime":1697447582510,"operator":"第七人格","result":"\"这是post的返回结果:{\\\"operator\\\":\\\"第七人格\\\",\\\"param\\\":\\\"业务编号\\\"}\"","success":true,"type":"查询"}

小结

根据测试结果starter封装成功,可以愉快的装*了~

总结

通过本文,我们可以学习到怎么去写一个自己的starter,建议配合前两章食用,效果更佳哟~

附录

从0到1带你实现一个业务日志组件(一)需求分析篇

从0到1带你实现一个业务日志组件(二)核心代码篇

相关推荐
该昵称用户已存在13 小时前
从成本中心到价值引擎:MyEMS 开源系统激活企业能源数据资产
java·后端·struts
舞影天上13 小时前
Docker Desktop 卡在启动界面?可能是你的 “.wslconfig” 写错了
后端
小gaigagi14 小时前
旺店通·旗舰奇门数据集成到金蝶云星空的技术实现案例
后端
用户6073203694514 小时前
Python 入门必备-pip install 常用命令例子大全:从基础安装到国内镜像加速实战
后端
小小小前端啊14 小时前
前端网络知识指南
后端
身如柳絮随风扬14 小时前
门户服务缓存架构优化:从分级缓存到双缓存,彻底解决毛刺现象与一致性问题
spring·缓存·架构
折哥的程序人生 · 物流技术专研14 小时前
出版社物流WMS智能调度实战(三):从“卡死”到“跑稳”——WMS机器学习运维监控与自动回滚实战
运维·人工智能·机器学习·架构·人机交互