Spring Boot

今年的520事情是真的多,把Spring Boot 2.5.0的版本发布都给忽略了!今天就跟DD一起看看Spring Boot 2.5.0又都带来了哪些振奋人心的新特性吧! 主要更新 支持 Java 16 支持 Gradle 7 支持 Jetty 10 增强 Docker 镜像的构建 更新了Datasource的初始化机制 除了框架功能更新之后,该版本在文档方面也顺应时代潮流,增加了暗黑模式的支持! 长这样,是你喜欢的阅读模式吗? 其他更新 management.endpoints.web.cors.allowed-origin-patterns配置可以用来控制是否允许Actuator端点跨域访问 HttpSessionIdListener现在开始自动注册到Servlet上下文 Couchbase现在默认使用自动化配置的ObjectMapper Elasticsearch的Sni...

Spring Boot 2.4.5 & 2.3.10 现已发布。 本次更新是错误修复版本,分别包含 57 个与 78 个错误修复。 主要更新内容2.4.5 当 spring.main.cloud-platform 被设置为NONE时,CloudPlatform.isActive 可以返回 true Elasticsearch 自动配置没有配置默认的转换器 Gradle bootBuildImage 不会保留资源的文件权限 Keystore.load 调用不会关闭 InputStream 带有 Reactory Netty 的 TCP 的密码配置被忽略 修复使用 Cassandra 关闭 Spring Boot 应用程序时出现 java.util.concurrent.RejectedExecutionException 的问题 修复 spring-boot:build-ima...

Spring Boot 2.4.4 已经发布。现在可从 repo.spring.io 和 Maven Central 获得。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.4</version> <relativePath/></parent> 这是 v2.4 版本的第四个错误修正版本,包括 60 个错误修复,增强功能,文档改进和依赖项升级。 Bug Fixes 使用 jOOQ 当 SQLException 无法翻译时,会抛出 NPE 如果配置了多个 schema 或数据脚本加载路径...

前段时间因为团队调整,大部分时间放在了团队上,这系列的更新又耽误了一下。但既然承诺持久更新,那就不会落下,今天开始继续更新这部分的内容! 过了年,重申一下这个系列的目标:目前主要任务就是把Spring Boot 1.x部分没有升级的内容做完升级。我会将因为版本升级而产生的变化做一些说明,这样不论低版本的读者还是高版本的读者都能找到自己想要的部分。这也是这次做2.x版本升级的重要原因,尽量避免或减少有读者用着高版本参考我这边低版本的实现而出现问题,然后开始问候我家人的情况。 在完成上述所有的更新之后,接下来很重要的更新内容将会集中在关于Spring Boot的一些进阶内容,比如:要做什么扩展的时候,该从哪里着手等。 如果是您是Spring Boot的使用者,那么一定要关注一下!后面的内容会越来越精彩! 下面回归今天的主题,如何在Spring Boot中使用MongoDB! MongoD...

新年上班第一天,Spring Boot 就发布了最新的2.4.3 、2.3.9 版本。心急的小伙伴现在可从 repo.spring.io 和 Maven Central 获得相关内容。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.3</version> <relativePath/></parent> Spring Boot 2.4.3版本是v2.4 版本的第三个错误修正版本,本次更新内容包括了 29 个错误修复,15个文档改进和31个依赖项升级,共计75项内容,不可谓不丰富。 下...

在一个Spring Boot项目中,连接多个数据源还是比较常见的。之前也介绍了如何在几种常用框架的场景下配置多数据源,具体可见: Spring Boot 2.x基础教程:JdbcTemplate的多数据源配置 Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置 Spring Boot 2.x基础教程:MyBatis的多数据源配置 当我们采用多数据源的时候,同时也会出现一个这样的特殊场景:我们希望对A数据源的更新和B数据源的更新具备事务性。这样的例子很常见,比如:在订单库中创建一条订单记录,同时还需要在商品库中扣减商品库存。如果库存扣减失败,那么我们希望订单创建也能够回滚。 如果这两条数据在一个数据库中,那么通过之前介绍的事务管理就能轻松解决了。但是,当这两个操作位于不同的数据库中,那么就无法实现了。 本文就来介绍一种解决这类问题的方法:JTA事务...

当我们使用Spring Initializr来创建Spring Boot工程的时候,有没有发现在工程根目录下有两个名为mvnw的文件: 从命名、图标、扩展名来猜测,这两个文件的作用应该是一样的,只是cmd文件应该是用在windows下跑的,而另外一个则是用于linux环境下跑的。 那么这个文件到底是用来做什么呢?下面我们一起尝试了解一下: 第一步:打开读一下 因为内容较多,我这里就不放出来了。内容也非常易懂,只要你了解shell和maven,就能知道这个脚本主要做这几件事: 检测你是否有安装Maven,如果没有,就自动下载一个(这样才能完成后续的构建任务) 检查你是否有安装Java或者配置是否正确,这个无法自己完成,如果报错了,就要自己处理一下,比如JAVA_HOME没有,那就自己配置下。 检查否存在版本不兼容的情况,如果不兼容他会下载合适的版本来帮助你完成构建 更多检查的...

