如何自定义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)


相关文章
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
2月前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
206 0
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
197 2
|
26天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
39 2
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
66 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
16天前
|
安全 Java 应用服务中间件
如何将Spring Boot应用程序运行到自定义端口
如何将Spring Boot应用程序运行到自定义端口
27 0
|
3月前
|
Java Spring
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
2月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
72 2
|
2月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
4月前
|
Java 数据安全/隐私保护 Spring
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效
揭秘Spring Boot自定义注解的魔法:三个实用场景让你的代码更加优雅高效