昨天,Spring官方正式发布了Spring Boot今年最后一个特性版本:2.6.0

同时,也宣布了2.4.x版本的终结。

那么这个新版本又带来了哪些新特性呢?下面就一起跟着DD来看看吧!

重要特性

1. Servlet应用支持在 Cookie 中配置 SameSite 属性

该属性可通过server.session.cookie.same-site属性来配置,共有三个可选值:

  • Strict 严格模式,必须同站请求才能发送 cookie

  • Lax 宽松模式,安全的跨站请求可以发送 cookie

  • None 禁止 SameSite 限制,必须配合 Secure 一起使用

2. 支持为主应用端口和管理端口配置健康组

这在 Kubernetes 等云服务环境中很有用。在这种环境下,出于安全目的,为执行器端点使用单独的管理端口是很常见的。拥有单独的端口可能会导致不可靠的健康检查,因为即使健康检查成功,主应用程序也可能无法正常工作。

以往传统的配置会将所有Actuator端点都放在一个单独的端口上,并将用于检测应用状态的健康组放在主端口的附加路径下。

3. 增强/info端点,加入Java Runtime信息

增强后的例子:

{"java": {"vendor": "BellSoft","version": "17","runtime": {"name": "OpenJDK Runtime Environment","version": "17+35-LTS"},"jvm": {"name": "OpenJDK 64-Bit Server VM","vendor": "BellSoft","version": "17+35-LTS"}}
}

该信息可以通过这个属性开启或关闭:

management.info.java.enabled=true

4. 支持使用WebTestClient来测试Spring MVC

开发人员可以使用 WebTestClient 在模拟环境中测试 WebFlux 应用程序,或针对实时服务器测试任何 Spring Web 应用程序。

这次增强后,开发者可以在Mock环境中使用 @AutoConfigureMockMvc 注释的类,就可以轻松注入 WebTestClient。 这样编写测试就比之前容易多了。

5. 增加spring-rabbit-stream的自动化配置

这次更新添加了 Spring AMQP 的新 spring-rabbit-stream 模块的自动配置。

当spring.rabbitmq.listener.type属性设置为stream时, StreamListenerContainer 是自动配置的。

spring.rabbitmq.stream.*属性可用于配置对broker的访问,spring.rabbitmq.listener.stream.native-listener 可用于启用native listener

6. 支持/env端点和configprops配置属性的自定义脱敏

虽然 Spring Boot 之前已经可以处理 /env 和 /configprops 端点中存在的敏感值,只需要可以通过配置属性来控制即可。但还有一种情况,用户可能希望根据属性源自哪个 PropertySource 来应用清理。

例如,Spring Cloud Vault 使用 Vault 来存储加密值并将它们加载到 Spring 环境中。由于所有值都是加密的,因此将整个属性源中的每个键的值脱敏是有意义的。可以通过添加类型为 SanitizingFunction 的 @Bean 来配置此类自定义脱敏规则。

顺手推荐一下我一直在连载的免费教程:http://blog.didispace.com/spring-boot-learning-2x/。

跟很多其他教程不同。这个教程不光兼顾了1.x和2.x版本。同时,对于每次的更新,都会选择一些相关内容修补Tips,所以对各种不同阶段的读者长期都会有一些收获。如果你觉得不错,记得转发支持一下!

同时,如果你对哪方面还有疑惑,或希望DD多做些什么例子到教程里,也欢迎留言催更,或点赞支持别人的催更内容!

其他变更

1. Reactive Session 个性化

当前版本可以动态配置 reactive session 的有效期

server.reactive.session.timeout=30

2. Redis 链接自动配置链接池

当应用依赖中包含 commons-pool2.jar 会自动配置 redis 链接池 (Jedis Lettuce 都支持)。如果你想关闭则通过如下属性:

spring.redis.jedis.pool.enabled=falsespring.redis.lettuce.pool.enabled=false

3. 构建信息个性化

  • 通过 spring-boot-maven-plugin 支持自动生成此次构建信息的 build-info.properties

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludeInfoProperties><excludeInfoProperty>version</excludeInfoProperty></excludeInfoProperties></configuration></plugin>

4. Metrics新增指标

应用启动的两个新指标:

application.started.time: 启动应用程序所需的时间application.ready.time:  启动应用到对外提供服务所需时间

