从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带你实现一个业务日志组件(二)核心代码篇

相关推荐
喜欢打篮球的普通人24 分钟前
rust高级特征
开发语言·后端·rust
代码小鑫1 小时前
A032-基于Spring Boot的健康医院门诊在线挂号系统
java·开发语言·spring boot·后端·spring·毕业设计
豌豆花下猫2 小时前
REST API 已经 25 岁了:它是如何形成的,将来可能会怎样?
后端·python·ai
wclass-zhengge2 小时前
架构篇(04理解架构的演进)
架构
喔喔咿哈哈2 小时前
【手撕 Spring】 -- Bean 的创建以及获取
java·后端·spring·面试·开源·github
夏微凉.2 小时前
【JavaEE进阶】Spring AOP 原理
java·spring boot·后端·spring·java-ee·maven
彭亚川Allen2 小时前
数据冷热分离+归档-亿级表优化
后端·性能优化·架构
Goboy2 小时前
Spring Boot 和 Hadoop 3.3.6 的 MapReduce 实战:日志分析平台
java·后端·架构
不会编程的懒洋洋3 小时前
Spring Cloud Eureka 服务注册与发现
java·笔记·后端·学习·spring·spring cloud·eureka
NiNg_1_2344 小时前
SpringSecurity入门
后端·spring·springboot·springsecurity