【方向盘】Spring Boot 2.5.0正式发布,环境变量可指定前缀的功能很赞

简介: 【方向盘】Spring Boot 2.5.0正式发布,环境变量可指定前缀的功能很赞

✍正文


回忆2.4版本主要新特性

不仅time flies,Spring Boot的版本也是越发越勤:基本是半年一个中型版本。在肯定社区繁荣的同时,也感叹一句:学不动了。


Spring Boot 2.4.0是一次非常重要的版本升级(配合有Spring Cloud 2020.0),下面简单回忆下其新特性:


  1. 首个使用新版本号规则的Spring Boot版本

       什么是Spring技术栈新版本号规则?点这里:Spring改变版本号命名规则:此举对非英语国家很友好

  1. 全新的配置文件处理(properties/yaml):这是该版本最重磅的升级,提供了新功能spring.config.import支持,旨在简化和合理化外部配置的加载方式,不向下兼容哦,这决心足以体现Spring家族进击云原生的决心。当然,一向关注“向下兼容”的Spring Boot不会突然一刀切,而是提供了外部化配置的兼容方案,配上spring.config.use-legacy-processing = true即可一键切回到旧模式(不建议)
  2. spring-boot-starter-test中删除Vintage Engine依赖。Vintage Engine属于Junit5的一个模块,它的作用是:允许用JUnit 5运行用JUnit 4编写的测试,从而提供了向下兼容的能力。这次去掉意味着从Spring Boot 2.4.0开始不再兼容JUnit 4(若实在需要兼容,请自行导入相关jar)
  3. 不再注册DefaultServlet。在绝大多数的应用中,Spring MVC提供的DispatcherServlet是唯一需要被注册的Servlet。若还需要,增加属性server.servlet.register-default-servlet = true还原
  4. Spring Framework升级到5.3.0版本(Spring Framework 5.3.0正式发布,在云原生路上继续发力)
  5. 支持Java 15


2.5版本主要新特性

作为2.4的升级版,其实该版本升级并不算多,了解一下。


✌暗黑模式


连iPhone都支持暗黑模式了,Spring岂能不紧跟潮流呢。


image.png


image.png


其实除了暗黑模式外,字也变更清晰了、外观更新颖了等等。


✌脚本数据源初始化


Spring Boot的脚本数据源初始化功能在开发中用得不多,但在单元测试上用得挺多的(单元测试使用嵌入式DB居多)。该功能简单的讲:在应用启动阶段执行一些SQL脚本(包括DML、DDL)。


说明:默认情况下,SQL脚本也只在嵌入式数据源的时才会执行(该行为由spring.sql.init.mode=xxx控制)


Spring Boot 2.5.0版本重新设计了用于支持schema.sql和data.sql脚本的底层实现,在使用层面用spring.sql.init.*属性来进行配置,参照本类:

image.png


image.png


而之前版本的spring.datasource.*已被弃用(标记为过时,但并未删除仍可以使用哈):


# 使用spring.sql.init.username代替
spring.datasource.schema-username=YourBatman
# 使用spring.sql.init.schema-locations代替
spring.datasource.schema=mysql/schema.sql
# 使用spring.sql.init.username代替
spring.datasource.data-username=YourBatman_data
# 使用spring.sql.init.data-locations代替
spring.datasource.data=mysql/schema.sql
# 使用spring.sql.init.mode代替
spring.datasource.initialization-mode=embedded


值得注意的是:新的方式不再支持在配置上为schema和data独立配置凭证(用户名和密码),因为绝大部分情况下我们并不需要这么做。倘若真的有需求,Spring Boot建议你去自定义一个org.springframework.jdbc.datasource.init.DataSourceInitializer这样的Bean即可。


关于数据源初始化,Spring Boot 2.5.0还提供了一个新的注解:@DependsOnDatabaseInitialization。顾名思义,它表示那些需要依赖于DataSource初始化(数据源初始化了自己才能初始化)的Bean可标记上次注解,Spring Boot来管理这个顺序。


