SpringBoot - Starters

发布于 2024-06-27 12:54:00 字数 6973 浏览 13 评论 0

使用 Spring Boot Starters 可以快速集成相关组件,无需编写复杂的配置,在引入某项技术框架时,一个比较好的习惯就是看有没有 xxx-starter

一、官方提供的 starts

以下基于 Spring Boot 2.4.0 版本,后续版本可能会有新增和删除,有兴趣可以到 spring-boot-autoconfigure 中查看最新版本

application starters 应用程序级

  • spring-boot-starter: 核心 Starter, 包含自动配置、日志及 yaml 支持等
  • spring-boot-starter-aop: 集成 Spring AOP 和 Aspectj, 用于支持面向切面编程
  • spring-boot-starter-batch: 集成 Spring Batch, 用于批处理相关
  • spring-boot-starter-cache: 集成 Spring Cache, 用于缓存相关
  • spring-boot-starter-hateoas: 集成 Spring MVC 和 Spring HATEOAS 构建超媒体 RESTFul Web 应用
  • spring-boot-starter-integration: 集成 Spring Integration
  • spring-boot-starter-jdbc: 集成 JDBC 结合 Hikari 连接池
  • spring-boot-starter-jersey: 集成 JAX-RS 和 Jersey 构建 RESTful Web 应用,是 spring-boot-starter-web 的一个替代品
  • spring-boot-starter-jooq: 集成 JOOQ 访问数据库,是 spring-boot-starter-data-jpa 或者 spring-boot-starter-jdbc 的替换品
  • spring-boot-starter-json: 集成 Jackson 用于读写 JSON
  • spring-boot-starter-jta-atomikos: 集成 Atomikos 实现 JTA 事务
  • spring-boot-starter-jta-bitronix: 集成 Bitronix 实现 JTA 事务,不过 2.3.0 开始被标识为 Deprecated
  • spring-boot-starter-mail: 集成 Java Mail 和 Spring 架构的邮件发送功能
  • spring-boot-starter-security: 集成 Spring Security 用于权限认证
  • spring-boot-starter-oauth2-client: 集成 Spring Security’s OAuth2/OpenID 连接客户端功能
  • spring-boot-starter-oauth2-resource-server: 集成 Spring Security’s OAuth2 资源服务器功能
  • spring-boot-starter-quartz: 集成 Quartz 任务调度
  • spring-boot-starter-rsocket: 构建 RSocket 客户端和服务端
  • spring-boot-starter-test: 集成 JUint Jupiter, Hamcrest 和 Mockito 测试 Spring Boot 应用和类库
  • spring-boot-starter-validation: 集成 Java Bean Validation 结合 Hibernate Validator
  • spring-boot-starter-web: 集成 Spring MVC 构建 RESTful Web 应用,使用 Tomcat 作为默认内嵌容器
  • spring-boot-starter-web-services: 集成 Spring Web Services
  • spring-boot-starter-webflux: 集成 Spring Reactive Web 构建 WebFlux 应用
  • spring-boot-starter-websocket: 集成 Spring WebSocket 构建 WebSocket 应用

Spring Data

所有 Spring Data 项目都是为了简化 Spring 应用的数据访问开发

  • spring-boot-starter-data-cassandra: 集成 Spring Data Cassandra 和分布式数据库 Cassandra
  • spring-boot-starter-data-cassandra-reactive: 集成 Spring Data Cassandra Reactive 和分布式数据库 Cassandra
  • spring-boot-starter-data-couchbase: 集成 Spring Data Couchbase 和文档型数据库 Couchbase
  • spring-boot-starter-data-couchbase-reactive: 集成 Spring Data Couchbase Reactive 和文档型数据库 Couchbase
  • spring-boot-starter-data-elasticsearch: 集成 Spring Data 和搜索引擎 Elasticsearch
  • spring-boot-starter-data-solr: 集成 Spring Data Solr 和搜索引擎 Apache Solr
  • spring-boot-starter-data-jdbc: 集成 Spring Data JDBC, 给基于 JDBC 的数据库应用提供 Repository 封装, 类似于 Spring Data JPA 中 JpaRepository 的功能,但是不引入任何 ORM 框架
  • spring-boot-starter-data-jpa: 集成 Spring Data Jpa 结合 Hibernate
  • spring-boot-starter-data-ldap: 集成 Spring Data LDAP
  • spring-boot-starter-data-mongodb: 集成 Spring Data MongoDB 和文档型数据库 MongoDB
  • spring-boot-starter-data-mongodb-reactive: 集成 Spring Data MongoDB Reactive 和文档型数据库 MongoDB
  • spring-boot-starter-data-neo4j: 集成 Spring Data Neo4j 和图形数据库 Neo4j
  • spring-boot-starter-data-r2dbc: 集成 Spring Data R2DBC
  • spring-boot-starter-data-redis: 集成 Spring Data Redis 和内存数据库 Redis 并使用 Lettuce 客户端
  • spring-boot-starter-data-redis-reactive: 集成 Spring Data Redis Reactive 和内存数据库 Redis 并使用 Lettuce 客户端
  • spring-boot-starter-data-rest: 集成 Spring Data REST 暴露 Spring Data Repositories 输出 REST 资源

