✨这里是第七人格的博客✨小七,欢迎您的到来~✨
🍅系列专栏:【架构思想】🍅
✈️本篇内容: 从0到1带你实现一个业务日志组件(三)✈️
🍱本篇收录完整代码地址:gitee.com/diqirenge/b...
楔子
在本系列的第二章,我们完成了核心代码的编写,已经实现了功能,但是目前的代码只能在我们自己的项目中使用,不能在其他的项目中引用,这样会有一个很严重的问题,就是不能 装 *!对于这种事情我们怎么能忍呢?赶快封装成starter,让其他人都用用~开干!
starter封装
分支名称
231016-52javaee.com-BizLogSpringBootStarter
仓库地址
分支描述
抽取 日志组件 为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
仓库地址
分支描述
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,建议配合前两章食用,效果更佳哟~