此注解功能和底层原理同@DependsOn注解,区别在于前者是自动的,而后者是手动的(具体依赖哪些Bean需要自己一一指出)


✌系统环境变量可指定前缀


从此版本开始,可以为系统环境变量指定前缀,以便可以在同一环境中运行多个不同的Spring引导应用程序。使用SpringApplication.setEnvironmentPrefix(…)设置绑定属性时要使用的前缀,就像这样:


SpringApplication application = new SpringApplication(MyApp.class);
application.setEnvironmentPrefix("yourbatman");
application.run(args);


这个功能大大方便了单机混合部署。


✌移除Spring Data Solr

由于Spring Data项目在2021.0.0版本已移除了Solr的支持,因此在此版本里Spring Boot也将其干掉了。


值得注意的是:是干掉了Spring Data下的Solr,全路径org.springframework.boot.autoconfigure.data.solr下的自动配置类SolrRepositoriesAutoConfiguration及其相关API。而自动配置类org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration依旧是存在的哦。


Spring一向是Java领域的风向标,可以看到ElasticSearch的崛起也预示着Solr将要成为历史。


✌/info端点默认不再公开


在此本文启动应用后访问curl localhost:8080/actuator/info得到的将是404,但在之前(如2.4.0)和之后(是的你没听过,如2.6.0)版本都能正常访问,所以这还蛮滑稽的。


想自定义打开/关闭Endpoint端点,这样配即可:management.endpoints.web.exposure.include=info,metrics,xxx


✌更改EL表达式实现

通过笔者数据校验专栏或者Java EE专栏知道:EL是Bean Validation实现必备的功能组件之一。


Spring Boot通过spring-boot-starter-validation启动器来管理相关依赖,之前用的org.glassfish:jakrta.el,此版本之后改为org.apache.tomcat.embed.tomcat-embed-el(可独立使用,和Tomcat容器没关系),对使用者无感哈!


✌日志Shutdown Hooks

这是一个比较实用的功能:基于jar的应用程序注册一个默认的日志关闭钩子,以确保在JVM退出时释放日志资源。如果应用是war形式部署则无需此功能,因为web容器/应用容器会负责做相关资源的清理工作。


相关代码在这,默认情况下该钩子是会被注册的:

image.png

那钩子程序到底做了什么呢?其实就是资源回收嘛(比如close()),以Logback为例:


image.png

✌删除2.3已被标记为过期的代码

这是Spring Boot一贯用的规则/规律:标记为@Deprecated的API会在隔一个版本后删除代码。


如删除org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientBuilderCustomizer,代替者:org.springframework.boot.autoconfigure.elasticsearch.RestClientBuilderCustomizer。


✌其它

  1. /actuator/startup支持Get方法啦(之前只能post方法)
  2. 支持Java 16
  3. 支持Gradle 7
  4. 支持Jetty 10
  5. Apache HttpClient 5配置到WebClient里
  6. 依赖升级:Spring Data 2021.0、Spring Session 2021.0、Spring Kafka 2.7.0


✍总结


Spring Boot 2.5相较于2.4动作并不大,但也存在一些不兼容性,升级时需多加注意。如若你现在已经在使用Spring Boot 2.4.x版本了,那么升级上来将毫无压力,推荐升级,为升级到2.6.x打好基础!

相关文章
|
5天前
|
消息中间件 缓存 Java
手写模拟Spring Boot启动过程功能
【11月更文挑战第19天】Spring Boot自推出以来,因其简化了Spring应用的初始搭建和开发过程,迅速成为Java企业级应用开发的首选框架之一。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,帮助读者深入理解其工作机制。
21 3
|
5天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
20 0
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
144 1
|
29天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
36 0
|
18天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
95 62
|
6天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
17 2
|
15天前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
55 8
|
16天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
34 2
|
20天前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
23 1