在使用Spring Boot开发应用的时候,你是否有发现这样的情况:自定义属性是有高量背景的,鼠标放上去,有一个Cannot resolve configuration property的配置警告。 如果不对于这个警告觉得烦,想要去掉,那么可以通过设置来去除: 但是,我的建议是不要去掉,因为这个警告正好可以通过高亮来区分你的自定义配置以及框架配置,可以让你快速的分辨哪些是自定义的。 如果你实在想去掉,那么也不建议用上面说的方法,而是建议通过完善配置元数据的方式来完成。所以,今天就来具体说说配置元数据的应用! 啥是配置元数据?我们不妨打开一个已经创建好的Spring Boot项目,查看一下它的Spring Boot依赖包,可以找到如下图的一个json文件: 这里报错的就是配置的元数据信息。有没有发现这些name的值都很熟悉?其中description是不是也很熟悉?对,这些就是我...

2021年首发,Spring Boot 2.4.2 、2.3.8.RELEASE 两个常规错误修正版本发布。现在可以从 maven 仓库获取,坐标如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> </parent> New Features 新增 PropertySource 资源检索 API Bug Fixes HikariDataSourceMetricsRegistry 调用 Wrapper.isWr...

之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate、Spring Data JPA以及我们国内最常用的MyBatis。同时,对于一些复杂场景比如:更换Druid数据源,或是多数据源的情况也都做了介绍。 不论我们使用哪一个具体实现框架,都离不开对数据库表结构的管理。而这一类管理一直都存在一个问题:由于数据库表元数据存储于数据库中,而我们的访问逻辑都存在于Git或其他代码仓库中。Git已经帮助我们完成了代码的多版本管理,那么数据库中的表该如何做好版本控制呢? 今天我们就来介绍在Spring Boot中使用Flyway来管理数据库版本的方法。 Flyway简介Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命...

早上有个群友问了一个不错的问题:文件上传的单元测试怎么写?后面也针对后端开发要不要学一下单元测试的话题聊了聊,个人是非常建议后端开发能够学一下单元测试的。所以,今天特地拿出来写一篇说说,并不是因为这有多难写,而是作为出色的后端开发人员,单元测试如果你能考虑周到,那么从代码结构,程序质量上都会有很大的提升。而实际开发过程中,很少有开发人员会特别关注这个方面。 言归正传,下面我们具体说说当碰到需要上传文件的接口,我们要如何写单元测试! 先来回忆一下,普通接口的单元测试我们是如何写的?看看我们入门例子中的单元测试: @SpringBootTestpublic class Chapter11ApplicationTests { private MockMvc mvc; @Before public void setUp() { mvc = ...

昨天,我们介绍了如何在Spring Boot中实现文件的上传。有读者问:那么如果有多个文件要同时上传呢?这就马上奉上,当碰到多个文件要同时上传的处理方法。 动手试试本文的动手环节将基于Spring Boot中实现文件的上传一文的例子之上,所以读者可以拿上一篇的例子作为基础来进行改造,以体会这之间的区别,下面也主要讲解核心区别的地方。 第一步:修改文件上传页面的上传表单 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" /> <title>文件上传页面 - didispace.com</title></head><body><h1>文件上传页面</h1><form method="...

文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入库等后续操作。 今天通过这篇文章,我们就来一起学习一下如何在Spring Boot中实现文件的上传。 动手试试第一步:创建一个基础的Spring Boot项目,如果还不会的话就先看看这篇《快速入门》。 第二步:在pom.xml中引入模版引擎依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency> 你也可以选择其他你熟悉的模版...

GraalVM是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。最近比较火的 Java 框架 Quarkus默认支持 GraalVM 下图为 Quarkus 和传统框架(SpringBoot) 等对比图,更快的启动数据、更小的内存消耗、更短的服务响应。 Spring Boot 2.4 开始逐步提供对 GraalVM 的支持,旨在提升上文所述的 启动、内存、响应的使用体验。 安装 GraalVM 目前官方社区版本最新为 20.3.0 ,是基于 OpenJDK 8u272 and 11.0.9 定制的,可以理解为 OpenJDK 的衍生版本 。 官方推荐的是 SDKMAN[3] 用于快速安装和切换不同版本 JDK 的工具 ,类似于 nodejs 的 nvm[4]。 使用类似命令即可完成指定版本安装和指定默认版本 sdk install java 11....

前几天在《Spring Boot 2.4 对多环境配置的支持更改》一文中,给大家讲解了Spring Boot 2.4版本对多环境配置的配置变化。除此之外,还有一些其他配置变化,所以今天我们就继续讲讲其他的更新内容! spring.profiles.include对于这个配置项,你是否熟悉呢?从字面意思也不难理解,应该就是用来引入一些其他配置的配置(因为有个include嘛),实际作用也确实如此! 当我们的应用有很多配置信息的时候,比如当用到了很多中间件MySQL、Redis、MQ等,每个中间件的配置都是一大串的,那么这个时候我们为了配置更简洁一些,可能就会对其做分组。 如果你有用过这样的配置方式,那么在升级2.4版本的时候一定要注意,因为原来的配置方法会失效! 2.4之前的分组配置先来看看2.4版本之前的分组配置,我们用下面这个例子来介绍: spring: profiles: ...