SpringBoot - Starters
使用 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 项目即可)
可以参考 spring 官方提供的文章 ,还有市场上较流行的非官方 starter 的编写,如 mybatis-spring-boot-starter
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论