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