磁盘空间的两个指标:

disk.free: 磁盘空闲空间disk.total: 磁盘总空间

5. Docker镜像的构建

增强docker-maven-plugin插件的功能:

  • 为自定义镜像设置tags标签

  • 网络配置参数,可用于Cloud Native Buildpacks的构建过程

  • 支持使用 buildCache 和 launchCache 配置参数自定义用于缓存层的名称,这些层由构建包提供给构建的镜像

6. 移除 2.4 版本中的过期属性

由于2.4版本完成历史使命,因此有大量过期属性被移除,最近要升级的小伙伴一定要关注一下这部分内容,因为你原来的配置会失效!

关于Spring MVC 和 servlet 部分属性:

旧属性(已删除) 新属性
spring.web.locale spring.mvc.locale
spring.web.locale-resolver spring.mvc.locale-resolver
spring.web.resources.* spring.resources.*
management.server.base-path management.server.servlet.context-path

关于Elasticsearch属性的变更:

因为内容较多,这里就不完全贴出来了,有兴趣的可以看看文末参考资料中的官方信息。

7. 默认情况完全禁止Bean的循环引用

还记得前几天我发布的这篇:为什么IDEA不推荐你使用@Autowired ?

对于鼓励大家用构造器的方式,还受到了一些网友的嘲讽。那么在2.6.0之后,如果小伙伴依然觉得循环依赖无所谓,还坚持要用下面的这种模式:

那么,你将收获下面这样的报错:

┌─────┐
|  a (field private com.example.demo.B com.example.demo.A.b)
↑     ↓
|  b (field private com.example.demo.A com.example.demo.B.a)
└─────┘Action:Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

其实,Spring官方这样做,也是为了鼓励大家养成不要有循环依赖的好习惯。

但对于屎山项目,可能这样的要求对于开发者会很痛苦。所以,你也可以通过下面的配置,放开不允许循环依赖的要求:

spring.main.allow-circular-references=true

8. SpringMVC 默认路径匹配策略

Spring MVC 处理程序映射匹配请求路径的默认策略已从 AntPathMatcher 更改为PathPatternParser

Actuator端点现在也使用基于 PathPattern 的 URL 匹配。需要注意的是,Actuator端点的路径匹配策略无法通过配置属性进行配置。

如果需要将默认切换回 AntPathMatcher,可以将 spring.mvc.pathmatch.matching-strategy 设置为 ant-path-matcher,比如下面这样:

spring.mvc.pathmatch.matching-strategy=ant-path-matcher

好了,关于Spring Boot 2.6的版本解析到这里结束了。

最后,再推荐一下我一直在连载的免费教程:http://blog.didispace.com/spring-boot-learning-2x/。

跟很多其他教程不同。这个教程不光兼顾了1.x和2.x版本。同时,对于每次的更新,都会选择一些相关内容修补Tips,所以对各种不同阶段的读者长期都会有一些收获。如果你觉得不错,记得转发支持一下!

同时,如果你对哪方面还有疑惑,或希望DD多做些什么例子到教程里,也欢迎留言催更,或点赞支持别人的催更内容!

参考资料

  • https://spring.io/blog/2021/11/19/spring-boot-2-6-is-now-available

  • https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6.0-Configuration-Changelog

  • https://www.oschina.net/news/169783/spring-boot-2-6-0-released

往期推荐

一文教你如何高效使用 IDEA !

周杰伦新动作的老朋友是谁?程序员:送分题!

把iPhone充电口改成Type-C,卖了56万!

从“部队程序员”到“大厂程序员”,有什么不一样的体验?

腾讯员工干满15年可选择“提前退休”!

技术交流群

最近有很多人问,有没有读者交流群,想知道怎么加入。加入方式很简单,有兴趣的同学,只需要点击下方卡片,回复“加群“,即可免费加入我们的高质量技术交流群!

点击阅读原文,送你免费Spring Boot教程!

