自定义spring boot starter 初尝试

从几篇博客中了解了如何自定义starter,大概分为以下几个步骤:

1 引入相关依赖;

2 生成属性配置类;

3 生成核心服务类;

4 生成自动化配置类;

5 注册配置/META-INF/spring.factories;

6 打包发布;

下面以一个简单的demo为例,一步一步说明自定义spring boot的starter的过程。

使用Slf4j的MDC实现一个工程中的链路追踪。通过设置open的属性代表是否打开链路追踪,从而为每一个请求生成一个traceId。当然理想是比较丰满的,实际操作如果要实现上述功能,要配合AOP/Filter/Interceptor这类工具,具体参考 文章。本文只是做个demo。

Demo比较简单,所以需要的依赖也不多,如下:

属性类一定要加@ConfigurationProperties注解,用于表示这个文件是一个属性类。

在注解@ConfigurationProperties后面可以添加prefix前缀,如果open属性要设置具体值,需要这样配置,lxl.mdc.open = true;

核心服务类的作用:根据properties中lxl.mdc.open的配置,控制是否生成sessionId,并将其put到MDC中。

@Configuration:标识此类为一个spring配置类

@EnableConfigurationProperties(MdcDemoProperties.class):启动配置文件,可以有多个,多个配置文件这样写:value={xxProperties1.class,xxProperteis2.class….}

@ConditionalOnClass,当 classpath下发现该类的情况下进行自动配置。

手动在resources文件下创建META-INF/spring.factories 文件,配置如下:org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.demo.spring.starter.mdc.MdcDemoServiceAutoConfiguration

多个类通过,分隔即可。

本地测试 可以通过 mvn install 打包命令打包成一个jar包,本地测试的话需要将mvn的settings文件的仓库改成本地地址,不然会出现找不到包的错误。

1 新建一个spring boot 工程

2 pom中引入mvn依赖

3 mvn依赖查看

4 配置application.properties

5 测试demo

6 测试输出

Original: https://www.cnblogs.com/xlli/p/10102518.html
Author: 梨小落是个小疯子
Title: 自定义spring boot starter 初尝试

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608880/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【解惑】领略Java内部类的“内部”

    转自:http://www.iteye.com/topic/494230 内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内…

    Java 2023年5月29日
    083
  • Spring-Cloud-Ribbon学习笔记(二):自定义负载均衡规则

    Ribbon自定义负载均衡策略有两种方式,一是JavaConfig,一是通过配置文件(yml或properties文件)。 需求 假设我有包含A和B服务在内的多个微服务,它们均注册…

    Java 2023年5月30日
    091
  • Redis LRU源码分析

    LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是”如果数据最近被访问过,那么将来被访问的几率也更高&…

    Java 2023年6月6日
    087
  • Lombok 使用攻略

    Lombok 可以通过简单的注解来帮助我们简化消除一些必须有但显得很臃肿的Java代码,通过使用对应的注解,可以在编译源码的时候生成对应的方法。 Lombok 既是一个 IDE 插…

    Java 2023年5月29日
    093
  • 200_RabbitMQ运维-持久化机制

    RibbitMQ持久化 RabbitMQ持久化消息 RabbitMQ非持久化消息 RabbitMQ持久化分类 RabbitMQ队列持久化的代码实现 测试步骤 RabbitMQ消息持…

    Java 2023年6月7日
    0110
  • JAVA第一课(Hello World)—-下载配置Java环境

    一、前期准备工作 1、下载Java(推荐下载JDK8) (1)百度搜索JDK8,找到下载地址(注册一下Oracle的账号就能直接下载) (2)配置环境 此电脑→属性 →高级系统设置…

    Java 2023年6月6日
    088
  • iphone 开发学习笔记七

    本篇算是该系列最后一篇,虽不能说是很熟,但使用MonoTouch 开发的其本方法是掌握了,主要是完成当初的任务,实现地图开发包在iPhone上的实现。使用MonoTouch ,.N…

    Java 2023年5月29日
    059
  • 踩坑了!0作为除数,不一定会抛出异常!

    你好呀,我是歪歪。 踩坑了啊,又踩坑了啊! 这次踩到一个特别无语的常识坑。知道真相的那一刻,人就是整个麻掉。 先上个代码: private static&…

    Java 2023年6月5日
    099
  • 1、SOA开始

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/weiapro/p/7801545.htmlAuthor…

    Java 2023年6月13日
    082
  • 基于多数据源零代码同时生成多个数据库CRUD增删改查RESTful API接口——MySql,PostgreSql,Oracle,Microsoft SQL Server

    多数据源 回顾 通过前面文章的介绍,目前已经支持主流数据库,包括MySql,PostgreSql,Oracle,Microsoft SQL Server等,通过配置零代码实现了CR…

    Java 2023年6月6日
    0106
  • 关于启动Docker容器的错误:OCI runtime create failed: container with id exists

    此笔记记载了本人在使用centos7.6环境下docker启动容器时遇到的 OCI runtime create failed: container with id exists:…

    Java 2023年6月15日
    0102
  • Word转换HTML(Java实用版)

    前言: 在业务中,如果需要在浏览器中预览Word文档,或者需要将Word文档转成HTML文件保存,那么本章内容,可以帮助到你。 实现这一功能,有多种实现方式,如:docx4j、po…

    Java 2023年6月8日
    069
  • Java常见集合遍历方式

    public static void main(String[] args) { ListFor(2); } public static void ListFor(int a){ …

    Java 2023年6月6日
    080
  • 集合

    集合框架图 如何重写hashCode 整理出你判断对象相等的属性,然后取一个尽可能小的正整数(尽可能小时怕最终得到的结果超出了整型int的取数范围),这里我取了17,(好像在JDK…

    Java 2023年6月13日
    082
  • 使用系统参数表,提升系统的灵活性

    1、使用系统参数表的好处 ​ Spring Boot项目中常有一些相对稳定的参数设置项,其作用范围是系统级的或模块级的,这些参数称为系统参数。这些变量以参数形式进行配置,从而提高变…

    Java 2023年6月14日
    095
  • 【前端】在浏览器控制台,直接发Ajax请求

    我们在日常的开发的过程中,经常需要前端测试发送请求测试一些数据。但是由于一些session,cookie的存在,我们无法在postman上创建一些会话。那么这样,我们就可以在浏览器…

    Java 2023年6月7日
    096
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球