Spring-boot 2.6.x新特性

一、引子

自Spring-boot 2.6.0发以来,还没来得及深入研究下其新特性,直到朋友问起关于Spring循环依赖时正好使用了最新版本的Spring-boot,讲解过程中编写的示例代码运行出错:

┌─────┐
|  a (field private com.demo.TestB com.demo.TestA.b)
↑     ↓
|  b (field private com.demo.TestA com.demo.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 2.6新特性

下面列举几个自认觉得需要注意的新特性,详细的新特性参见spring官网呈现:Spring boot 2.6 新特性

1、默认禁止了循环依赖

关于Spring的循环依赖问题,也是面试中频繁遇到的问题之一。通常情况下一个合理的设计是完全可以避免对象的循环依赖的,但是也不能排除会有那么些奇葩的情况会出现循环依赖,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.yml中配置allow-circular-referencestrue,程序依然可以正常启动:

spring:
    main: 
        allow-circular-references: true

2、嵌入了MongoDB

若要使用嵌入式 MongoDB,现在必须设置spring.mongodb.embedded.version属性(即指定使用的MongoDB版本号),确保嵌入式支持使用的 MongoDB 版本与应用程序将在生产中使用的 MongoDB 版本相匹配。

spring:
    mongodb.embedded.version: 3.12.7

3、网络资源配置

直接注入不再有效,改为ResourcesWebPropertiesWebProperties注入。

4、删除了几个依赖关系

  • JBoss Transaction SPI
    如果项目需要,需要自行引入依赖:org.jboss:jboss-transaction-spiorg.jboss:jboss-transaction-spi
  • Nimbus DS
    如果项目需要,需要自行引入依赖:com.nimbusds:oauth2-oidc-sdkicom.nimbusds:nimbus-jose-jwt
  • HAL Browser
    如果项目需要,需要自行引入依赖:org.webjars:hal-browserorg.webjars:hal-browser

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

请求路径与 Spring MVC 处理映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser。你可以设置spring.mvc.pathmatch.matching-strategy为ant-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、端点现在可以在密钥下公开 Java 运行时信息

如下:

{
  "java": {
    "vendor": "Zulu",
    "version": "17",
    "runtime": {
      "name": "OpenJDK Runtime Environment",
      "version": "25.292-b10"
    },
    "jvm": {
      "name": "OpenJDK 64-Bit Server VM",
      "vendor": "Zulu",
      "version": "25.292-b10"
    }
  }
}

7、其他变化

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

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

### 解决Spring Boot项目中配置MVC依赖时报错的方法 在Spring Boot项目中,当遇到配置`spring-webmvc`依赖时发生错误的情况,通常是因为版本不兼容或者配置文件中的设置不当引起的。对于这类问题,可以采取以下措施来排查并解决问题。 #### 检查依赖管理 确保项目的构建工具(如Maven或Gradle)正确声明了所需的依赖项,并且这些依赖项之间不存在冲突。特别是要注意不同库之间的版本兼容性[^2]。例如,在POM.xml中添加如下所示的`spring-boot-starter-web`依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 此依赖会自动引入必要的组件,包括`spring-webmvc`。 #### 更新至最新稳定版 考虑到Spring Boot不断更新迭代,某些旧版本可能存在已知缺陷。因此建议尽可能使用最新的稳定发布版本,这有助于减少由于框架内部变化带来的潜在风险。同时也要注意所使用的其他第三方库是否支持当前选用的Spring Boot版本[^4]。 #### 修改默认行为 自Spring Boot 2.6起,默认情况下启用了新的路径模式解析器(PathPatternParser),它替代了之前的Ant风格路径匹配机制(AntPathMatcher)。如果应用程序依赖于特定的URL映射规则,则可能需要调整相应的配置以适应新特性。可以通过修改application.properties或application.yml文件实现这一点: ```yaml spring.mvc.pathmatch.matching-strategy=ant_path_matcher ``` 上述配置可恢复到传统的Ant风格路径匹配方式。 #### 处理Bean创建异常 针对可能出现的循环引用导致的`BeanCurrentlyInCreationException`错误,可以在启动类或其他合适位置通过编程手段禁用对指定类型的懒加载属性注入功能;另外一种方法是在bean定义处显式标注@Lazy注解,从而推迟实例化时机直至首次访问为止。 ```java @Configuration public class AppConfig { @Bean public SomeService someService() { return new SomeServiceImpl(); } } ``` 以上就是关于如何处理Spring Boot项目里配置MVC依赖时发生的报错情况的一些指导方针。当然实际操作过程中还需要结合具体场景灵活应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值