当前位置: 首页 > ai >正文

如何自定义一个SpringBoot Starter

创建自定义 Spring Boot Starter 涉及封装特定功能供其他项目复用。以下是详细步骤和代码示例:

核心步骤

  1. 项目结构

    创建 Maven 项目(两个模块):

    my-starter-parent
    ├── my-spring-boot-autoconfigure  // 自动配置核心
    └── my-spring-boot-starter        // 轻量依赖聚合

1. 创建自动配置模块 (my-spring-boot-autoconfigure)

① POM 依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>3.1.0</version><optional>true</optional></dependency>
</dependencies>
② 创建配置属性类
@ConfigurationProperties(prefix = "my.service")
public class MyServiceProperties {private String prefix = "Hello";private String suffix = "!";// 省略 getter/setter
}
③ 编写业务服务类
public class MyService {private final String prefix;private final String suffix;public MyService(String prefix, String suffix) {this.prefix = prefix;this.suffix = suffix;}public String greet(String name) {return prefix + " " + name + suffix;}
}
④ 自动配置类(核心)
@Configuration
@EnableConfigurationProperties(MyServiceProperties.class)
@ConditionalOnClass(MyService.class) // 类路径存在时生效
@ConditionalOnProperty(prefix = "my.service", name = "enabled", matchIfMissing = true)
public class MyServiceAutoConfiguration {@Bean@ConditionalOnMissingBean // 用户未定义时初始化public MyService myService(MyServiceProperties properties) {return new MyService(properties.getPrefix(), properties.getSuffix());}
}
⑤ 注册自动配置

src/main/resources/META-INF/spring/创建文件:

文件路径: org.springframework.boot.autoconfigure.AutoConfiguration.imports

com.example.autoconfigure.MyServiceAutoConfiguration

2. 创建 Starter 模块 (my-spring-boot-starter)

POM 配置
<dependencies><dependency><groupId>com.example</groupId><artifactId>my-spring-boot-autoconfigure</artifactId><version>1.0.0</version></dependency>
</dependencies>

📌 ​关键点​:Starter 本身无代码,仅聚合依赖


3. 安装到本地仓库

mvn clean install

4. 在其他项目中使用

添加依赖
<dependency><groupId>com.example</groupId><artifactId>my-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>
配置参数 (application.yml)
my:service:prefix: "Welcome"suffix: "!!!"# enabled: true # 默认启用
代码调用
@RestController
public class DemoController {@Autowiredprivate MyService myService;@GetMapping("/greet")public String greet(String name) {return myService.greet(name);}
}

高级配置技巧

  1. 条件化Bean

    使用 Spring Boot 的条件注解控制Bean创建:

    @Bean
    @ConditionalOnWebApplication // 仅Web环境生效
    @ConditionalOnMissingBean
    public MyWebService myWebService() {...}
  2. 自定义指标监控

    集成 Micrometer 暴露指标:

    @Bean
    public MyServiceMetrics myServiceMetrics(MyService service) {return new MyServiceMetrics(service);
    }
  3. Starter 元数据

    autoconfigure模块的 META-INF/spring-configuration-metadata.json中添加配置提示:

    {"properties": [{"name": "my.service.prefix","type": "java.lang.String","defaultValue": "Hello","description": "Custom greeting prefix."}]
    }

调试技巧

  1. 启用 debug 模式查看自动配置报告:

    debug: true
  2. 检查 Condition Evaluation Report 中的 Positive matchesNegative matches


通过以上步骤,您已创建了一个可复用、可配置的 Spring Boot Starter。关键点在于解耦自动配置与依赖管理,并遵循 Spring Boot 的约定大于配置原则。实际开发中可结合具体需求扩展错误处理、健康检查等企业级特性。

http://www.xdnf.cn/news/18333.html

相关文章:

  • 密码管理中明文密码与空密码的危害与预防
  • 继承(Inheritance)
  • 机器学习集成算法与K-means聚类
  • Pytest 插件怎么写:从0开发一个你自己的插件
  • 14. 多线程(进阶1) --- 常见的锁策略和锁的特性
  • 【Protues仿真】基于AT89C52单片机的数码管驱动事例
  • Windows下,将本地视频转化成rtsp推流的方法
  • strcasecmp函数详解
  • AI模型部署 - 大语言模型(LLM)部署技术与框架
  • js来比较两个对象内容有误差异
  • mysql数据库学习
  • 想在手机上操作服务器?cpolar让WaveTerminal终端随身携带,效率倍增
  • 【Springboot进阶】Java切面编程对性能的影响深度分析
  • 【Ruoyi解密-02.登录流程:】登录-找密码不抓瞎
  • selenium3.141.0执行JS无法传递element解决方法
  • Linux的奇妙冒险——进程间通信(管道、SystemV IPC)
  • 完全背包(模板)
  • webrtc中win端音频---windows Core Audio
  • 2025图表制作完全指南:设计规范、工具选型与行业案例
  • Chrome/360 浏览器扩展深度解析:内置扩展与普通扩展的实现机制对比
  • (栈)Leetcode155最小栈+739每日温度
  • 力扣 30 天 JavaScript 挑战 第37天 第九题笔记 知识点: 剩余参数,拓展运算符
  • Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
  • 【C++去除整数某一位数字求新数和倍数保留2位小数控制】2022-10-22
  • 人工智能 -- 循环神经网络day1 -- 自然语言基础、NLP基础概率、NLP基本流程、NLP特征工程、NLP特征输入
  • 打造医疗新质生产力
  • 如何用算力魔方4060安装PaddleOCR MCP 服务器
  • visual studio更改git提交的用户名和邮件
  • Seaborn数据可视化实战:Seaborn基础与实践-数据可视化的艺术
  • 高效处理NetCDF文件经纬度转换:一个纯CDO驱动的Bash脚本详解