如何自定义spring boot starter

简介: 快速自定义一个 spring boot starter
  • 前言

SpringBoot提供了许多官方的定义的starter场景启动器,如果没有提供呢?我们如何自定义一个starter场景启动器呢?


[官方文章地址](https://docs.spring.io/spring-boot/docs/2.5.4/reference/html/features.html#features.developing-auto-configuration.custom-starter)


  • 命名规则

官方定义的场景启动器:spring-boot-starter-xxxx

自定义的场景启动器:xxxx-spring-boot-starter

  • 创建一个自定义starter项目

官方强调到自定义starter项目需要直接或者间接spring-boot-starter依赖


  • 开始自定义步骤
  • 第一步:创建一个maven项目,引入依赖
<?xmlversion="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/><!-- lookup parent from repository --></parent><groupId>com.fun</groupId><artifactId>acme-spring-boot-starter</artifactId><version>0.0.1-SNAPSHOT</version><name>acme-spring-boot-starter</name><description>自定义场景启动器</description><properties><java.version>1.8</java.version></properties><dependencies><!-- 自义定的starter需要直接或者间接的引用到这个spring boot的core依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- 自定义配置文件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure-processor</artifactId><optional>true</optional></dependency></dependencies></project>
  • 第二步:自定义一个xxxxAutoConfiguration
@Configuration// 表明这是一个配置类@EnableConfigurationProperties(AcmeProperties.class) // 引入配置类,并在容器中生效/*** @ConditionalOnProperty控制自动配置是否生效* 部分参数说明* prefix:配置文件的属性名前缀* havingValue:比较获取到的属性值与该值指定的值相同的时候才加载配置* matchIfMissing:缺少该配置属性值是否可以加载,true可以。false不可以,默认是false* name:enabled 需要在引入的依赖匹配到enabled属性才能配置生效*/@ConditionalOnProperty(prefix="acme", name="enabled", matchIfMissing=true)
publicclassAcmeAutoConfiguration {
@AutowiredprivateAcmePropertiesacmeProperties;
@Bean@ConditionalOnMissingBean(AcmeService.class) // 当容器中没有这个bean时候再注册publicAcmeServiceacmeService() {
returnnewAcmeService(acmeProperties);
    }
}
  • 第三步:写完了自动配置类需要在resource目录下创建一个目录和文件
META-INFA/spring.factories

在spring.factories文件中添加自动配置类,SpringBoot在启动的时候会扫描所有目录下spring.factories中的配置项进行自动加载

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.fun.acmespringbootstarter.config.AcmeAutoConfiguration
  • 第四步:配置类
@ConfigurationProperties(prefix="acme")
publicclassAcmeProperties {
privateStringname;
publicStringgetName() {
returnname;
    }
publicvoidsetName(Stringname) {
this.name=name;
    }
}
  • 最后一步:将自定义的starter项目打成jar包。创建一个SpringBoot将自定义starer jar的maven坐标引入pom.xml 调用即可
@RestController@RequestMapping("/test")
publicclassTestController {
@AutowiredprivateAcmeServiceacmeService;
@GetMapping("/acme")
publicvoidtestAcme() {
acmeService.print();
    }
}
acme:  enabled: true  name: fun

   调用结果

自定义starer...fun

总结:自此一个简单的自定义starter创建完成,在熟悉SpringBoot的自动配置原理情况下,就更好理解这个过程了。

[自定义starter项目](https://gitee.com/fun_zhang/acme-spring-boot-starter)


相关文章
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
11638 60
|
2月前
|
监控 安全 Java
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
Spring Boot 通过 Actuator 模块提供了强大的健康检查功能,帮助开发者快速了解应用程序的运行状态。默认健康检查可检测数据库连接、依赖服务、资源可用性等,但在实际应用中,业务需求和依赖关系各不相同,因此需要实现自定义健康检查来更精确地监控关键组件。本文介绍了如何使用 @HealthEndpoint 注解及实现 HealthIndicator 接口来扩展 Spring Boot 的健康检查功能,从而提升系统的可观测性与稳定性。
197 0
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
|
10月前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
2481 17
Spring Boot 两种部署到服务器的方式
|
9月前
|
Java Maven 开发者
编写SpringBoot的自定义starter包
通过本文的介绍,我们详细讲解了如何创建一个Spring Boot自定义Starter包,包括自动配置类、配置属性类、`spring.factories`文件的创建和配置。通过自定义Starter,可以有效地复用公共配置和组件,提高开发效率。希望本文能帮助您更好地理解和应用Spring Boot自定义Starter,在实际项目中灵活使用这一强大的功能。
740 17
|
8月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
389 0
|
8月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
331 0
|
11月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
11月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
11月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
1792 15
|
12月前
|
安全 Java 应用服务中间件
如何将Spring Boot应用程序运行到自定义端口
如何将Spring Boot应用程序运行到自定义端口
957 0