SpringBoot中自定义starter
SpringBoot自动装配原理:
- @EnableAutoConfiguration注解开启自动装配功能,该注解通常放在应用的主类上。
- spring.factories文件位于META-INF目录下的配置文件中定义各个自动装配类的全限定名
当SpringBoot启动时,会加载classpath下所有的spring.factories文件,并根据定义的自动配置类全限定名,将其实例化并添加到Spring应用上下文中。
自动配置类通常会通过@Configuration注解标注(@ComponentScan/@Import等)实现各种逻辑
官方提供的starter命名:spring-boot-starter-xxx
第三方提供的starter明明:xxx-spring-boot-starter
SpringBoot常见的starter

====================================================
自定义一个redisson的starter
一、创建按一个SpringBoot项目,命名:redisson-spring-boot-starter
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.3.1.RELEASE</version><!-- 不让jar进行传递 避免jar包冲突--><optional>true</optional></dependency><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.1</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
</dependencies>
二、创建配置解析类RedissonProperties
@ConfigurationProperties(prefix = "tian.redisson")
public class RedissonProperties{private String host = "localhost";private int port = 6379;private int timeout;//get set 省略
}
三、自动装配类
@EnableConfigurationProperties(RedissonProperties.class)
@Configuration
public class RedissonAutoConfiguration{private static final String PREFIX = "redis://";@Beanpublic RedissonClient redissonClient(RedissonProperties redissonProperties){Config config = new Config();//redis单机模式config.useSingleServer().setAddress(PREFIX+redissonProperties.getHost()+":"+redissonProperties.getPort()).setConnectTimeout(redissonProperties.getTimeout());return Redisson.create(config);}
}
四、resources目录下创建META-INF,在此目录下创建spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.tian.RedissonAutoConfiguration
五、使用自定义starter
再创建一个SpringBoot项目,引入自定义starter
<dependency><groupId>com.tian</groupId><artifactId>charge-sms-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version>
</dependency>
ResissonProperties类中对host和port赋予了默认值,所以在application.properties配置文件中若不配任何参数,使用的就是默认值。
也可以配置
tian.redisson.host=localhost
tian.redisson.port=6379
tian.redisson.timeout=1000
六、实际应用
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController{@Resourceprivate RedissonClient redissonClient;@GetMapping("/redisson")public String redisson(){}
}

配置提示功能

在META-INF下面创建一个文件 additional-spring-configuration-metadata.json
文件内容如下:
{"properties": [{"name": "tian.redisson.host","type": "java.lang.String","description": "redis服务地址ip","defaultValue": "localhost"},{"name": "tian.redisson.port","type": "java.lang.Integer","description": "redis服务端口号","defaultValue": 6379},{"name": "tian.redisson.timeout","type": "java.lang.Integer","description": "redis连接超时时间","defaultValue": 1000}]
}
重新打包,在使用的项目里执行Reload All Maven,再去properties中就会有对应的提示了。
相关文章:
SpringBoot中自定义starter
SpringBoot自动装配原理: EnableAutoConfiguration注解开启自动装配功能,该注解通常放在应用的主类上。spring.factories文件位于META-INF目录下的配置文件中定义各个自动装配类的全限定名 当SpringBoot启动时,会加载classpath下所有的spri…...
git-tf clone 路径有空格处理方案
git-tf clone 路径存在空格情况下,运行命令报错; 需要对路径进行双引号处理...
IP 地址与域名是一对多的关系。一个 IP 地址可以对应多个域名,但一个域名只对应一个 IP地址。这句话如何理解?
假设你有一个大型公司,拥有许多服务器和网站。每台服务器都有自己的IP地址,就像每台手机有一个电话号码一样。然而,你可能不想让客户记住一堆复杂的数字来访问你的网站。这时候,你可以为每个网站分配一个易记的域名,比…...
DNS解析分类
DNS(域名系统)解析是将域名转换为对应的IP地址的过程。根据不同的功能和角色,DNS解析可以分为以下几种分类: 递归解析(Recursive Resolution):递归解析是指DNS客户端向本地DNS服务器(…...
部署你自己的导航站-dashy
现在每天要访问的网页都太多了,尽管chrome非常好用,有强大的标签系统。但是总觉的少了点什么。 今天我就来分享一个开源的导航网站系统 dashy。这是一个国外的大佬的开源项目 github地址如下:https://github.com/Lissy93/dashy 来简单说一下…...
运用谱分解定理反求实对称矩阵
文章目录 谱分解定理定理的运用 谱分解定理 设三阶实对称矩阵 A A A,若矩阵 A A A 的特征值为 λ 1 , λ 2 , λ 3 \lambda_1,\lambda_2,\lambda_3 λ1,λ2,λ3,对应的单位化特征向量分别为 α 1 , α 2 , α 3 \alpha_1,\alpha_2,\alpha_3 α…...
Qt——Qt工作原理:事件驱动、信号与槽机制
Qt工作原理:事件驱动、信号与槽机制 Qt作为一个现代的GUI(图形用户界面)框架,采用了事件驱动的编程范式,并引入了信号与槽机制,以实现高度交互和松耦合的程序设计。下面详细解释了相关概念,以及…...
find ./* -type d -empty -exec touch {}/.gitkeep \;
这是一个 Linux 下的 find 命令,用于在所有空目录中创建 .gitkeep 文件。让我们来分解一下这个命令做了什么:- find ./* : 在当前目录及其子目录中查找。 -type d : 只查找目录类型的文件。 -empty : 只找出那些空的目…...
计算机行业前景展望
计算机行业的前景展望是非常广阔的。随着技术的快速发展和应用领域的不断拓展,计算机行业将继续扮演着重要的角色。以下是一些计算机行业前景的关键方面: 人工智能(AI)和机器学习(ML):AI和ML技术…...
TCP/UDP原理
文章目录 一、端口1. 端口的定义和作用2.服务端和客户端的区别3.常见的知名端口号有 二、TCP的原理1.TCP头部封装格式2.TCP可靠性机制三次握手确认机制四次挥手RST结束连接窗口机制 3.完整性校验4.TCP特征5.TCP的适用场景 三、UDP的原理1.UDP头部封装格式2.UDP特征3.UDP的适用场…...
操作符算数转换题
目录 1.交换两个变量(不创建临时变量) 2.统计二进制中1的个数 3.打印整数二进制的奇数位和偶数位 4.求两个数二进制中不同位的个数 5.【一维数组】有序序列合并 6.获得月份天数 7.变种水仙花数 8.选择题总结tips 这篇博文主要分享操作符&算…...
Centos7 安装 Docker
2年前写过一篇安装Docker的文档记录,当时安装有些麻烦,现在安装docker就非常容易了,而且安装完docker,自动也安装了docker compose,不用再去执行指令单独安装docker compose了,所以现在再记录一下ÿ…...
Java虚拟机内部组成
1、栈区 public class Math {public int compute(){//一个方法对应一块栈帧内存区域int a l;int b 2;int c (a b)*10;return c; } public static void main(String[] args){Math math new, Math() ;math.compute() ;System.out.println("test");}} 栈是先进后出…...
python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录
python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录 需求复制单个文件夹遍历所有子文件夹中的文件,并复制代码封装 需求 在1文件夹中有1,2两个文件夹 将这两个文件夹中的文件复制到 after_copy中 复制单个文件夹 # coding: ut…...
[golang 流媒体在线直播系统] 1.直播的简单介绍以及借助腾讯云直播实现在线直播
一.直播的简单介绍 1.介绍 直播,应该不陌生,有电视直播、网络主播、游戏直播、体育直播、在线教育直播等等,那么要实现在线直播的话就 必须要有 “ 流媒体在线直播服务器 ”. “流媒体在线直播服务器 ”不仅可以 实现游戏、赛事、电商、媒体、教育等行业的直播, 还可以实现 …...
C# 中操作集合的方法
Add:向集合中添加元素。 List<int> numbers new List<int>(){ 1, 2, 3 }; numbers.Add(4); // numbers 现在为 { 1, 2, 3, 4 }Remove:从集合中移除指定的元素。 List<int> numbers new List<int>(){ 1, 2, 3, 4 }; numbers.Re…...
pytorch学习(8)——现有网络模型的使用以及修改
1 vgg16模型 1.1 vgg16模型的下载 采用torchvision中的vgg16模型,能够实现1000个类型的图像分类,VGG模型在AlexNet的基础上使用3*3小卷积核,增加网络深度,具有很好的泛化能力。 首先下载vgg16模型,python代码如下&…...
get和post请求的区别
GET和POST是HTTP请求的两种方法,其区别如下 ① GET请求表示从指定的服务器中获取数据(请求数据),比如查询用户信息;POST请求表示将数据提交到指定的服务器进行处理(发送数据), ② GET请求是一个幂等的请求,一般用于对服务器资源不会产生影响的场景,比如说请求一个网友的…...
extern “C”关键字的作用
目录 概述C和C在函数调用和变量命名等方面的差异示例总结 概述 extern "C"是用于在C中声明使用C语言编写的函数和变量的关键字。C和C在函数调用和变量命名等方面存在一些差异,为了在C代码中正确地使用C语言的函数和变量,需要使用extern "…...
使用ffmpeg截取视频片段
本文将介绍2中使用ffmpeg截取视频的方法 指定截取视频的 开始时间 和 结束时间,进行视频截取指定截取视频的 开始时间 和 截取的秒数,进行视频截取 两种截取方式的命令行如下 截取某一时间段视频 优先使用 ffmpeg -i ./input.mp4 -c:v libx264 -crf…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
