springboot netty给特定客户端推送_Spring Boot 又升级了?2.0 你搞懂了吗?!

2eb123574be97558326b3c31f02ff794.png

【小宅按】作为知名互联网公司都在用的技术,Spring Boot 2.0 的更新引起了很大的关注,本文将分为三部分解读 2.0 的更新:

  • 第一类,基础环境升级;
  • 第二类,默认软件替换和优化;
  • 第三类,新技术的引入。

一. 基础环境升级

Spring Boot 2.0 要求 Java 8 作为最低版本,许多现有的 API 已更新,以利用 Java 8 的特性。如果你正在使用 Java 7 或更早版本,则在开发 Spring Boot 2.0 应用程序之前,需要升级你的 JDK。

依赖组件升级:

Spring Boot 2.0 基于 Spring Framework 5 构建,Spring Boot 升级依赖的第三方组件,主要有以下几个:

  • Jetty 9.4,Jetty 是一个开源的 Servlet 容器,它为基于 Java 的 Web 内容,例如 JSP 和 Servlet 提供运行环境。Jetty 是使用 Java 语言编写的,它的 API 以一组 JAR 包的形式发布。
  • Tomcat 8.5,Apache Tomcat 8.5.x 旨在取代 8.0.x,完全支持 Java 9。
  • Flyway 5,Flyway 是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway 可以像 SVN 管理不同人的代码那样,管理不同人的 SQL 脚本,从而做到数据库同步。
  • Hibernate 5.2,Hibernate 是一款非常流行的 ORM 框架。
  • Gradle 3.4,Spring Boot 的 Gradle 插件在很大程度上已被重写,有了重大的改进。
  • Thymeleaf 3.0,Thymeleaf 3 相对于 Thymeleaf 2 有非常大的性能提升。

二. 默认软件替换和优化

HikariCP:

默认连接池已从 Tomcat 切换到 HikariCP,HikariCP 是一个高性能的 JDBC 连接池,Hikari 是日语“光”的意思。

HikariCP 号称是 Java 业界最快的数据库连接池,官网提供了 c3p0、dbcp2、tomcat、vibur 和 Hikari 等数据连接池的性能对比。

1ca6c313ec4d4c013b82de10f0ca88db.png

Security:

Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的 Security 框架。除了常规的 Authentication 和 Authorization 之外,Spring Security 还提供了诸如 ACLs、LDAP、JAAS、CAS 等高级特性以满足复杂场景下的安全需求。

没有使用 Spring Boot 之前集成起来相对比较麻烦,而 Spring Boot 中基于 Java 配置实现 Spring Security 功能。Spring Boot 2.0 极大地简化了默认的安全配置,并使添加定制安全变得简单。

Spring Boot 2.0 非常容易使用 Spring Security 5.0 保护响应式应用,当检测到 Spring Security 存在的时候会自动进行默认配置。

OAuth 2.0:

OAuth 2.0 关注客户端开发者的简易性。要么通过组织在资源拥有者和 HTTP 服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。

OAuth 2.0 是一个授权框架,或称授权标准,它可以使第三方应用程序或客户端获得对 HTTP 服务上(如 Google、GitHub )用户帐户信息的有限访问权限。OAuth 2.0 通过将用户身份验证委派给托管用户帐户的服务以及授权客户端访问用户帐户进行工作。

Spring Boot 2.0 将 Spring Security OAuth 项目迁移到 Spring Security。不再提供单独的依赖包,Spring Boot 2.0 通过 Spring Security 5 提供 OAuth 2.0 客户端支持。

Micrometer:

Micrometer 是一款监控指标的度量类库,可以让你在没有供应商锁定的情况下对 JVM 的应用程序代码进行调整。Spring Boot 2.0 增强了对 Micrometer 的集成,不再提供自己的指标 API。依靠 http://micrometer.io 来满足所有应用程序监视需求。

Micrometer 包括尺寸指标的支持,当与尺寸监测系统配对时,尺寸指标可以有效访问特定的指定度量标准,并且可以在其尺寸范围内向下钻取。