Spring Boot 2.6 正式发布:循环依赖默认禁止、增加SameSite属性...相关推荐

  1. Spring Boot 2.6.0 新特性默认禁止循环引用

    如下代码,ComponentA类注入ComponentB类,ComponentB类注入ComponentA类,就会发生循环依赖的问题,在2.6.0之前,spring会自动处理循环依赖的问题 impor ...

  2. Spring Boot 2.0选择HikariCP作为默认数据库连接池的五大理由

    转载自公众号:工匠小猪猪的技术世界 摘要: 本文非原创,是「工匠小猪猪的技术世界」搜集了一些HikariCP相关的资料整理给大家的介绍,主要讲解了为什么sb2选择了HikariCP以及HikariCP ...

  3. Spring Boot 2.0 正式发布

    转载自 重磅:Spring Boot 2.0 正式发布! Spring Boot 2.0 正式发布! 2018/03/01最新消息,传得沸沸扬扬的Spring Boot 2.0 正式发布了. 小编去看 ...

  4. 厉害了!Spring Boot 2.5正式发布

    今天Spring Boot 2.5正式发布了,支持Java 16,增强了Docker镜像构建功能,而且提供了初始化数据源的新机制.   基于Spring Boot 2.4的变动 Sql脚本初始化数据源 ...

  5. 不懂就问,Spring 是如何判定原型循环依赖和构造方法循环依赖的?

    作者:青石路 cnblogs.com/youzhibing/p/14514823.html 写在前面 Spring 中常见的循环依赖有 3 种:单例 setter 循环依赖.单例构造方法循环依赖.原型 ...

  6. Spring源码 IOC和循环依赖AOP

    Spring源码 IOC和循环依赖AOP IOC篇 1.BeanFactory IOC容器,以BeanFactory为载体. BeanFactory,是Spring容器.这是由Spring管理,产生S ...

  7. Spring中-IOC-Bean的初始化-循环依赖的解决

    前言 在实际工作中,经常由于设计不佳或者各种因素,导致类之间相互依赖.这些类可能单独使用时不会出问题,但是在使用Spring进行管理的时候可能就会抛出BeanCurrentlyInCreationEx ...

  8. Spring源码分析系列-循环依赖和三级缓存

    目录 循环依赖 多级缓存 一级缓存 二级缓存 当循环依赖遇上AOP 三级缓存 Spring三级缓存源码实现 总结 循环依赖   BeanFactory作为bean工厂管理我们的单例bean,那么肯定需 ...

  9. Spring使用三级缓存解决循环依赖?终于完全弄明白了

    文章阅读前推荐 推荐先去看看源码,源码很短,但是对于我们在脑子里构建一个完整思路很重要.看起来非常简单,只需要双击shift,全局查找文件:AbstractAutowireCapableBeanFac ...

最新文章

  1. python 在内网windows环境下pip三方包
  2. redis介绍及保持session会话
  3. Linux上安装Bugfree系统
  4. python时间序列动图_python中如何用matlibplot画时间序列图?
  5. SpringMVC-Controller怎么直接在页面上传递参数
  6. mysql能否在手机端运行_在手机上安装linux并部署mysql,jupyter用于数据探索
  7. 第四十三期:Wireshark网络分析就这么简单,你一定会喜欢的技巧
  8. 移动开发解决方案之玩转输入框
  9. HTTP之Cookie
  10. opencv表面缺陷检测_机器视觉表面缺陷检测 光学元件瑕疵检测
  11. (转载)用C#实现MySQL建库及建表
  12. css权威指南 读书笔记
  13. 微信小程序添加使用外部字体
  14. Gallery3D笔记
  15. iomega ix2 Android,Lenovo Iomega ix2共享功能_联想 IOMEGA IX2_服务器评测与技术-中关村在线...
  16. 乐鑫ESP32-C3开发(一)简述和目录
  17. SSH协议弱加密算法漏洞的利用及复现(中间人攻击)
  18. 微信公众号开发中分享功能 分享微信朋友圈/微信好友
  19. 【计算机网络】吞吐量与瓶颈链路
  20. LeetCode题解(0657):根据操作列表判断机器人是否能回到原点(Python)

热门文章

  1. python 列表生成式
  2. 基于catalog 创建RMAN存储脚本
  3. golang 实现 while 和 do……while 循环
  4. CloudFlare 免费CDN加速 使用方法
  5. golang 字符串比较 不区分大小写
  6. linux sed 替换、删除文件中的某个字符串
  7. docker build 指定dockerfile
  8. Linux查看ip的命令详解
  9. TCP/IP 协议简单分析
  10. 调用 fork() 两次以避免僵死进程