Spring Boot 3.5 正式发布,王炸级更新!!
<p>大家好,我是R哥。</p><p>就在前几天,<strong>Spring Boot 3.5.0</strong> 正式发布了:</p>
<p><img src="https://img2024.cnblogs.com/other/1218593/202506/1218593-20250603100356375-723487303.png"></p>
<p><strong>最新的支持版本如下:</strong></p>
<p><img src="https://img2024.cnblogs.com/other/1218593/202506/1218593-20250603100356728-2142459099.png"></p>
<p>3.2.x 在前几天也停止维护了,很神奇的是,3.1.x 及以下的停更版本居然也发布 bug 更新包了。</p>
<p>从路线图可以看到每个版本的终止时间,每个版本的生命周期只有一年,<strong>3.3.x 以下的版本停止免费维护了</strong>,3.3.x 还有一个月也要停止维护了,商业支持的 3.x 最高版本版本 <strong>3.1.x、2.x 为 2.7.x</strong>。</p>
<p>Spring Boot 进入了全新的 3.4+ 时代了,2.6.x 以下的版本彻底退出历史舞台,4.0 都快要来了,技术变革太快了。。</p>
<h2 id="spring-boot-350-新特性">Spring Boot 3.5.0 新特性</h2>
<h3 id="1最低环境要求">1、最低环境要求</h3>
<p>Spring Boot 3.0.0 开始支持并最低要求 Java 17,目前的新版本也陆续开始支持 Java 21 ~ 24 了。</p>
<p><strong>对 Java 开发环境的要求对比表:</strong></p>
<table>
<thead>
<tr>
<th>Spring Boot</th>
<th>JDK</th>
<th>Spring</th>
<th>Maven</th>
<th>Gradle</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.5.0</td>
<td>17 ~ 24</td>
<td>6.2.7+</td>
<td>3.6.3+</td>
<td>7.6.4+,8.4+</td>
</tr>
<tr>
<td>3.4.0</td>
<td>16 ~ 23</td>
<td>6.2.0+</td>
<td>3.6.3+</td>
<td>7.6.4+,8.4+</td>
</tr>
<tr>
<td>3.3.0</td>
<td>17 ~ 22</td>
<td>6.1.8+</td>
<td>3.6.3+</td>
<td>7.5+,8.x</td>
</tr>
<tr>
<td>3.2.0</td>
<td>17 ~ 21</td>
<td>6.1.1+</td>
<td>3.6.3+</td>
<td>7.5+,8.x</td>
</tr>
<tr>
<td>3.1.0</td>
<td>17 ~ 20</td>
<td>6.0.9+</td>
<td>3.6.3+</td>
<td>7.5+,8.x</td>
</tr>
<tr>
<td>3.0.0</td>
<td>17 ~ 19</td>
<td>6.0.2+</td>
<td>3.5+</td>
<td>7.5+</td>
</tr>
<tr>
<td>2.7.18</td>
<td>8 ~ 21</td>
<td>5.3.31+</td>
<td>3.5+</td>
<td>6.8.x, 6.9.x, 7.x, 8.x</td>
</tr>
</tbody>
</table>
<p>支持 Java 8 的最后一个 Spring Boot 2.x 系列版本早已已经退伍啦,Java 17 的新时代彻底到来。</p>
<p>如果你还停留在 Java 8 就 OUT 了,过去一两年,Java 8 采用率腰斩,Java 17 暴涨 430%!!</p>
<blockquote>
<p>R哥制作的《Java 新特性实战课》都可以报名学起来,好课不贵,199 元永久学习,如后续出了 Java 21 及更多版本新内容都能免费更新。</p>
</blockquote>
<h3 id="2结构化日志记录改进">2、结构化日志记录改进</h3>
<p>在《Spring Boot 3.4 版本》中出的新功能结构化日志,Spring Boot 3.5 又对它进行改进了:</p>
<ul>
<li>支持<strong>自定义结构化日志堆栈跟踪</strong>,可以自定义写入结构化日志的堆栈跟踪,以限制其大小或以不同的格式进行打印。可以使用 <code>logging.structured.json.stacktrace.*</code> 属性配置堆栈跟踪输出。</li>
<li>ECS 结构日志的 JSON 输出已更新为<strong>使用嵌套格式</strong>,这将提高与使用 JSON 的后端之间的兼容性。</li>
<li>ECS 结构化日志格式,现在在 <code>tags</code> 字段中添加了 Logback 和 Log4j 的标记。</li>
</ul>
<h3 id="3服务连接支持-ssl">3、服务连接支持 SSL</h3>
<p>Spring Boot 3.5 已经支持为选定的<strong>服务连接添加客户端 SSL 支持</strong>,以下服务连接支持此功能:</p>
<ul>
<li>Cassandra</li>
<li>Couchbase</li>
<li>Elasticsearch</li>
<li>Kafka</li>
<li>MongoDB</li>
<li>RabbitMQ</li>
<li>Redis</li>
</ul>
<p>另外,Testcontainers 和 Docker Compose 集成也进行了更新,也允许进行 SSL 配置:</p>
<ul>
<li>对于 Testcontainers,可以使用新的注解;</li>
<li>对于 Docker Compose,可以使用标签。</li>
</ul>
<h3 id="4从环境变量加载属性">4、从环境变量加载属性</h3>
<p>虽然之前的版本已经可以从环境变量加载单个属性,但现在,Spring Boot 3.5 开始,可以<strong>从单个环境变量加载多个属性</strong>。</p>
<p>比如,现在可以定义一个多行环境变量 <code>USER_CONFIGURATION</code> ,可以包含以下内容:</p>
<pre><code class="language-properties">user.name=John
user.age=18
user.sex=1
...
</code></pre>
<p>然后可以通过使用 <code>env:</code> 前缀导入:</p>
<blockquote>
<p>spring.config.import=env:USER_CONFIGURATION</p>
</blockquote>
<p>在 <code>Environment</code>中,就可以找到 <code>user.name</code> 、<code>user.age</code> 等其他多个属性了,也就是说,当有多个属性值的时候,可以不用配置多个环境变量了,一个环境变量搞定。</p>
<h3 id="5asynctaskexecutor-与自定义-executor">5、AsyncTaskExecutor 与自定义 Executor</h3>
<blockquote>
<p><code>AsyncTaskExecutor</code> 是 Spring 框架提供的异步任务执行器接口,用于执行异步方法或任务。它是 Spring 对 Java 原生 <code>Executor</code> 的增强,提供了更高层次的封装,常用于异步方法调用(如 <code>@Async</code>)或手动提交任务。</p>
</blockquote>
<p>如果自定义的 <code>Executor</code> 的 Bean 存在,Spring Boot 3.5 现在可以自动配置 AsyncTaskExecutor,只需要将 <code>spring.task. execute.mode</code> 属性的值设置为 force。</p>
<p>在这种模式下运行时,它确保所有集成(包括常规的 <code>@Async</code> 处理)都使用自动配置的执行器,除非定义了 <code>AsyncConfigurer</code> 相关的 Bean。</p>
<h3 id="6bean-后台初始化支持自动配置">6、Bean 后台初始化支持自动配置</h3>
<p>Spring Boot 3.5 现在支持自动配置一个名为 <code>bootstrapExecutor</code> 的 Bean,在还没有的相关 Bean 情况下才自动配置,以支持 Bean 在后台完成初始化。</p>
<p>要实现这一点,需要在上下文中有一个名为 <code>applicationTaskExecutor</code> 的 Bean,当然也可以定义自定义 <code>Executor</code> bean,这样就能让 Bean 后台初始化可以开箱即用。</p>
<h3 id="7通过注解注册过滤器和-servlet">7、通过注解注册过滤器和 Servlet</h3>
<p>之前注册过滤器和 Servlet 普通使用的是 <code>ServletRegistrationBean</code> 和 <code>FilterRegistrationBean</code> 方式,Spring Boot 3.5 祭出了两个注解替代方案:</p>
<ul>
<li>使用 <code>@ServletRegistration</code> 注册 <code>Servlet</code> ;</li>
<li>使用 <code>@FilterRegistration</code> 注册 <code>Filter</code>;</li>
</ul>
<p>如下例所示:</p>
<pre><code class="language-java">@Configuration(proxyBeanMethods = false)
public class FilterConfiguration {
@Bean
@FilterRegistration(name = "encoding-filter", urlPatterns = "/*", order = 0)
public EncodingFilter encodingFilter() {
return new EncodingFilter();
}
}
</code></pre>
<p>此外,对 <code>FilterRegistrationBean</code> 的行为也进行了调整,以前,你可以将一个空的 <code>DispatcherType</code> 集传递给 <code>setDispatcherTypes</code> 方法,然后再将它传递给服务器。</p>
<p>现在,它的行为与调用 <code>setDispatcherTypes(null)</code> 作用相同,将其与 <code>FilterRegistration</code> 注解的功能保持一致。</p>
<h3 id="8自动配置的-taskexecutor-名称">8、自动配置的 TaskExecutor 名称</h3>
<p>以前,Spring Boot 自动配置了一个 <code>TaskExecutor</code> ,其中包含 <code>taskExecutor</code> 和 <code>applicationTaskExecutor</code> Bean 名称。</p>
<p>在 Spring Boot 3.5 这个版本中,只提供了 <code>applicationTaskExecutor</code> bean 名称,请求按名称自动配置的 <code>Executor</code> 的代码应该适应使用 <code>applicationTaskExecutor</code> 。</p>
<p>如果你的系统依赖这种方式,还想和过去保持兼容,你也可以使用 <code>BeanFactoryPostProcessor</code> 来添加别名,如下面的例子所示:</p>
<pre><code class="language-java">@Configuration
public class MyConfiguration {
@Bean
static BeanFactoryPostProcessor taskExecutorAliasBeanFactoryPostProcessor() {
return (beanFactory) -> beanFactory.registerAlias("applicationTaskExecutor", "taskExecutor");
}
}
</code></pre>
<h3 id="9redis-配置变更">9、Redis 配置变更</h3>
<p>当配置 <code>spring.data.redis.url</code> 时,使用的 Redis 数据库由 URL 决定。如果 URL 没有指定数据库,则使用默认值 <code>0</code> 。</p>
<p>当配置 <code>spring.data.redis.url</code> 时,现在忽略 <code>spring.data.redis.database</code> 属性,使其行为与主机、端口、用户名和密码属性保持一致。</p>
<p>另外,增加使用 <code>spring.data.redis.lettuce.read-from</code> 属性配置 <code>ReadFrom</code> 的支持。</p>
<h3 id="10prometheus-pushgateway-配置变更">10、Prometheus Pushgateway 配置变更</h3>
<p>将指标推送到 Prometheus Pushgateway 现在需要 <code>io.prometheus:prometheus-metrics-exporter-pushgateway</code> 而不是 <code>io.prometheus:simpleclient_pushgateway</code> 了。</p>
<p>另外,新客户端的 Pushgateway 支持也可能需要更改配置,如果使用 <code>management.prometheus.metrics.export.pushgateway.base-url</code> ,需要替换为 <code>management.prometheus.metrics.export.pushgateway.address</code> ,并将值调整为 <code>host:port</code> 的形式。</p>
<p>为了支持新的 Pushgateway 客户端,添加了三个新属性:</p>
<ul>
<li><code>management.prometheus.metrics.export.pushgateway.format</code>:将 <code>format</code> 属性设置为 <code>text</code> 以文本形式推送指标,而不是使用 protobuf。</li>
<li><code>management.prometheus.metrics.export.pushgateway.scheme</code>:将 <code>scheme</code> 属性设置为 <code>https</code> ,支持在推送指标时使用 SSL。</li>
<li><code>management.prometheus.metrics.export.pushgateway.token</code>:设置 <code>token</code> 属性,而不是现有的 <code>username</code> 和 <code>password</code> 属性,以使用基于令牌的身份验证。</li>
</ul>
<h3 id="11更多">11、更多</h3>
<p>1)执行器端点 <code>heapdump</code> 现在默认为 <code>access=NONE</code>,其目的是帮助减少错误配置应用程序泄露敏感信息的可能性。</p>
<p>2)属性 <code>.enabled</code> 的支持的值已经收紧了,现在必须是 <code>true</code> 或 <code>false</code> 。</p>
<p>3)配置文件命名规则在此版本中得到了加强,配置文件现在只能包含 <code>-</code> (破折号)、 <code>_</code> (下划线)、字母和数字。此外,配置文件不允许以 <code>-</code> 或 <code>_</code> 开头或结尾。</p>
<p>4)<code>TestRestTemplate</code> 现在和常规的 <code>RestTemplate</code> 一样使用相同的重定向设置,<code>HttpOption.ENABLE_REDIRECTS</code> 选项也已弃用。</p>
<p>5)大量 Spring 库和第三方类库都得到了更新,还有一些废除项。</p>
<h2 id="总结">总结</h2>
<p>Spring Boot 3.5 这个版本的变化还挺大的,增加了不少实用功能,很多功能也都得到了增强,做技术的真要时刻保持对新技术的渴望啊,不然都跟不上时代的步伐了。</p>
<p>Spring Boot 这波操作,既是顺应大环境对现代 Java 的需求,又在细节上做了许多微创新。</p>
<p>从环境支持的 Java 版本不断提升,到结构化日志、服务连接 SSL、注解式 Servlet 和 Filter 注册、Redis 配置调整、Pushgateway 的更新……每一项都体现出了官方对开发体验和生产效率的深度思考。</p>
<p><strong>话说你们现在用的什么版本呢?</strong></p>
<p>特别是对很多还停留在 Spring Boot 2.x 或 Java 8 的朋友来说,是时候认真考虑升级了,因为这些新功能不只是新,更意味着<strong>性能提升、安全增强、开发便捷、生态进化</strong>,而这正是我们做后端开发最核心关注的方向。</p>
<p>Spring Boot 最新最全的实战代码已上传 Github:</p>
<blockquote>
<p>https://github.com/javastacks/spring-boot-best-practice</p>
</blockquote>
<hr>
<p>如果你还没用过 Spring Boot,这里推荐下我的《Spring Boot 核心技术课》,17 个模块,几乎涉及所有核心技术,包括底层实现原理及代码实战,知识点非常齐全,助你快速打通 Spring Boot 的各个环节。</p>
<p><strong>有需要的直接扫码订阅:</strong></p>
<p><img src="https://img2024.cnblogs.com/other/1218593/202506/1218593-20250603100357691-1298474325.png"></p>
<p>等课程内容更新到 Spring Boot <strong>4.x</strong>,本课程会涨价到 <strong>499</strong> 元,早订阅,早学习,早受益。</p>
<p>好了,今天的分享就到这里了,后续R哥也会继续关注并分享更多的 Spring Boot 资讯和干货,关注公众号Java技术栈第一时间推送。</p>
<blockquote>
<p><strong>版权声明:</strong> 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。</p>
</blockquote>
<p><strong>更多文章推荐:</strong></p>
<p>1.Spring Boot 3.x 教程,太全了!</p>
<p>2.3,000+ 道 Java面试题及答案整理(最新版)</p>
<p>3.免费获取 IDEA 激活码的 7 种方式(最新版)</p>
<p>4.Java & DeepSeek & AI 学习资料分享</p>
<p>5.程序员精美简历模板分享</p>
<p>觉得不错,别忘了随手点赞+转发哦!</p>
</div>
<div id="MySignature" role="contentinfo">
<div style="clear: both"></div><br><br>
来源:https://www.cnblogs.com/javastack/p/18908027
頁:
[1]