日暮途远

日暮途远,涸辙难行;东隅已逝,桑榆非晚

Spring Boot 自定义Starter

学习Spring Boot过程中,我们会发现Spring Boot的pom依赖的artifactId大多都有一个共同的特点就是以“spring-boot-stater-”开头。这些starter可以看作是Spring Boot提供某一项具体服务的依赖集合,使得使用某个功能的开发者不需要关注各种依赖库的处理。

artifactId以“spring-boot-stater-”开头可以看做Spring Boot官方对这些服务名称的一种约定,可以方便开发者在pom依赖快速识别出哪一些是Spring Boot服务。

starter规范

各种Starter是Spring Boot执行自动配置(@EnableAutoConfiguration)的基础,所以每一个starter都有一些规范。如下:

1、一个或多个配置类(使用@Configuration注解修饰的类),这些自动配置用于代替spring的xml配置文件,使用@Bean注解将实现本服务必要的bean注册到Spring上下文中。

2、spring.factories文件(放在在src/main/resources目录下新建META-INF文件夹下),这个文件必不可小,是Spring Boot执行自动配置的入口,用于指定(1)中一个或多个自动配置类的位置(包名+类名),如果这个文件缺失,Spring Boot将无法对这个服务执行自动配置,也可以通提供一个类似@EnableWebMvc的注解来手动执行配置。

3、Endpoint,SpringBoot的Endpoint主要是用来监控应用服务的运行状况,并集成在Mvc中提供查看接口。例如:内置的HealthEndpoint会监控dist和db的状况,MetricsEndpoint则会监控内存和gc的状况。如果你以为服务不需要监控,Endpoint是可以不做配置的。Endpoint的加载是通过在spring.factories中配置一个特定的配置类(用于注册实现endpoints相关功能的bean)实现的。

4、health indicator,用于描述本服务的健康指标,和endpoints一样,也是通过配置类加入相关的bean。

spring-boot-starter-hsf实例分析

下面以公司内部的用于提供hsf服务的starter(spring-boot-starter-hsf)为例子,具体分析如何自定义Starter。

spring-boot-starter-hsf的主要目录结构如下,其中用红色下划线标记的为与Spring Boot Stater 上述四点配置规范相关的文件。

spring.factories

先看看spring.factories文件:

可以看到,这个文件中指定了4个配置类分别用于注册相应功能的bean。

配置类

打开其中一个配置类(HsfAutoConfiguration)看看

1、@Configuration表明这是一个spring配置类。

2、@AutoConfigureAfter(HsfProviderAutoConfiguration.class)表明这个配置类应该在HsfProviderAutoConfiguration被配置后再执行配置。

3、@EnableConfigurationProperties(HsfProperties.class)用于将前缀为”spring.hsf”的配置项的直接注入到HsfProperties.class的一个实例中(前缀可在HsfProperties.class中使用@Configuration(pre=“xxx”)配置)。

4、@Bean用于将一个endpoint注册到spring上下文中。

HealthIndicator

这个starter是直接通过@Component注解注册HealthIndicator的,具体如下:

 

点赞

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">