undertow

Spring Boot 太狠了,一口气发布了 3 个版本!

南笙酒味 提交于 2020-11-08 15:41:24
上一篇: Spring Boot 太狠了,一次性发布了 3 个版本! Spring Boot 这么狠的么,每次连发三个版本,Spring Boot 比 Java 还要版本帝啊。 老铁们,栈长我都学不过来了啊。 这三个版本分别是: 2.3.4 , 2.2.10 , 2.1.17 ,这三个版本的具体区别这篇不展开了,点击 这里 看下我上篇发布的吧。 Maven 中央仓库也已经上了: 从 Maven 中央仓库来看,Spring Boot 2.3 系列被引用率非常低啊,基本没什么用。 下面栈长照旧解读下更新: 这 3 个版本主要修复了一系列个bug,其中还包括框架的性能提升、文档改进、依赖升级等。 需要注意的是:这 3 个版本依赖的 Spring 框架中都共同包含了一个安全漏洞的修复: CVE-2020-5421 。 漏洞描述: 在 Spring 框架 5.2.0 - 5.2.8、5.1.0 - 5.1.17、5.0.0 - 5.0.18、4.3.0 - 4.3.28,以及更老的不受支持的版本中,针对 CVE-2015-5211 漏洞攻击的保护可以通过在浏览器 URL 路径中使用 jsessionid 参数绕过。 严重程度很高,受影响的版本包括 Spring Framework: 5.2.0 ~ 5.2.8 5.1.0 ~ 5.1.17 5.0.0 ~ 5.0.18 4.3.0 ~ 4.3

Java 只有值传递!为什么?

若如初见. 提交于 2020-11-08 04:17:49
转自公众号:程序控 面试官爱问的一个基础问题: Java是值传递还是引用传递? 想必大家都对这个问题都有自己的看法,那到底事实是怎样的,我们又该如何回答面试官这个问题呢?今天咱们就来好好分析一波 值传递?引用传递? 首先,我们得先知道什么叫 值传递 ,什么叫 引用传递 ,知道这个才能理解Java到底如何做的。若想理解这两种传递需要先理解形式参数和实际参数两个概念 形式参数: 定义函数时使用的参数,用来接收函数传入参数,比如我们写个函数,函数中的参数为形式参数 (String str) { System..println(str)} 实际参数: 我们调用函数时,函数名后面括号中的参数称为实际参数,如下面例子所示 (String[] args) { A a = A()a.test()} 可以发现,当调用一个有参函数的时候,会把实际参数传递给形式参数;于是这个传递的过程便有两种情况,即 值传递和引用传递 值传递就是把参数的值给你,调用函数时将实际参数复制一份传递到函数中,这样函数内部对参数内部进行修改不会影响到实际参数;而引用传递就不一样了,它直接把参数的实际地址给调用函数了,函数内部可直接修改该地址内容,会影响到实际参数 我来举个例子,我司有一个数据库A,仅允许内部人员操作,现在有个项目需要和别的公司合作,该数据库的数据需要交给合作公司一份,我总不能直接把我司数据库A地址给他们

Maven POM文件基本介绍

心不动则不痛 提交于 2020-11-07 09:53:09
之前有介绍到maven的标准目录结构,也看到了maven的核心配置文件pom.xml文件,今天就解析这个配置文件。 maven工程的核心文件就是这个pom文件了,每个工程在创建的时候都会有一个pom.xml配置文件,这个文件就是maven配置依赖、插件,管理项目及构建的入口,所有的配置都会在这个文件里面,所以搞懂这个文件的基本配置是非常必要的。 如下图,列表了POM文件一系列配置项。 下面这些配置是POM文件基本不可缺少的配置项。 下在讲讲最基本用到的配置项吧。 modelVersion maven的模型版本,跟随maven定义,一般不能修改。 groupId 项目的组织,一般是顶级域名名称+公司或者组织名称,如alibaba的项目组织为com.alibaba,如果你们公司的域名为www.abc.com,那你们的项目组织最好就以com.abc命名。 artifactId 项目的名称,也是项目之间引进依赖的重要标识。像alibaba有个dubbo项目,dubbo项目可能又关联了许多子项目,所以artifactId就会定义有dubbo、dubbo-config这样的工程。 version 项目的版本,项目迭代开发,可能经历许多个版本,靠这个定义,默认是打包的组成部分,如dubbo-2.8.4.jar。另外,版本有两个概念,0.0.1-SNAPSHOT这样的是快照版本,0.0.1

Spring Boot如何支持嵌入式Servlet容器【详解】

