Spring Boot:从炒作到成熟的基础技术?

18-12-14 banq
    

依赖注入是Spring的基本组件之一,也可以使用其他框架或自己完成。那么为什么要使用Spring?开发人员的生产力就是答案。

Spring Framework的核心任务一直是提供依赖注入(DI)。Spring Boot还有助于管理依赖项,配置事务等等 - 但它只是达到目的一种手段而已。因此,开发人员项目不一定需要Spring也可以轻松开发纯依赖注入。或者,可以使用许多小框架中的一个。例如,可用于快速开发服务和部署HTTP端点的纯Web框架就是理想的选择,一个代表是关于“无容器”的Micronaut,它不使用servlet容器,而是基于Netty的IO非阻塞。

支持Spring和Spring Boot的论点之一就是开发人员的工作效率。只要没有严重的理由反对,应该始终使用Spring Boot设置实现基于Spring的新应用程序。结果是应用程序框架始终看起来相同,并且可以进行类似配置。标准任务(例如配置数据库连接,无论是关系数据库还是图形数据库)都可以同样好地执行。这也适用于应用程序与其他服务的集成:声明启动程序的依赖项,并且可以在没有Spring Boot自动配置机制生成代码的情况下进行配置。

外部配置是另一项重要的生产力功能:如果默认值不合适,通常可以在外部进行调整。这些是属性或YAML格式的文件,环境变量,命令行参数和类似机制。除了诸如事务和缓存的跨平台处理,测试框架,框架内部事件系统和诸如Spring Data和集成之类的令人兴奋的项目之类的方面之外,这些机制是使用Spring的充分理由。

Spring Boot和微服务

关于微服务的炒作,长期以来被视为所有IT问题的灵丹妙药,正在逐渐减弱并屈服于更细微的观点。Spring Boot与术语微服务密切相关。这来自哪里?

Spring Boot的基础知识出现在微服务的最初繁荣阶段。Spring Boot经常与Spring Cloud一起使用。除此之外,Spring Cloud还包括部分开源Netflix堆栈,以及许多其他模块,这些模块极大地简化了创建分布式,基于云的方法的过程。

但是,Spring Boot也可以很好地构建经典的单片单体巨石应用程序或批处理过程,并且它不是一个微服务框架,因为它经常被误传。因此,没有银弹可以提前避免可能的问题,并在每种情况下都提供完美的架构。

SpringBoot集成

Spring Boot提供了各种项目(数据库,事件存储等)的集成。集成通常是节省资源的,并且可以通过所提到的启动器机制来提供。只有依赖项的声明才会激活自动配置,以便在此之前它不会对应用程序的资源消耗做出贡献。

Spring Boot项目可能非常小,但也非常大 - 取决于它所需的集成。这种灵活性在作者对项目中使用Spring Boot的估计中有所体现。典型的标准项目不存在,因为大多数域具有特殊的特征。但是,通常没有时间为需要交互的每个服务编写自己的集成。

核心开发

核心开发涵盖了促进Spring和Spring Boot实际工作的所有主题,还包括非功能性主题,例如对缓存的支持。

Spring DevTools加速了开发。它们允许在修改类文件后部分重新加载Spring上下文。之后,Spring Boot通常会快速启动,但重新加载仅更改的部件会更快。

配置处理器有助于将您自己的应用程序的配置外包给专用类:它生成可在所有主要IDE中读取的元数据。它们有助于编写application.properties或记录自己应用程序的可能配置。

缓存,方面和验证部分在Spring Framework本身中实现。但是,就像安全性和会话支持一样,它们只是Spring Boot自动配置的跨应用程序方面。

数据库

Liquibase和Flyway自动支持Spring Boot而无需进一步配置 - 它们与曾经配置的数据源一起工作。如果Spring Boot用于开发关系数据库微服务,那么问题就出现了:谁对数据库模式拥有主权?同样,Spring Boot在许多情况下提供了有用的工具。但是,该工具的有用应用由开发人员负责。

支持各种非关系数据库:Redis,Cassandra,Couchbase等,Spring Boot也支持像Neo4j这样的图形数据库和像Mongo或Elasticsearch这样的文档存储。通常,每个数据库都有单独的Spring Data模块。与JDBC / JPA环境一样,Spring Boot提供了配置URL和凭据的一致机制。

Web框架

Spring Web MVC和Spring WebFlux都是Spring Framework的一部分,两者是并行的。两者都是Spring Boot自动配置的面向请求的Web框架。对于面向组件的框架Vaadin,可以使用启动器。喜欢采用面向资源的方法的开发人员可以直接使用Spring Boot中的Jersey 2,而无需进一步配置走弯路。

在服务器上生成HTML内容并不流行。但模板引擎Thymeleaf,Freemarker,Mustache和Groovy模板可以直接与Spring Boot一起使用。

应用程序的实际附加值只有在进入生产操作时才会变得明显。诸如Actuator之类的SpringBoot启动模块对此有所帮助。它提供状态和健康端点的Web界面,并通过JMX提供有关应用程序的信息。Micrometer是一个收集系统,应用程序和系统指标的新项目。它可以通过Actuator进入应用程序并自动配置。或者,Micrometer可以独立于Spring Boot使用。

Spring Boot 2

Spring Boot 2中的一个主要特点是反应式编程模型。它们解决了有效使用资源的问题,尤其是线程。反应式编程不仅关系到HTTP请求的处理相关的,而且在数据库有关。

AkkaVert.xLagom这样的框架处于最前沿,但Spring提供了许多公司建立的基础技术的优势。因此,它拥有庞大的用户群和全面的知识。随着新数据类型(如Mono和Flux)以及支持基础架构的顺利引入,Spring 5和Spring Boot 2已成功维护并将这些知识提升到一个新的水平。

Spring Boot 2发布半年后,Redis,MongoDB,Cassandra和Couchbase的响应式驱动程序已准备就绪。Reactive Cloud Streams提供与Kafka或RabbitMQ的响应式连接。

Spring Boot 2.1

2018年9月下旬在华盛顿的SpringOne平台并行发布Spring Framework 5.1。与此同时,Spring Boot 2.1也可用。Spring Framework的特别亮点一方面是JDK 11的支持

通过Spring Fu,开发了一个孵化器项目,其中可以开发和测试新的功能性跳跃功能,特别是在Kotlin方向。其中一些函数编程已经流入Spring Framework。

也突出了JUnit 5的全面支持。与年初相比,Maven和Gradle的构建管理工具的显着改进支持,几乎没有理由在新的Spring项目中放弃JUnit 5。

Spring Boot 2.1完全基于现代容器构建,需要Tomcat 9和Undertow 2。同样,完全支持JDK 11,因此开发人员不再需要依赖Java 8。在安全性方面,spring boot 2.1还实现了核心OAuth 2资源服务器支持。

旨在提高生产力的高级功能和新功能列表很长。例如,允许将不同的Java记录器组合在一起并配置。