视图渲染

  • spring-boot-starter-thymeleaf: 集成 Thymeleaf 视图构建 MVC Web 应用
  • spring-boot-starter-freemarker: 集成 Freemarker 视图构建 MVC Web 应用
  • spring-boot-starter-mustache: 集成 Mustache 视图构建 Web 应用
  • spring-boot-starter-groovy-templates: 集成 Groovy 模板视图构建 MVC Web 应用

消息队列

  • spring-boot-starter-activemq: 集成 Apache ActiveMQ,基于 JMS(Java Message Service 消息服务) 的消息队列
  • spring-boot-starter-artemis: 集成 Apache Artemis,基于 JMS 的消息队列
  • spring-boot-starter-amqp: 集成 Spring AMQP 和 Rabbit MQ 的消息队列

production starters 生产级

  • spring-boot-starter-actuator: 集成 Spring Boot Actuator, 提供生产功能以帮助监控和管理应用程序

technical starters 技术类

  • spring-boot-starter-log4j2: 集成 Log4j2 日志框架,注意需排除默认的 logback 引用
  • spring-boot-starter-logging: 集成 Logback 日志框架,引入 Spring Boot 时默认已集成
  • spring-boot-starter-tomcat: 集成 Tomcat 作为内嵌的 servlet 容器,引入 web starter 时默认已集成
  • spring-boot-starter-jetty: 集成 Jetty 作为内嵌的 servlet 容器,注意需排除掉 web starter 原有 tomcat 引用
  • spring-boot-starter-undertow: 集成 Undertow 作为内嵌的 servlet 容器,注意需排除掉 web starter 原有 tomcat 引用
  • spring-boot-starter-reactor-netty: 集成 Netty 作为内嵌的响应式 Http 服务器

以上所有官方提供的 starter,如果你项目 pom 文件中的 parent 是 spring-boot-starter-parent,则引入时无需指定 version,Spring Boot 会自动引用相关依赖(感兴趣可以 idea 安装 Maven Helper 这个插件看下自己使用的 starts 各自引用的库的版本)
如果发现 starter 自身引入的库版本较低,或者想体验该库的新版本,需先排除原有库引用再单独引入该库(可从 Maven Central Repository 中查看)

二、第三方 starts

一般第三方的框架会提供自制的 Spring Boot Starter,如:mybatis-spring-boot-starter,只要几个依赖,几行配置参数就能轻松实现集成

三、自己编写 Starter

除了第三方的 Starter,也可以私有定制 Starter,方便在公司内部各业务部门快速集成使用,而不用各自造轮子

命名风格

  • groupId: 不要用官方的 org.springframework.boot, 而要用你自己独特的。
  • artifactId: Spring Boot 官方建议非官方的 Starter 命名格式遵循 xxx-spring-boot-starter ,例如 mybatis-spring-boot-starter。
    官方 starter 会遵循 spring-boot-starter-xxx ,例如的 spring-boot-starter-web。

    编写要点

starter 集成入应用有两种方式:

  • 主动生效,使用 @Import 注解,集成后在 Spring Boot 中加入自定义的 @Enablexxx 就会生效
  • 被动生效, 在 autoconfigure 资源包下新建 META-INF/spring.factories 写入 XXXAutoConfiguration 全限定名, 这样在 starter 组件集成入 Spring Boot 应用后就会生效

核心要点是 @ConditionalOnMissingBean 等注解的用法

比较好的习惯,编写自定义 starter 时最好包含以下模块

xxx-spring-boot-autoconfigure

普通 maven 项目即可, 需要引用 spring-boot-autoconfigure 和 spring-boot-configuration-processor(以便在 IDE 中配置参数时可以进行提示),主要用来定义配置参数、以及自动配置对外暴露的功能(一般是抽象的接口 Spring Bean)

注意一定要显式声明你配置的前缀标识(prefix)

xxx-spring-boot-starter

starter 是一个空 jar。它的唯一目的是提供使用库所必需的依赖项。删除掉 src 文件夹,在 pom 文件中加入 xxx-spring-boot-autoconfigure 依赖(普通 maven 项目即可)

示例-jonesun-sample-spring-boot

可以参考 spring 官方提供的文章 ,还有市场上较流行的非官方 starter 的编写,如 mybatis-spring-boot-starter

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

牛↙奶布丁

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

忆伤

文章 0 评论 0

眼泪也成诗

文章 0 评论 0

zangqw

文章 0 评论 0

旧伤慢歌

文章 0 评论 0

qq_GlP2oV

文章 0 评论 0

旧时模样

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文