﹥>﹥吖頭↗ 提交于 2020-10-28 02:44:08
前言: 这篇文章主要介绍了Spring Boot如何支持嵌入式Servlet容器,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。如果需要其他学习资料或教程的,可以 点击进入,暗号:csyy ,绝对免费提供!因为资料太多无法全部展示,这只是其中的一点点,需要学习的朋友,可以进来和其他小伙伴一起探讨学习! Spring Boot支持Tomcat、Jetty和Undertow三种Servlet容器嵌入到Web应用程序中,开发者使用starter即可方便嵌入,默认情况下,嵌入服务器的访问端口为8080。 1、Servlets、Filters & Listeners 这些组件可以同组件扫描注册,即把他们定义为Spring Bean。 默认情况下,如果只有一个servlet,则把它映射到/;如果有多个servlet,则加上bean name作为前缀然后映射到/*。 如果默认策略不能满足你,你可以通过ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean来完全控制。 如果Filter需要按顺序执行,则可以通过@Order注解定义Filter的顺序,或者实现Ordered接口。 容器初始化 嵌入式容器不会直接执行Servlet 3.0+ javax.servlet

IntegerCache的妙用和陷阱!

给你一囗甜甜゛ 提交于 2020-10-27 05:38:39
考虑下面的小程序,你认为会输出为什么结果? public class Test { public static void main(String\[\] args) { Integer n1 = 123; Integer n2 = 123; Integer n3 = 128; Integer n4 = 128; System.out.println(n1 == n2); System.out.println(n3 == n4); } } 答案如下: true false 是否和你预想的一致? 我们知道==比较的是对象的引用,那这里为什么会这出这种情况呢? 原理 首先这是JDK在1.5版本中添加的一项新特性,把-128~127的数字缓存起来了,用于提升性能和节省内存。所以这个范围内的自动装箱(相当于调用valueOf(int i)方法)的数字都会从缓存中获取,返回同一个数字,所以现在你理解为什么了吧。同时这也会给我们开发带来预想不到的陷阱,直得注意!! 而我们通过new Integer(1)这样就不会从缓存中获取,大家可以自行测试。 我们来翻看下jdk中Integer的源码 上面是IntegerCache的源码,把从-128~high放在缓存中 上面是valueOf的源码,先从缓存中获取,获取不到再new一个返回 从源码里面我们可以看到最小边界是-128,最大边界可以通过-XX

Spring Boot 2.3 优雅关闭新姿势,真香!

最后都变了- 提交于 2020-10-18 03:23:31
最新的 Spring Boot 2.3 发布快半个月了: https://spring.io/blog/2020/05/15/spring-boot-2-3-0-available-now 其中有个新特性叫: Graceful shutdown(优雅关闭) 之前也分享过这样的文章,现在竟然出品官方姿势了,新功能嘛,肯定得去官方看下,下面是官方的说明: Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. When a grace period is configured, upon shutdown, the web server will no longer permit new requests and will wait for up to the grace period for active requests to complete. 下面,栈长给大家总结下: 优雅关闭支持所有 4 个嵌入式 Web 服务器:Jetty, Reactor Netty, Tomcat, Undertow

牛掰!Spring Boot 2.3.0 新特性:如何优雅停机?

北城以北 提交于 2020-10-17 02:47:37
1.什么是优雅停机 先来一段简单的代码,如下: @RestController public class DemoController { @GetMapping("/demo") public String demo() throws InterruptedException { // 模拟业务耗时处理流程 Thread.sleep(20 * 1000L); return "hello"; } } 当我们流量请求到此接口执行业务逻辑的时候,若服务端此时执行关机 (kill),spring boot 默认情况会直接关闭容器(tomcat 等),导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况,事务逻辑不会回滚。 2.graceful shutdown 在最新的 spring boot 2.3 版本,内置此功能,不需要再自行扩展容器线程池来处理,目前 spring boot 嵌入式支持的 web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。我们来看下如何使用: 当使用 server.shutdown=graceful 启用时,在 web 容器关闭时,web 服务器将不再接收新请求,并将等待活动请求完成的缓冲期。 3.配置体验 此处支持的 shutdown

如何给springboot切换默认的Tomcat容器

别说谁变了你拦得住时间么 提交于 2020-08-20 07:34:12
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- Jetty as container--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> 以上依赖就是将默认的tomcat切换为jetty容器 还可以切换为undertow <dependency>

Mybatis使用mysql实现模糊查询

我只是一个虾纸丫 提交于 2020-08-18 15:29:37
在mysql环境下,使用mybatis实现模糊查询时报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='__frch_item_1', mode=IN, javaType=class java.lang.Long, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #4 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: Parameter index out of

Spring Boot (十四): 响应式编程以及 Spring Boot Webflux 快速入门

扶醉桌前 提交于 2020-08-16 23:22:41
1. 什么是响应式编程 在计算机中,响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。(了解源码可+求求: 1791743380) 例如,在命令式编程环境中,a=b+c 表示将表达式的结果赋给 a,而之后改变 b 或 c 的值不会影响 a 。但在响应式编程中,a 的值会随着 b 或 c 的更新而更新。 响应式编程是基于异步和事件驱动的非阻塞程序,只需要在程序内启动少量线程扩展,而不是水平通过集群扩展。 设想一个场景,从底层数据库驱动,经过持久层、服务层、MVC层中的model,到用户的前端界面的元素,全部都采用声明式的编程范式,从而搭建一条能够传递变化的管道,这样我们只要更新一下数据库中的数据,用户的界面上就相应的发生变化,从而无需前端轮询才能获取到最新的数据。 简单来讲,我们以前写的程序是阻塞式的,当一个请求任务过来时,线程会阻塞,等到这个任务完成后再返回出去。而响应式编程则是一个请求任务过来时,会有其他的线程去做处理,当任务执行结束后再异步的通知回去。 2. 为什么要使用响应式编程 在如今互联网时代的大背景下,Web应用通常要面对高并发、海量数据的挑战,性能从来都是必须要考量的核心因素。 阻塞便是性能杀手之一。