技术标签: spring boot 【Spring Boot2.X】
Spring Boot 在传统 Spring 框架的基础上做了创新和优化,将开发人员从以往烦琐的配置工作中解放出来,并提供了大量即插即用的集成化组件,从而解决了各种组件之间复杂的整合过程,大大提高了开发效率,降低了维护成本。
比如, 原本使用的是 Spring MVC 框架, 在整个开发过程中,除了需要编写一大堆配置文件、针对每个层次引入专门的开发组件外,还需要独立部署和管理应用服务器。最后,为了对系统的运行状态进行有效监控,还需要引入一些并不好用的外部框架。
而使用了 Spring Boot 框架,因为它直接解决了使配置 、 编程 、 部署 、 监控 ,好用、简单又高效。
越来越强大的 Spring Boot 俨然是 Java EE 领域的标准开发框架了。熟练掌握 Spring Boot 中的各项技术组件,并能够在一定程度上掌握其内部运行机制,是从事 Java 应用程序开发的基本要求,也是学习 Spring Cloud 等微服务开发框架的基础。
Spring 框架自 2003 年由 Rod Johnson 设计并实现以来,经历了多个重大版本的发展和演进,已经形成了一个庞大的家族式技术生态圈。目前,Spring 已经是 Java EE 领域最流行的开发框架,在全球各大企业中都得到了广泛应用。
让我们先来看一下 Spring 家族技术生态的全景图。
访问 下Spring 的官方网站 https://spring.io/
从图中可以看到,这里罗列了 Spring 框架的七大核心技术体系,分别是微服务架构、响应式编程、云原生、Web 应用、Serverless 架构、事件驱动以及批处理
这些技术体系各自独立但也有一定交集,例如微服务架构往往会与基于 Spring Cloud 的云原生技术结合在一起使用,而微服务架构的构建过程也需要依赖于能够提供 RESTful 风格的 Web 应用程序等。
另一方面,在具备特定的技术特点之外,这些技术体系也各有其应用场景。
举个例子
在日常开发过程中,如果构建单块 Web 服务,可以采用 Spring Boot。如果想要开发微服务架构,那么就需要使用基于 Spring Boot 的 Spring Cloud,而 Spring Cloud 同样内置了基于 Spring Cloud Stream 的事件驱动架构。
同时, 特别强调的是响应式编程技术。响应式编程是 Spring 5 引入的最大创新,代表了一种系统架构设计和实现的技术方向。因此,我们也将从 Spring Boot、Spring Cloud 以及 Spring 响应式编程这三个技术体系进行切入,看看 Spring 具体能够为我们解决开发过程中的哪些问题。
当然,所有我们现在能看到的 Spring 家族技术体系都是在 Spring Framework 基础上逐步演进而来的。在介绍上述技术体系之前,我们先简单了解下 Spring Framework 的整体架构,如下图所示:
【4.x】
Spring Boot 构建在 Spring Framework 基础之上,是新一代的 Web 应用程序开发框架。
我们可以通过下面这张图来了解 Spring Boot 的全貌:
通过浏览 Spring 的官方网站,我们可以看到 Spring Boot 已经成为 Spring 中顶级的子项目。自 2014 年 4 月发布 1.0.0 版本以来,Spring Boot 俨然已经发展为 Java EE 领域开发 Web 应用程序的首选框架。
先来感受一下使用 Spring Boot 开发一个 RESTful风格 的 HTTP 端点所需要做的编码工作,如下所示:
@SpringBootApplication
@RestController
public class DemoApplication {
@GetMapping("/helloworld")
public String hello() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
一个经典的“Hello World”程序,而且使用 Spring Boot 来构建这样一个支持 RESTful 风格的 Web 应用程序只需要几秒钟。
一旦创建了一个 Spring Boot 应用程序,并添加类似上面的 DemoApplication 类,我们就可以启动 Spring Boot 内置的 Web 服务器并监听 8080 端口,剩余的一切工作 Spring Boot 都帮你自动完成了。
Spring Boot 具备了传统 Spring 框架所不具备的功能特性,即支持运行期内嵌容器(包含 Tomcat、Jetty 等支持 Servlet 规范的多款传统 Web 容器)。
在最新的 Spring Boot 2.X 版本中,还提供了对 Netty 以及集成 Servlet 3.1+ 的非阻塞式容器的支持。基于运行期内嵌容器机制。
开发人员想要启动Web 服务只需要使用一行 java –jar 命令就可以了。
我们还发现 Spring Boot 的核心功能就是自动配置。
我们可以看到 Spring Boot 并没有像以前使用 Spring MVC 一样需要指定一大堆关于 HTTP 请求和响应的 XML 配置。
事实上,Spring Boot 的运行过程同样还是依赖于 Spring MVC,但是它把原本需要开发人员指定的各种配置项设置了默认值,并内置在了运行时环境中,例如默认的服务器端口就是 8080,如果我们不需要对这些配置项有定制化需求,就可以不做任何的处理,采用既定的开发约定即可。这就是 Spring Boot 所倡导的约定优于配置(Convention over Configuration)设计理念。
另外,相较传统的 Spring 框架,Spring Boot 的一大亮点是引入了内置的监控机制,这是通过 Actuator 组件(常见的包括内存信息、JVM 信息、垃圾回收信息等)来实现的。基于 Actuator 组件,一方面我们可以查看包含自动配置在内的应用程序详细信息,另一方面可以实时监控该应用程序的运行时健康状态。
可以看到,Spring Boot 的上述功能实际上从多个维度简化了 Web 应用程序的开关过程,这些维度包含编码、配置、部署和监控等。
Spring Cloud 构建在 Spring Boot 基础之上,它的整体架构图如下所示:
技术组件的完备性是 Spring Cloud 框架的主要优势,它集成了业界一大批知名的微服务开发组件。Spring Cloud 的核心组件如下图所示
可以看到,基于 Spring Boot 的开发便利性,Spring Cloud 巧妙地简化了微服务系统基础设施的开发过程,Spring Cloud 包含上图中所展示的服务发现注册、API 网关、配置中心、消息总线、负载均衡、熔断器、数据监控等
随着 Spring 5 的正式发布,我们迎来了响应式编程(Reactive Programming)的全新发展时期。Spring 5 中内嵌了与数据管理相关的响应式数据访问、与系统集成相关的响应式消息通信以及与 Web 服务相关的响应式 Web 框架等多种响应式组件,从而极大地简化了响应式应用程序的开发过程和开发难度。
下图展示了响应式编程的技术栈与传统的 Servlet 技术栈之间的对比:
从上图可以看到,上图左侧为基于 Spring WebFlux 的技术栈,右侧为基于 Spring MVC 的技术栈。我们知道传统的 Spring MVC 构建在 Java EE 的 Servlet 标准之上,该标准本身就是阻塞式和同步的,而 Spring WebFlux 基于响应式流,因此可以用来构建异步非阻塞的服务。
在 Spring 5 中,选取了 Project Reactor 作为响应式流的实现库。由于响应式编程的特性,Spring WebFlux 和 Project Reactor 的运行需要依赖于诸如 Netty 和 Undertow 等支持异步机制的容器。同时我们也可以选择使用较新版本的 Tomcat 和 Jetty 作为运行环境,因为它们支持异步 I/O 的 Servlet 3.1。
下图更加明显地展示了 Spring MVC 和 Spring WebFlux 之间的区别和联系:
在基于 Spring Boot 以及 Spring Cloud 的应用程序中,Spring WebFlux 和 Spring MVC 可以混合进行使用。
我们主要围绕 Spring Boot 框架展开讨论,分别从配置体系、数据访问、Web 服务、消息通信、系统安全、系统监控、应用测试等维度对该框架进行深入的剖析,所采用的版本为 2.2.X 版。
系统分析了 Spring 家族的技术生态,并重点介绍了 Spring Boot、Spring Cloud 和 Spring 响应式编程这三大技术体系。从技术演进的过程和趋势而言,这些工具和框架的出现有其必然性。Spring Boot 是对传统 Spring MVC 的改进,Spring Cloud 基于 Spring Boot 构建微服务架构,而响应式编程则代表未来技术的发展方向。
文章浏览阅读1k次,点赞4次,收藏5次。SOD是指超氧化物歧化酶(Superoxide Dismutase),是一种抗氧化酶,它可以将细胞内产生的超氧自由基转化为过氧化氢和氧分子。超氧自由基是一种高度反应性的分子,它们可以与细胞内的其他分子发生反应,导致细胞损伤和炎症等问题。因此,SOD在维持细胞健康方面起着重要作用。SOD通常包括多个亚型,如Cu/Zn-SOD、Mn-SOD和Fe-SOD等。这些亚型在不同的组织和环境中发挥不同的作用。例如,Cu/Zn-SOD主要存在于细胞质中,而Mn-SOD则主要存在于线粒体中。_xppaut
文章浏览阅读1.1k次。配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件首先maven环境变量:变量名:MAVEN_HOME变量值:E:\apache-maven-3.2.3变量名:Path变量值:;%MAVEN_HOME%\bincmd控制台查看查看maven是否配置成功1:查看maven安装路径:echo %MAVEN_HOME%_maven 提示'cmd' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
文章浏览阅读425次。加密单向加密MD5不多说了,全称Message Digest Algorithm 5,信息摘要算法SHA全称secure hash algorithm 安全散列算法HMAChash message authentication code 散列消息鉴别码,根据hash算法的认证协议。HMAC的认证原理是,使用一个密钥生成一 个固定大小的小数据块,即MAC,并将其加入消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。经常用于对API参数进行请求验证:分配给授权调用方一个_java信息安全技术是什么
文章浏览阅读9.6k次,点赞8次,收藏43次。数据恢复分类:硬恢复和软恢复。所谓硬恢复就是硬盘出现物理性损伤,比如有盘体坏道、电路板芯片烧毁、盘体异响,等故障,由此所导致的普通用户不容易取出里面数据,那么我们将它修好,同时又保留里面的数据或后来恢复里面的数据,这些都叫数据恢复,只不过这些故障有容易的和困难的之分;所谓软恢复,就是硬盘本身没有物理损伤,而是由于人为或者病毒破坏所造成的数据丢失(比如误格式化,误分区),那么这样的数据恢复就叫软恢复..._winhex怎么备份扇区
文章浏览阅读474次。html和xml的区别html(超文本标记语言),用来显示数据xml(可扩展标记语言),用来传输和存储数据xpath语法// 的用途//a当前html页面上的所有的abookstore//bookbookstore下的所有book元素@的使用//a/@herf所有a的hreftext()的使用//a/text()获取所有的a下的文本text()的使用//a/text()获取所有的a下的文本//a[text()=下一页]获取文本为下一页的a标签_a', {'text': '下一章'}
文章浏览阅读225次。虚拟机安装MacOS10.14教程https://mp.weixin.qq.com/s/91Qc7L7E0xbVYXUcReUb_w升级10.15分辨率解决https://blog.csdn.net/weixin_43825552/article/details/86763378https://www.cnblogs.com/sunylat/p/6414697.html优化https..._虚拟机macos登录apple id发生未知错误
文章浏览阅读533次,点赞21次,收藏13次。今天学长向大家介绍一个机器视觉的毕设项目,基于深度学习的人脸识别系统毕业设计 opencv人脸识别系统。
文章浏览阅读1k次。Python对txt文档进行读,写,追加,修改操作上次写了一篇Python对csv文档进行读,写,追加操作,这次写一篇关于txt的操作。本文将使用open,pandas,numpy三种方式对txt文档进行读,写,追加,在此不推荐使用此方式操作 f = open(’test.txt’, ‘w’),因为该方法结束时候需要使用f.close(),如果忘记写close,则可能出现数据丢失的情况1.with open()方式读:with open("test.txt","r") as f: ._open txt文件续写
文章浏览阅读418次。命令行登录防止MySQL密码泄露的几个小妙招。明知山有虎偏向虎山行的方案:1、可以通过如下环境变量强制Linux不记录敏感历史命令在命令行执行HISTCONTROL=ignorespace后,再输入带密码的命令的前面加一个空格登录,登录命令不会被记录到历史记录里。[root@oldboy~]# HISTCONTROL=ignorespace#<==这里是临时生效,要想永久生效,请放入/etc..._如何忽略mysql数据库在命令行使用密码不安全
文章浏览阅读1.4k次。 声明:此文章为个人读书笔记,仅记些重要的内容备忘,无盗版之意。更多相关内容请查看《Windows Vista使用详解》。严禁转载!第5章: 安装与管理硬件设备 安装驱动程序 管理硬件设备 禁止安装特定的设备 笔记:什么是驱动程序签名?驱动程序的数字签名工作是由微软WHQL(Windows Hardware Quality Labs,Win_安装与管理硬件装备
文章浏览阅读360次。简述: 所有的实时系统都需要一个能提供周期性时间的时间源,叫做时基周期或系统周期; 当时基任务执行时,它会遍历队列中所有等待期满的任务、等待事件超时的任务; 时基任务会就绪时基列表中的那些期满、超时的任务; 时基列表中包含了一个表OSCfg_TickWheel[]和一个计数器OSTickCtr; 这个表由OS_CFG_TICK_WHELL_SIZE记录,记录数取决于处理器的RAM..._if(remain <= p_tcb2->tickremain)
文章浏览阅读324次,点赞10次,收藏7次。其在 SOT23 封装下,具有较低的开关电阻和高的额定电流,适用于需要高性能功率开关的电路设计。2. **电池管理系统:** 在需要 P—Channel MOSFET 的电池管理系统中,AO3421-VB 可以用于电池充放电控制等方面。1. **电源模块:** 由于 AO3421-VB 具有较低的开关电阻和适当的电流承受能力,可以用于电源模块中的功率开关电路。3. **DC-DC 变换器:** 适用于需要高效率的 DC-DC 变换器设计,提供电源转换功能。- 阈值电压: Vth = -1V。