springboot自定义Starter的具体流程
作者:技术-刘腾飞 发布时间:2022-01-26 05:08:06
自定义Starter命名规则
注意artifactId的命名规则,Spring官方Starter通常命名为spring-boot-starter-{name}如 spring-boot-starter-web, Spring官方建议非官方Starter命名应遵循{name}-spring-boot-starter的格式, 如mybatis-spring-boot-starter。这里创建的项目的artifactId为helloworld-spring-boot-starter
开发Starter步骤
创建Starter项目
定义Starter需要的配置(Properties)类
编写自动配置类
编写spring.factories文件加载自动配置类
编写配置提示文件spring-configuration-metadata.json(不是必须的)
具体流程
创建配置类
@ConfigurationProperties 来定义配置的前缀
@EnableConfigurationProperties(InfluxdbProperties.class)
@ConfigurationProperties(prefix = "spring.influxdb")
public class InfluxdbProperties {
private String username;
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
}
编写自动配置类
@EnableConfigurationProperties配置依赖的属性类
@ConditionalOnProperty 配置Configuration的加载规则
value 指的是Properties的哪个字段
havingValue指的是配置value是什么值的时候加载Configuration
matchIfMissing 指的是当value配置的字段没有配置时的默认值
@Bean 配置自动注入的bean
springboot特有的常见的条件依赖注解有:
@ConditionalOnBean,仅在当前上下文中存在某个bean时,才会实例化这个Bean。
@ConditionalOnClass,某个class位于类路径上,才会实例化这个Bean。
@ConditionalOnExpression,当表达式为true的时候,才会实例化这个Bean。
@ConditionalOnMissingBean,仅在当前上下文中不存在某个bean时,才会实例化这个Bean。
@ConditionalOnMissingClass,某个class在类路径上不存在的时候,才会实例化这个Bean。
@ConditionalOnNotWebApplication,不是web应用时才会实例化这个Bean。
@AutoConfigureAfter,在某个bean完成自动配置后实例化这个bean。
@AutoConfigureBefore,在某个bean完成自动配置前实例化这个bean。
@Configuration
@Order(1)
@EnableConfigurationProperties(InfluxdbProperties.class)
@ConditionalOnClass(InfluxdbProperties.class)
@ConditionalOnProperty(prefix = "spring.influxdb", value = "use-influxdb", havingValue="true" ,matchIfMissing = false)
public class InfluxdbAutoConfiguration {
private String scanEntitySuffix = "Entity.class";
@Bean
@ConditionalOnMissingBean(AiInfluxdbTemplate.class)
@Order(Ordered.HIGHEST_PRECEDENCE)
public AiInfluxdbTemplate AiInfluxdbTemplate(InfluxdbProperties influxdbProperties){
return new AiInfluxdbTemplate(influxdbProperties);
}
}
编写spring.factories文件
Spring Boot会默认扫描跟启动类平级的包,如果我们的Starter跟启动类不在同一个主包下,需要通过配置spring.factories文件来生效
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ai.base.boot.influxdb.InfluxdbAutoConfiguration
来源:https://www.cnblogs.com/frankltf/p/11396582.html


猜你喜欢
- MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册.只需在代码中通过对类与方法的注解, 即可完成注册.
- java里有数字long来表示大的整数,如果两个数字的范围超过了long,要做加法算法怎么做呢?这个问题在面试中经常碰到,如果之前没有经历的
- // Path类 IO命名空间 静态类 不能创建对象类名.string str =@"E:\C#程序设计基础入门教程\(第十一天)
- Maven 作为一个优秀的项目管理工具,其插件机制为其功能扩展提供了非常大的便捷性。虽然说大多数情况下,我们可能不太会自己去编写 Maven
- Java super关键字super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类。super 可以用
- 一、算术运算符算术运算符的作用和在数学中的作用一样,主要的算术运算符有以下几种1、+加2、-减3、*乘4、/除5、%取余其中加、减、乘、除的
- 工作原理:Spring Cloud框架下的服务发现Eureka包含两个组件分别是: Eureka Server与Eureka ClientE
- Unity3D游戏引擎介绍Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三
- 一、使用方式可以采用Transactional,配置propagation即可。打开org.springframework.transact
- 分析:label标签控件是主线程创建的,不能直接从另一个线程访问.可以这样认为:不能跨线程直接访问控件;最简单的办法就是:using Sys
- public static void main(String[] args) { System.out
- 数据库事务是被当作单个工作单元的操作序列。这些操作要么全部完成或全部不成功。事务管理是面向企业应用程序,以确保数据的完整性和一致性RDBMS
- PullToRefresh是一套实现非常好的下拉刷新库,它支持:1.ListView2.ExpandableListView3.GridVi
- 这篇文章主要介绍了Java如何利用return结束方法调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 前言这篇文章主要是从类中static修饰的成员变量,static修饰的成员方法这两个方面来讲解static,static成员变量的初始化会在
- 本文向大家分享的主要内容是Java面试中一个常见的知识点:volatile关键字。本文详细介绍了volatile关键字的方方面面,希望大家在
- 前言在Android开发过程中,不管是写Demo还是实战项目中,都会打印一些日志用于记录数据,调试来着,Android中的日志工具类是Log
- Usage扩展函数是 kotlin 的又一杀手锏功能,能够在不修改源码的基础上,扩展某些类的能力,方便开发。例如这里演示了给 String
- 1.配置代理系统管理---configure Global Security(全局安全设置)---Tcp port for inbound
- 项目分为前台和后台,前台主要为学生角色、后台主要为管理员角色。管理员添加试题和发布试卷,学生负责在线考试、在线查看成绩和错题记录列表等。管理