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

news/2024/11/16 10:45:24/

少年易学老难成,一寸光阴不可轻。
本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏

你好,我是方向盘(YourBatman)。笔者的公号是保留地,只分享原创,不转载、不发商务广告!

✍前言

北京时间2021-05-21,Spring Boot 2.5.0正式发布。相距约半年,继2.4.0版本的重大更新之后,此版本能给我们带来哪些期待呢?

2.4.0版本的新特性在这里:Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)

所属专栏

  • 【方向盘】-Spring Boot新特性

相关下载

  • 【本专栏源代码】:https://github.com/yourbatman/FXP-java-ee
  • 【技术专栏源代码大本营】:https://github.com/yourbatman/tech-column-learning
  • 【女娲Knife-Initializr工程】访问地址:http://152.136.106.14:8761
  • 【程序员专用网盘】公益上线啦,注册送1G超小容量,帮你实践做减法:https://wangpan.yourbatman.cn
  • 【Java开发软件包(Mac)】:https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit

版本约定

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

2.5版本主要新特性

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

✌暗黑模式

连iPhone都支持暗黑模式了,Spring岂能不紧跟潮流呢。
官网
文档
其实除了暗黑模式外,字也变更清晰了、外观更新颖了等等。

✌脚本数据源初始化

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

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

Spring Boot 2.5.0版本重新设计了用于支持schema.sqldata.sql脚本的底层实现,在使用层面用spring.sql.init.*属性来进行配置,参照本类:
在这里插入图片描述
在这里插入图片描述
而之前版本的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容器/应用容器会负责做相关资源的清理工作。

相关代码在这,默认情况下该钩子是会被注册的:
在这里插入图片描述
那钩子程序到底做了什么呢?其实就是资源回收嘛(比如close()),以Logback为例:
在这里插入图片描述

✌删除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打好基础!

本专栏上下文

  • 【方向盘】Spring Boot 2.4.0正式发布,全新的配置文件加载机制(不向下兼容)

推荐阅读

  • 【方向盘】每人送1G超小容量,“BAT网盘”免费助你做减法
  • 【方向盘】蚂蚁金服上市了,我不想努力了
  • 【方向盘】因“双减”失业,厉经9面,终获美团外卖L8的Offer

在这里插入图片描述

我是方向盘(YourBatman、方哥):一个前25年还不会写Hallo World、早已毕业的大龄程序员。网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖…是我不可抹灭的黑标签

  • 👉🏻2006 - 2009:游戏《梦幻西游》骨灰玩家
  • 🎓2013.07 清考、毕业答辩3次未通过、延期毕业
  • 🏷2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作
  • ️️🏷2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作
  • 🏷2015.08 开始从事Java开发,闯过外包,呆过大厂!多年架构经验,任基础架构/中间件团队负责人
  • 🏷2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer
  • 🙅🏻‍♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委
  • 📚将出版书籍《Spring奇淫巧技》,致力于国内zui好、zui具深度、zui实用的专栏,为市场贡献微薄之力
  • 现在写纯粹技术专栏(公号后台回复专栏列表),不哗众取宠。如果你也有共鸣,可加我好友(fsx1056342982)一起进步
序号专栏名称简介
01【方向盘】-程序人生程序人生,人生程序
02【方向盘】-资讯/新特性IDEA、JDK、Spring技术栈…新特性
03【方向盘】-IntelliJ IDEA熟练使用IDEA就相当拥有物理外挂,助你高效编码
04【方向盘】-Bean Validation熟练掌握数据校验,减少90%的垃圾代码
05【方向盘】-日期时间帮你解决JDK Date、JSR 310日期/其实 的一切问题
06【方向盘】-Spring类型转换Spring类型转换-框架设计的基石
07【方向盘】-Spring staticstatic关键字在Spring里的应用
08【方向盘】-Cors跨域关于跨域请求问题,本专栏足矣
09【方向盘】-JacksonAlmost Maybe是最好的Jackson专栏
10【方向盘】-Spring配置类专讲@Configuration配置类,你懂的
11【方向盘】-Spring技术栈暂无所属小分类的,Spring技术栈大分类
12【方向盘】-JDK暂无所属小分类的,JDK技术栈大分类
13【方向盘】-ServletServlet规范、Web相关内容专题
14【方向盘】-Java EE从Java EE到Jakarta EE,30年弹指一挥间
15【方向盘】-Spring Boot新特性Spring Boot中、大版本发布时的新特性系列专题
16【方向盘】-Spring Framework新特性Spring Framework中、大版本发布时的新特性系列专题
17【方向盘】-Spring Cloud新特性Spring Cloud中、大版本发布时的新特性系列专题
99源代码库大多数专栏均配有源代码,都在这里
  • 源代码库地址:https://github.com/yourbatman/tech-column-learning
  • CSDN主页:https://blog.csdn.net/f641385712
  • 掘金主页:https://juejin.cn/user/430664289367192
  • 博客园主页:https://www.cnblogs.com/yourbatman
  • 个人博客主页:https://yourbatman.cn
  • 个人网盘主页:https://wangpan.yourbatman.cn

