【方向盘】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打好基础!

相关文章
|
25天前
|
Java 关系型数据库 MySQL
创建一个SpringBoot项目,实现简单的CRUD功能和分页查询
【9月更文挑战第6天】该内容介绍如何使用 Spring Boot 实现具备 CRUD 功能及分页查询的项目。首先通过 Spring Initializr 创建项目并选择所需依赖;其次配置数据库连接,并创建实体类与数据访问层;接着构建服务层处理业务逻辑;最后创建控制器处理 HTTP 请求。分页查询可通过添加 URL 参数实现。
|
2月前
|
XML 前端开发 Java
基于SpringBoot 3.3实现任意文件在线预览功能的技术分享
【8月更文挑战第30天】在当今的数字化办公环境中,文件在线预览已成为提升工作效率、优化用户体验的重要功能之一。无论是文档、图片、PDF还是代码文件,用户都期望能够直接在浏览器中快速查看而无需下载。本文将围绕如何在Spring Boot 3.3框架下实现这一功能,分享一系列技术干货,助力开发者高效构建文件预览服务。
145 2
|
2月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
|
2月前
|
Java UED 开发者
Spring Boot 降级功能的神秘面纱:Hystrix 与 Resilience4j 究竟藏着怎样的秘密?
【8月更文挑战第29天】在分布式系统中,服务稳定性至关重要。为应对故障,Spring Boot 提供了 Hystrix 和 Resilience4j 两种降级工具。Hystrix 作为 Netflix 的容错框架,通过隔离依赖、控制并发及降级机制增强系统稳定性;Resilience4j 则是一个轻量级库,提供丰富的降级策略。两者均可有效提升系统可靠性,具体选择取决于需求与场景。在面对服务故障时,合理运用这些工具能确保系统基本功能正常运作,优化用户体验。以上简介包括了两个工具的简单示例代码,帮助开发者更好地理解和应用。
40 0
|
2天前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
|
3天前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
13 6
|
2月前
|
SQL 前端开发 NoSQL
SpringBoot+Vue 实现图片验证码功能需求
这篇文章介绍了如何在SpringBoot+Vue项目中实现图片验证码功能,包括后端生成与校验验证码的方法以及前端展示验证码的实现步骤。
SpringBoot+Vue 实现图片验证码功能需求
|
29天前
|
NoSQL 前端开发 Java
使用 Spring Boot + Neo4j 实现知识图谱功能开发
在数据驱动的时代,知识图谱作为一种强大的信息组织方式,正逐渐在各个领域展现出其独特的价值。本文将围绕使用Spring Boot结合Neo4j图数据库来实现知识图谱功能开发的技术细节进行分享,帮助读者理解并掌握这一技术栈在实际项目中的应用。
100 4
|
2月前
|
机器学习/深度学习 文字识别 前端开发
基于 Spring Boot 3.3 + OCR 实现图片转文字功能
【8月更文挑战第30天】在当今数字化信息时代,图像中的文字信息越来越重要。无论是文档扫描、名片识别,还是车辆牌照识别,OCR(Optical Character Recognition,光学字符识别)技术都发挥着关键作用。本文将围绕如何使用Spring Boot 3.3结合OCR技术,实现图片转文字的功能,分享工作学习中的技术干货。
78 2
|
2月前
|
安全 Java 应用服务中间件
如何在 Spring Boot 3.3 中实现请求 IP 白名单拦截功能
【8月更文挑战第30天】在构建Web应用时,确保应用的安全性是至关重要的。其中,对访问者的IP地址进行限制是一种常见的安全措施,特别是通过实施IP白名单策略,可以只允许特定的IP地址或IP段访问应用,从而有效防止未授权的访问。在Spring Boot 3.3中,我们可以通过多种方式实现这一功能,下面将详细介绍几种实用的方法。
87 1
下一篇
无影云桌面