指标可以输出到各种系统和开箱即用的 Spring Boot 2.0,为 Atlas、Datadog、Ganglia、Graphite、Influx、JMX、New Relic、Prometheus、SignalFx、StatsD 和 Wavefront 提供支持,另外还可以使用简单的内存中度量标准。

集成后提供 JVM 指标(包括 CPU、内存、线程和 GC)、Logback、Tomcat、Spring MVC & 提供 RestTemplate。

Redis 方面默认引入了 Lettuce,替代了之前的 Jedis 作为底层的 Redis 连接方式

Lettuce 是一个可伸缩的线程安全的 Redis 客户端,用于同步、异步和反应使用。支持先进的 Redis 功能,如 Sentinel、集群、流水线、自动重新连接和 Redis 数据模型。

配置属性绑定:

在 Spring Boot 2.0 中,使用 Environment 绑定机制的 @ConfigurationProperties 数学已经完全彻底修改。借此机会收紧了绑定的规则,并修复了 Spring Boot 1.x 中的许多不一致之处。

新的 Binder API 也可以直接使用 @ConfigurationProperties 在代码中。例如,下面绑定 List 中的 PersonName 对象:

List<PersonName> people = Binder.get(environment).bind("my.property", Bindable.listOf(PersonName.class)).orElseThrow(IllegalStateException::new);

配置源可以像这样在 YAML 中表示:

my:property:- first-name: Jane    last-name: Doe- first-name: John    last-name: Doe

Actuator 改进:

在 Spring Boot 2.0 中 Actuator endpoints 有很大的改进,所有 HTTP Actuator endpoints 现在都在该/actuator路径下公开,并且生成的 JSON 有效负载得到了改进。

现在默认情况下不会暴露很多端点。如果你要从 Spring Boot 1.5 升级现有的应用,请务必查看迁移指南并特别注意该 management.endpoints.web.exposure.include 属性。Spring Boot 2.0 改进了从许多端点返回的 JSON 有效负载。

现在许多端点都具有更精确地反映底层数据的 JSON。例如,/actuator/conditions终端(/autoconfig在 Spring Boot 1.5 中)现在有一个顶级 contexts 密钥来将结果分组 ApplicationContext。

三. 新技术的引入

支持 HTTP/2:

HTTP/2 是第二代的 HTTP 协议,Spring Boot 的 Web 容器选择中 Tomcat,Undertow 和 Jetty 均已支持 HTTP/2。相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化:

  • HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。
  • HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量;而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源;头压缩能够很好的解决该问题。
  • 多路复用,直白的说就是所有的请求都是通过一个 TCP 连接并发完成。HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。
  • Server Push:服务端能够更快的把资源推送给客户端。例如,服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求,当客户端需要的时候,它已经在客户端了。

嵌入式 Netty 服务器:

由于 WebFlux 不依赖于 Servlet API,我们现在可以首次为 Netty 作为嵌入式服务器提供支持,该 spring-boot-starter-webflux 启动 POM 将拉取 Netty 4.1 和 Ractor Netty。

注意:你只能将 Netty 用作反应式服务器,不提供阻止 Servlet API 支持。

Kotlin的支持:

Spring Boot 2.0 现在包含对 Kotlin 1.2.x 的支持,并提供了 runApplication,一个使用 Kotlin 运行 Spring Boot 应用程序的方法。我们还公开和利用了 Kotlin 对其他 Spring 项目(如 Spring Framework,Spring Data 和 Reactor)已添加到其最近版本中的支持。

响应式编程:

WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring WebFlux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好。

非阻塞的关键预期好处是能够以小的固定数量的线程和较少的内存进行扩展。在服务器端 WebFlux 支持两种不同的编程模型:

  • 基于注解的 @Controller 和其他注解也支持 Spring MVC;
  • Functional 、Java 8 Lambda 风格的路由和处理。

c62d853c77ba8875a29be8e4ad37d383.png

默认情况下,Spring Boot 2.0 使用 Netty WebFlux,因为 Netty 在异步非阻塞空间中被广泛使用,异步非阻塞连接可以节省更多的资源,提供更高的响应度。

Spring Boot 2.0 也提供了对响应式编程的自动化配置,如 Reactive Spring Data、Reactive Spring Security 等。

