前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot 2.5 版本功能前瞻

SpringBoot 2.5 版本功能前瞻

作者头像
冷冷
发布2021-04-29 15:33:57
5910
发布2021-04-29 15:33:57
举报
文章被收录于专栏:冷冷冷冷

前言

目前 Spring Boot 2.5.0 RC1 已经发布,其开发团队表示将在 5 月 20 日正式 GA。我们梳理了一下大家比较关系和感兴趣的一些变更。

一、 运行端点变更

  1. Secure info endpoint(安全的 info 端点)

默认情况下/info端点不再对 web 公开。此外,如果引用了 Spring Security,则默认情况下端点需要经过身份验证才能访问。

  1. 优雅关机支持 GET 请求

我们流量请求到此接口执行业务逻辑的时候,若服务端此时执行关机 (kill),Spring boot 默认情况会直接关闭容器(tomcat 等),导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况,事务逻辑不会回滚。在 spring boot 2.3 版本,支持优雅停机功能。关于优雅停机可以参考笔者这篇文章Spring Boot 2.3 新特性优雅停机详解

  1. 记录停机日志

通过以下属性我们可以在 JVM 退出时候,记录资源释放日志等。

代码语言:javascript
复制
logging.register-shutdown-hook
  1. 新增 Quartz 的 Actuator Endpoint

Actuator 中新增了一个 /quartz端点。它提供了有关Quartz作业和触发器的详细信息。

  • 访问 /actuator/quartz
代码语言:javascript
复制
$ curl 'http://localhost:8080/actuator/quartz' -i -X GET
  • 返回应用配置的任务信息
代码语言:javascript
复制
{
  "jobs" : {
    "groups" : [ "samples", "tests" ]
  },
  "triggers" : {
    "groups" : [ "samples", "DEFAULT" ]
  }
}

二、增强容器化功能

1、War 包支持分层

Spring Boot 的MavenGradle插件现在都允许您创建用于 Docker 的分层WARs。分层WARs的工作方式与 springboot 早期版本中提供的分层JAR支持类似。查看 Gradle 和 Maven 参考文档了解更多详细信息。

具体使用可以参考笔者的这篇文章「Spring Boot 2.3 新特性」分层 JAR

2、Buildpack 支持配置自定义

Spring Boot 2.42基于 Buildpack 推出了自己的 docker 构建工具 整合在原有的spring-boot-maven-plugin中,只需要配置对应目标仓库和主机信息即可完成镜像构建。具体使用可以参考笔者的这篇文章「Spring Boot 2.4 新特性」一键构建 Docker 镜像

spring boot 2.5 提供了更多的自定义能力,距离完全抛弃 Dockerfile 的日子更近了。

代码语言:javascript
复制
mvn spring-boot:build-image

三、Environment 前缀

spring boot 可以为系统环境变量指定前缀,以便可以在同一环境中运行多个不同的 Spring 引导应用程序。使用SpringApplication.setEnvironmentPrefix(…​)设置绑定属性时要使用的前缀。

例如,下面将添加myapp前缀:

代码语言:javascript
复制
SpringApplication application = new SpringApplication(MyApp.class);
application.setEnvironmentPrefix("myapp");
application.run(args);

现在,所有属性都需要一个前缀版本。例如,要更改服务器端口

代码语言:javascript
复制
server.port=8080  --> myapp.server.port=8080

四、Metrics 增强

    1. Metrics for Spring Data Repositories
    1. @Timed Metrics with WebFlux
    1. MongoDB Metrics

号外:mica 2.4.5 发布在即,全网唯一支持 druid 和 undertow 的 Metrics 指标。

五、HTTP/2 over TCP (h2c)

现在,Spring boot 支持四个嵌入式 Web 容器都已经支持基于 TCP(h2c)的 HTTP / 2 协议,无需进行任何手动自定义。如果要开启 h2c,只需将 server.http2.enabled 设置为 true,并将 server.ssl.enabled 设置为 false(默认 false)。

当然,微服务全栈 h2c 还需要打通 feign 和 RestTemplate 这种 http 客户端,h2c 我们 19 年就开始实践,详见:spring-cloud-java11

目前 Spring cloud gateway 的 client 也已经支持了 h2c 详见:

reactor-netty/issues/639

spring-cloud-gateway/issues/7

六、数据源相关增强

  1. 多数据源监控状态检测支持

AbstractRoutingDataSource主要作用于 Spring 多数据源,health端点现在显示目标数据源的运行状况。每个目标数据源都使用其路由 key 命名。与前面一样,要忽略运行状况端点中的路由数据源

代码语言:javascript
复制
management.health.db.ignore-routing-data-sources=true
  1. 数据源初始化脚本属性变更

低版本的 spring.datasource.init 现在统一变更为 spring.sql.init 。

代码语言:javascript
复制
 spring.datasource.init --> spring.sql.init

当然此属性也可以适用 R2DBC 数据初始化。

  1. 数据初始化重构

为了支持schema.sql以及data.sql初始化,SpringBoot2.5 中进行了重新设计。

如果在同一个应用程序中同时使用 JPA 和 springboot 的 SQL 脚本初始化,您可能会发现 Springboot2.5 存在一个排序问题。默认情况下,我们先运行schema.sql以及data.sql然后再进行 JPA 初始化。如果希望在 JPA 初始化之后再运行脚本,你可以添加下面的配置。

代码语言:javascript
复制
spring.datasource.initialization-order=after-jpa

最后

本文参与的小伙伴:张亚东(Jap 作者)、如梦技术(mica 作者)、冷冷(pig 作者)

欢迎大家投稿比较有深度、有意思的文章。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、 运行端点变更
  • 二、增强容器化功能
    • 1、War 包支持分层
      • 2、Buildpack 支持配置自定义
      • 三、Environment 前缀
      • 四、Metrics 增强
      • 五、HTTP/2 over TCP (h2c)
      • 六、数据源相关增强
      • 最后
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档