SpringBoot 2.6.0发布:禁止循环依赖,还有哪些实用的更新?

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: SpringBoot 2.6.0发布:禁止循环依赖,还有哪些实用的更新?

Spring Boot 2.6.0已经正式发布,快看看作了哪些升级。


1、禁止了循环依赖


循环依赖问题一直困扰大家,也是面试常问题目之一,对循环依赖不了解的可以看这篇:Spring高频面试题:如何解决循环依赖问题


Spring Boot 2.6.0之后,如果程序中存在循环依赖问题,启动上就会失败,报错:


┌─────┐
|  a (field private com.zhiyin.TestB com.zhiyin.TestA.b)
↑     ↓
|  b (field private com.zhiyin.TestA com.zhiyin.TestB.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 Boot也提供了折中解决办法,在报错信息中已经明示:


As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.


需要我们在配置文件application.properties里加上这个属性:


spring.main.allow-circular-references = true


程序依然可以正常启动。


2、新增自定义脱敏规则


Spring Boot 2.6.0 支持/env端点和configprops配置属性的自定义脱敏,自定义SanitizingFunction类型的Bean即可实现,如下:


@Bean
public SanitizingFunction pwdSanitizingFunction() {
    return data -> {
        org.springframework.core.env.PropertySource<?> propertySource = data.getPropertySource();
        String key = data.getKey();
        // 仅对redis.properties里面的某些key做脱敏
        if (propertySource.getName().contains("redis.properties")) {
            if (key.equals("redis.pwd")) {
                return data.withValue(SANITIZED_VALUE);
            }
        }
        return data;
    };
}


对于部分数据脱敏,这个改进非常灵活,很有用。


3、Redis自动开启连接池


在2.6.0之前的版本,配置Redis时是否启用连接池是由使用者指定,2.6.0之后是默认开启,如果需要关闭,则需要配置:


spring.redis.jedis.pool.enabled = false


或者


spring.redis.lettuce.pool.enabled = false


说明Spring Boot支持大家使用Redis连接池。


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


开发人员可以使用 WebTestClient 在模拟环境中测试程序,只需要在Mock环境中使用 @AutoConfigureMockMvc 注释,就可以轻松注入 WebTestClient。,省去编写测试程序。


5、默认使用全新匹配策略


请求路径与 Spring MVC 处理映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser。你可以设置spring.mvc.pathmatch.matching-strategyant-path-matcher来改变它。


2.6.0之前:


public static class Pathmatch {
 private MatchingStrategy matchingStrategy = 
               MatchingStrategy.ANT_PATH_MATCHER;
}


2.6.0之后:


public static class Pathmatch {
 private MatchingStrategy matchingStrategy = 
               MatchingStrategy.PATH_PATTERN_PARSER;
}


两者差异上:PathPattern去掉了Ant字样,但保持了很好的向下兼容性:除了不支持将**写在path中间之外,其它的匹配规则从行为上均保持和AntPathMatcher一致,并且还新增了强大的{*pathVariable}的支持。


6、增强了/info管理端点,加上了Java运行时信息


如下:


{
  "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"
    }
  }
}


7、其他变化


  • Servlet应用现在支持在Cookie中添加SameSite。
  • 支持在主端口或管理端口上配置健康组。
  • 在 Spring Boot 2.4 中弃用的类、方法和属性已在此版本中删除。
  • 支持 Log4j2 复合配置
  • 支持构建信息属性排除


另外需要注意的是,Spring Boot每年会在5月份和11月份发布两个中型版本,每个中型版本提供1年的免费支持,那也就意味着2.4.x已经停止了版本停止(免费)支持。不过对本次版本更新点有所了解即可,等待下次大版本更新再去学,一更新马上用新的实在学不动~~


参考:


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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7月前
|
Java 关系型数据库 MySQL
Springboot中如何进行依赖管理
Springboot中如何进行依赖管理
|
5月前
|
Java Maven
SpringBoot第一次导入项目,Maven依赖全爆红,该怎样解决,idea2019.3版本,必须用application2.7.6或者以下
SpringBoot第一次导入项目,Maven依赖全爆红,该怎样解决,idea2019.3版本,必须用application2.7.6或者以下
|
6月前
|
缓存 Java 数据库
springboot数据库及缓存常用依赖及配置
springboot数据库及缓存常用依赖及配置
|
5月前
|
Java 数据库连接 mybatis
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
|
6月前
|
缓存 Java 微服务
Springboot微服务整合缓存的时候报循环依赖的错误 两种解决方案
Springboot微服务整合缓存的时候报循环依赖的错误 两种解决方案
83 1
|
6月前
|
SpringCloudAlibaba Cloud Native Dubbo
SpringBoot和SpringCloud,SpringCloudAlibaba版本依赖关系
由于 Spring Boot 3.0,Spring Boot 2.7~2.4 和 2.4 以下版本之间变化较大,目前企业级客户老项目相关 Spring Boot 版本仍停留在 Spring Boot 2.4 以下,为了同时满足存量用户和新用户不同需求,社区以 Spring Boot 3.0 和 2.4 分别为分界线,同时维护 2022.x、2021.x、2.2.x 三个分支迭代。如果不想跨分支升级,如需使用新特性,请升级为对应分支的新版本。 为了规避相关构建过程中的依赖冲突问题,我们建议可以通过 云原生应用脚手架 进行项目创建。
345 0
SpringBoot和SpringCloud,SpringCloudAlibaba版本依赖关系
|
5月前
|
Java 文件存储
软件开发常用之SpringBoot文件上传和下载功能(上){fileName},利用hutool提供的依赖,拿到当前目录的路径,System.getProperty从变量获取路径 ,不存在就用mkdi
软件开发常用之SpringBoot文件上传和下载功能(上){fileName},利用hutool提供的依赖,拿到当前目录的路径,System.getProperty从变量获取路径 ,不存在就用mkdi
|
5月前
|
Java Maven Spring
Spring Boot中的依赖管理策略
Spring Boot中的依赖管理策略
|
6月前
|
Java
SpringBoot起步依赖原理分析
SpringBoot起步依赖原理分析
|
6月前
|
Java Linux
springboot打包部署,分离依赖减少上传体积
springboot打包部署,分离依赖减少上传体积