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

相关推荐
闲猫4 小时前
go orm GORM
开发语言·后端·golang
丁卯4045 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
ITPUB-微风8 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
bing_1588 小时前
简单工厂模式 (Simple Factory Pattern) 在Spring Boot 中的应用
spring boot·后端·简单工厂模式
天上掉下来个程小白9 小时前
案例-14.文件上传-简介
数据库·spring boot·后端·mybatis·状态模式
Asthenia04129 小时前
基于Jackson注解的JSON工具封装与Redis集成实战
后端
编程星空10 小时前
css主题色修改后会多出一个css吗?css怎么定义变量?
开发语言·后端·rust
程序员侠客行10 小时前
Spring事务原理 二
java·后端·spring
dmy11 小时前
docker 快速构建开发环境
后端·docker·容器
sjsjsbbsbsn11 小时前
Spring Boot定时任务原理
java·spring boot·后端