Spring Boot 是一套全新的框架,它来自于 Spring 大家族,因此 Spring 所有具备的功能它都有并且更容易使用;同时还简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的、产品级别的 Spring 应用。
Spring Boot 特性
Spring Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。同时它集成了大量常用的第三方库配置(如 Redis、MongoDB、JPA、RabbitMQ、Quartz 等),Spring Boot 应用中这些第三方库几乎可以零配置进行开箱即用,大部分的 Spring Boot 应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。
使用 Spring Boot 开发项目,有以下几方面优势:
在 Spring 体系中,Spring Boot JPA 就是约定优于配置最佳实现之一,不需要关注表结构,我们约定类名即是表名,属性名即是表的字段,String 对应 varchar,long 对应 bigint,只有需要一些特殊要求的属性,我们再单独进行配置,按照这个约定我们可以将以前的工作大大简化。
Spring Boot Starters 基于约定优于配置的理念来设计,Spring Boot Starter 中有两个核心组件:自动配置代码和提供自动配置模块及其它有用的依赖。也就意味着当我们项目中引入某个 Starter,即拥有了此软件的默认使用能力,除非我们需要特定的配置,一般情况下我仅需要少量的配置或者不配置即可使用组件对应的功能。
Spring Boot 由众多 Starter 组成,随着版本的推移 Starter 家族成员也与日俱增。在传统 Maven 项目中通常将一些层、组件拆分为模块来管理,以便相互依赖复用,在 Spring Boot 项目中我们则可以创建自定义 Spring Boot Starter 来达成该目的。
Spring Boot 拥有强大融合社区开源软件的能力,在没有使用 Spring Boot 之前,我们需要按照每个开源软件的特性,将对应的组件包集成到我们的开发项目中,因为每个组件的设计理念和开发团队都不一致,因此会有很多不同的调用风格在我们的项目中。
Spring Boot 整合了主流的开源软件形成了一系列的 Starter,让我们有了一致的编程体验来集成各种软件,Spring Boot 在集成的时候做了大量的优化,让我们在集成的时候往往只需要很少的配置和代码就可以完成。可以说各种 Starters 就是 Spring Boot 最大的优势之一。
以下为常用的 Spring Boot Starter 列表。
名称 | 描述 | Pom |
---|---|---|
spring-boot-starter | 核心 Starter,包括自动配置支持,日志和 YAML | Pom |
spring-boot-starter-activemq | 用于使用 Apache ActiveMQ 实现 JMS 消息 | Pom |
spring-boot-starter-amqp | 用于使用 Spring AMQP 和 Rabbit MQ | Pom |
spring-boot-starter-cache | 用于使用 Spring 框架的缓存支持 | Pom |
spring-boot-starter-data-elasticsearch | 用于使用 ElasticSearch 搜索,分析引擎和 Spring Data ElasticSearch | Pom |
spring-boot-starter-data-jpa | 用于使用 Hibernate 实现 Spring Data JPA | Pom |
spring-boot-starter-data-mongodb | 用于使用基于文档的数据库 MongoDB 和 Spring Data MongoDB | Pom |
spring-boot-starter-data-redis | 用于使用 Spring Data Redis 和 Jedis 客户端操作键—值数据存储 Redis | Pom |
spring-boot-starter-jta-atomikos | 用于使用 Atomikos 实现 JTA 事务 | Pom |
sring-boot-starter-mail | 用于使用 Java Mail 和 Spring 框架 Email 发送支持 | Pom |
spring-boot-starter-quartz | 用于定时任务 Quartz 的支持 | Pom |
spring-boot-starter-security | 对 Spring Security 的支持 | Pom |
spring-boot-starter-test | 用于测试 Spring Boot 应用,支持常用测试类库,包括 JUnit、Hamcrest 和 Mockito | Pom |
spring-boot-starter-thymeleaf | 用于使用 Thymeleaf 模板引擎构建 MVC Web 应用 | Pom |
spring-boot-starter-validation | 用于使用 Hibernate Validator 实现 Java Bean 校验 | Pom |
spring-boot-starter-web | 用于使用 Spring MVC 构建 Web 应用,包括 RESTful。Tomcat 是默认的内嵌容器 | Pom |
spring-boot-starter-websocket | 用于使用 Spring 框架的 WebSocket 支持构建 WebSocket 应用 | Pom |
这里只节选了我们最常使用的 Starter,完整的 Starter 参考这里:Spring Boot application starters。
因为 Spring Boot 足够的强大,很多第三方社区都进行了主动的集成。比如:MyBatis、RabbitMQ(高级用法)等,第三方社区支持的列表,可以在这里查看 Community Contributions,可以看到社区贡献的其他 Starters 列表。
Spring 最初核心的两大核心功能 Spring IoC 和 Spring Aop 成就了 Spring,Spring 在这两大核心功能上不断地发展,才有了 Spring 事务、Spring MVC 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎可以解决企业开发中的所有问题。
Spring Boot 是在强大的 Spring 帝国生态基础上面发展而来,发明 Spring Boot 不是为了取代 Spring,是为了让人们更容易的使用 Spring。所以说没有 Spring 强大的功能和生态,就不会有后期 Spring Boot 的火热,Spring Boot 使用约定优于配置的理念,重新重构了 Spring 的使用,让 Spring 后续的发展更有生命力。
Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装并屏蔽掉复杂的配置和实现原理,最终给开发者提供了一套简单易懂、易部署、易维护的分布式系统开发工具包。
Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发。服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。
Spring Cloud 是为了解决微服务架构中服务治理而提供的具备一系列功能的开发框架,并且 Spring Cloud 是完全基于 Spring Boot 而开发,Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。
综上我们可以这样来理解,正是由于 Spring IoC 和 Spring Aop 两个强大的功能才有了 Spring,Spring 生态不断的发展才有了 Spring Boot,使用 Spring Boot 让 Spring 更易用更有生命力,Spring Cloud 是基于 Spring Boot 开发的一套微服务架构下的服务治理方案。
以下为它们之间的关系。
Spring Ioc/Aop > Spring > Spring Boot > Spring Cloud
Spring Boot 诞生一方面是因为 Spring 自身发展所遇到的问题,另一方面在微服务思想诞生之际,急需要一款快速开发工具来实现微服务技术落地,在这样的背景下诞生了 Spring Boot。
Spring Boot 整体的设计思想是:约定优于配置。依赖此设计思路,Spring Boot 进行了大刀阔斧的改革,让开发、测试、部署更为便捷。众多的 Starters 成就了 Spring Boot 的发展,让使用 Spring Boot 开发项目变得更加简单。