更多精彩内容,请滑至顶部点击右上角关注小宅哦~

ff98f61dfd1b678ef24cfcfc66355356.gif

来源:纯洁的微笑 GitChat精品课

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSI七层模型与TCP/IP五层模型详解

博主是搞是个FPGA的&#xff0c;一直没有真正的研究过以太网相关的技术&#xff0c;现在终于能静下心学习一下&#xff0c;希望自己能更深入的掌握这项最基本的通信接口技术。下面就开始搞了。 一、OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。…

android 自定义表情包,android基于环信的聊天和表情自定义

环信sdk的导入自定义聊天界面此处只有静态图&#xff0c;请谅解。自定义表情发送自定义聊天界面简单说下自定义的聊天界面&#xff0c;一个带有recyclerview和的xml文件&#xff0c;和对应的adapter即可。recyclerview为展示聊天信息。通过EMClient.getInstance().chatManager(…

erlang安装_RabbitMQ的使用(一)- RabbitMQ服务安装

作者&#xff1a;markjiang7m2博客园地址&#xff1a;https://www.cnblogs.com/markjiang7m2/p/12769627.html官网地址&#xff1a;http://letyouknow.netRabbitMQ&#xff0c;消息队列的一个中间件&#xff0c;这里不打算展开介绍了。此文意在记录工作中使用RabbitMQ时的过程及…

NodeJS React 开发环境搭建

1、首先需要安装NodeJS环境&#xff0c;下载NodeJS安装程序安装即可。 NodeJS下载地址&#xff1a; https://nodejs.org/en/download/ 2、安装NodeJS的web框架express npm install express-generator -g 3、创建项目 express studyReact 4、添加jsx引擎支持 npm install ex…

dreamweaver 正则表达式为属性值加上双引号_Python正则表达式(一)

Python正则表达式正则表达式是处理字符串的强大工具&#xff0c;拥有独特的语法和独立的处理引擎。我们在大文本中匹配字符串时&#xff0c;有些情况用str自带的函数(比如find, in)可能可以完成&#xff0c;有些情况会稍稍复杂一些(比如说找出所有“像邮箱”的字符串&#xff0…

mapperscan注解_SpringBoot 遗忘后的简单快速回忆之环境搭建与常见注解

原文作者&#xff1a;笑而抿之乎搭建SpringBoot环境&#xff0c;创建maven 项目后1&#xff0c;创建入口类&#xff1a;MapperScan(basePackages "com.baizhi.dao" ) //把dao层交给工厂管理SpringBootApplication//标识入口类的注解public class Applincation { …

Android插件丢失怎么办,Android studio推荐插件以及升级后插件丢失问题解决

1、android-butterknife-zeleznyandroid-butterknife-zelezny 是根据butterknife定制的一款插件&#xff0c;能够方便快速初始化&#xff0c;对于我来说是开发必备&#xff0c;本人也对此插件进行了一些优化&#xff0c;个人感觉用起来更爽 &#xff0c;博客地址&#xff1a;Bu…

软工团队 - 系统设计

软工团队 - 系统设计 修改完善需求规格说明书 针对栋哥在上周答辩中主要提到问题的相应改动 管理员层面没有在需求中得到很好的体现。没有手机号验证。那时候回答的比较含糊orz&#xff0c;所以在这里说明一下对此作出的解释和修改。 对于第一点&#xff0c;我们讨论的结果是至…

python decimal_python学习笔记一

1、~4不太明白、右移、左移整体移动添加零2、注意运算符&#xff0c;3、1<<5&716&704、set中的pop() 方法用于随机移除一个元素。字典中&#xff1a;list中5、Python dir() 函数dir()函数不带参数时&#xff0c;返回当前范围内的变量、方法和定义的类型列表&…

java基础基础总结----- Date

前言&#xff1a;其实在学习这个的时候&#xff0c;自我感觉学到什么直接查询API就可以了&#xff0c;没有必要再去研究某个方法怎么使用&#xff0c; 重点学习一下经常用到的方法。感觉自己的写的博客&#xff0c;就跟自己的笔记一样&#xff0c;用的是时候&#xff0c;就能快…