http://www.ppmy.cn/news/163429.html

相关文章

各种单机游戏假设

编码 游戏名称 链接 GM工具(客户端)备注1 大闹天宫 链接: http://pan.baidu.com/s/1hq7ZWmK 密码: gtck 2 七雄争霸 链接: http://pan.baidu.com/s/1eQxUD3O 密码: fskd 3 热血三国V1.2 链接: h…

梦幻之旅

题记: 梦幻西游是我上中学玩的一款游戏,也是我第一次接触的网络游戏,曾几何时,它为网易公司带来了不菲的收入,也深深的影响了我们这一代爱玩游戏的年轻人。虽然它的辉煌历史已经渐渐远去,现在很多3D效果的游…

笑傲江湖mysql设置gm_收集笑傲江湖网络版gm指令

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 功能指令 说明 /gotoobj [npc# or mon#] 直接移动到一对象旁。 /solve 将玩家Petition的内容叫出并处理。 /who 可以看到一个玩家的OID及帐号 /whonpc 可以看到所有NPC的OID及Location /allfactory 取得所有该区域定义的 npc 及 m…

梦5白泽版实时存档

此文已过期! 2018.10.01国庆回家无聊玩起了梦幻西游单机(梦幻群侠传5),从此一发不可收拾,陆续玩了很多大佬的版本: 梦5原版(初版、日期版) 浪西游 梦5唯美版 梦5白泽版 个人比较喜…

藏宝阁游戏服务器维护中,梦幻西游藏宝阁异常交易保护 | 手游网游页游攻略大全...

发布时间:2016-08-18 众所周知,网易对打击线下交易一项非常严厉,但是由于梦幻西游藏宝阁那高昂的手续费,让许多玩家望而生畏.不过玩家的力量是强大的,这不,又有玩家利用梦幻西游藏宝阁的交易规则来玩线下交易. 极品装备 极品装备图 玩家都知道,如此 ... 标签: 梦幻西游2 图文…

梦幻西游五虎将访谈系列:主策划小白

网易《 梦幻西游》作为民族 网游的领头羊,一直牢牢占据着国内网游界NO.1的宝座,其品牌影响力早已超过游戏本身,这么一款代表国内最高水准的超人气国民网游是如何炼成的?又是一种什么样的精神力量在引导着《梦幻西游》不断创造奇迹?希望通…

梦幻西游唯美版.gim(3D模型)文件格式结构记录

梦幻西游唯美版.gim(3D模型)文件格式结构记录版本 v0.2by 小宝 梦幻在唯美版中加入了真正的3D资源,这会不会促使小宝去学习3D图形呢? 吾尝终日而思矣,不如须夷之所学也。 我们提取资源并不是为了资源,而…

梦幻古龙服务器系统,【梦幻XY单机服务端】梦幻古龙一键安装客户端+附搭建安装教程...

【梦幻XY单机服务端】梦幻古龙一键安装客户端附搭建安装教程_站长网(Downzz.com) 资源介绍: 配置推荐:Windows XP/7/Vista (32 或 64位) CPU:双核2GHz 内存:2GB(至少) 硬盘:6GB可用空间 【游戏特色】梦幻古龙是防梦幻西…