pandas object转float_Pandas中文官档~基础用法6

呆鸟云&#xff1a;“这一系列长篇终于连载完了&#xff0c;还请大家关注 Python 大咖谈&#xff0c;这里专注 Python 数据分析&#xff0c;后期呆鸟还会给大家分享更多 Pandas 好文。”数据类型大多数情况下&#xff0c;pandas 使用 Numpy 数组、Series 或 DataFrame 里某列的…

android studio 拉取分支,AndroidStudio中使用Git-高级篇(二)——新建分支(branch)和拉取请求(Pull request)...

前段时间写过一篇文章介绍如何在AndroidStudio使用上传项目到github&#xff0c;今天接着给大家带来了他的高级篇——新建分支(branch)和拉取请求(Pull request)。在真正的开发中我们很少写完代码commit后直接push代码上去&#xff0c;因为这样做没有经过第二个人的审核&#x…

collection转换为list_JAVA 集合 接口继承关系和实现,List,Set,Map(总结)

一. JAVA 集合1.接口继承关系和实现集合类存放于 Java.util 包中&#xff0c;主要有 3 种&#xff1a;set(集&#xff09;、list(列表包含 Queue&#xff09;和 map(映射)。1. Collection&#xff1a;Collection 是集合 List、Set、Queue 的最基本的接口。2. Iterator&#xff…

lazarus开发android应用程序指南,Lazarus开发Android应用程序指南(2)

本指南版权由delphicn所有&#xff0c;QQ&#xff1a;1339838080(tom)&#xff0c;转载请保留版权信息。文中难免有错&#xff0c;欢迎指正。2&#xff0e;编译运行lazarus中的Android示例程序。lazarus安装包中自带示例是在lazarus/examples/androidlcl/androidlcltest.lpi 。…

plsqldevelop安装教程

一、下载并解压压缩包&#xff0c;解压后有如下文件&#xff1a; 二、运行PLSQL Developer10.0.5.1710.exe文件&#xff0c;可以修改文件安装路径&#xff0c;然后一直下一步下一步就可以了; 三、运行软件汉化包PLSQL Developer10.0.5.1710_CHS.exe&#xff0c;不用管一直下一步…

java优先队列_Java高级特性增强-多线程

请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigData大数据成神之路系列&#xff1a;请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigDataJava高级特性增强-集合Java高级特性增强-多线程Java高级特性增强-SynchronizedJava高级特性增强-vola…

理解JS的6种继承方式

【转】重新理解JS的6种继承方式 写在前面 一直不喜欢JS的OOP&#xff0c;在学习阶段好像也用不到&#xff0c;总觉得JS的OOP不伦不类的&#xff0c;可能是因为先接触了Java&#xff0c;所以对JS的OO部分有些抵触。 偏见归偏见&#xff0c;既然面试官问到了JS的OOP&#xff0c;那…

android 滚动列表框,建立滚动列表框

另一个可代替一组单选按钮及复选框的是滚动列表框(见图6.9)。使用滚动列表框&#xff0c;你可以建立一个选项列表&#xff0c;用户可以从中选择一个或多个选项。你可以使用建立下拉式列表框的标识符来建立一个滚动列表框&#xff0c;只是使用不同的属性。下面是个例子&#xff…

collection集合 多少钱_面试必备-Java集合框架

Java集合框架面试题常见集合集合可以看作是一种容器&#xff0c;用来存储对象信息。 数组和集合的区别&#xff1a; &#xff08;1&#xff09;数组长度不可变化而且无法保存具有映射关系的数据&#xff1b;集合类用于保存数量不确定的数据&#xff0c;以及保存具有映射关系的数…

html鼠标滚动图片折叠,鼠标滑过图片3D折叠效果

本教程我们将使用CSS3 3D transforms和jQuery来制作一个神奇的3D折叠效果。在我们的demo中&#xff0c;图片在鼠标滑过的时候被折叠&#xff0c;空出来的部分将显示图片的一些信息。我们将创建一个放置图片html结构&#xff0c;当鼠标滑过它时&#xff0c;使用jQuery来将折叠或…