Spring Boot

在使用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: ...

在目前最新的Spring Boot 2.4版本中,对配置的加载机制做了较大的调整。相关的问题最近也被问的比较多,所以今天就花点时间,给大家讲讲Spring Boot 2.4的多环境配置较之前版本有哪些变化。 多环境配置2.4版本之前 先回顾下,2.4版本之前,我们在yaml配置文件中,使用spring.profiles来定义不同环境的标识,比如下面这样: spring: profiles: "dev"name: dev.didispace.com---spring: profiles: "test"name: test.didispace.com---spring: profiles: "prod"name: prod.didispace.com 2.4版本之后 而在本次2.4版本升级之后,我们需要将spring.profiles配置用spring.config.activat...

近日,Spring Boot官方发布了本年度最后一次版本更新,主要针对目前维护的三个版本: 2.4.x:第一个bug修复版本 2.4.1 2.3.x:常规维护版本 2.3.7 2.2.x:常规维护版本 2.2.12 由于2.2.x和2.3.x已经非常稳定,所以我们主要关注本次2.4.1的更新。 2.4.1版本内容由于在Spring Boot 2.4.0版本中,对原有的配置加载机制做了较大改动,不少开发者反映在升级的时候也出现了各种不同的问题。而这次2.4.1的发布,主要着手解决了不少关于配置相关的Bug。下面我们一起看看这次都解决了哪些重要问题: 通过通配符匹配的配置文件互相覆盖的问题 配置属性与JavaBean之间绑定的顺序问题 允许递归配置文件组的引用 外部应用程序属性加载顺序的问题 @Name在Kotlin中绑定失败的问题 Redis健康检查器对性能消耗过大的问题 Act...

2020年11月12日,Spring官方发布了Spring Boot 2.4.0 GA的公告。 在这个版本中增加了大量的新特性和改进,下面我们一起看看在这个重要版本中都有哪些值得关注的内容! 更新内容 版本命名的更改,从2.4开始,版本名将去除RELEASE后缀,所以这次的版本不是2.4.0.RELEASE,而是2.4.0 改进了 application.properties 和 application.yml 文件的处理方式。如果您只有一个简单的 application.properties 或 application.yml 文件,那么您的升级应该是无缝的。但是,如果您有更复杂的设置,那么如果您想使用新特性,则可能需要进行一些更改。更细节的内容可参考: https://github.com/spring-projects/spring-boot/wiki/Spring-Bo...

之前我们介绍了两种进程内缓存的用法,包括Spring Boot默认使用的ConcurrentMap缓存以及缓存框架EhCache。虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进程内的缓存框架,在集群模式下时,各应用服务器之间的缓存都是独立的,因此在不同服务器的进程间会存在缓存不一致的情况。即使EhCache提供了集群环境下的缓存同步策略,但是同步依然是需要一定的时间,短暂的缓存不一致依然存在。 在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中,就不能再使用EhCache来解决了,这个时候使用集中式缓存就可以很好的解决缓存数据的一致性问题。接下来我们就来学习一下,如何在Spring Boot的缓存支持中使用Redis实现数据缓存。 动手试试本篇的实现将基于上一篇的基础工程来进行。先来回顾下上一篇中的程序要素: User实体的定义 @Entity...

Spring Boot 2.3.2 Spring Boot 2.2.9 Spring Boot 2.1.16 现在可从 repo.spring.io 和 Maven Central 获得。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath/></parent> 多个版本发布,本文仅着重分享关于 v2.3 版本的更新报告,此版本包括 88 个错误修复,增强功能,文档改进和依赖项升级。 更新日志新特性 增强 Liven...

最近 SpringFox 3.0.0 发布了,距离上一次大版本2.9.2足足有2年多时间了。可能看到这个名字,很多读者会有点陌生。但是,只要给大家看一下这两个依赖,你就知道了! <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> <scope>compile</scope></dependency><dependency> <groupId>io.springfox</groupId> <artifactId>...

上一篇我们介绍了在Spring Boot中整合EhCache的方法。既然用了ehcache,我们自然要说说它的一些高级功能,不然我们用默认的ConcurrentHashMap就好了。本篇不具体介绍EhCache缓存如何落文件、如何配置各种过期参数等常规细节配置,这部分内容留给读者自己学习,如果您不知道如何搞,可以看看这里的官方文档。 那么我们今天具体讲什么呢?先思考一个场景,当我们使用了EhCache,在缓存过期之前可以有效的减少对数据库的访问,但是通常我们将应用部署在生产环境的时候,为了实现应用的高可用(有一台机器挂了,应用还需要可用),肯定是会部署多个不同的进程去运行的,那么这种情况下,当有数据更新的时候,每个进程中的缓存都是独立维护的,如果这些进程缓存同步机制,那么就存在因缓存没有更新,而一直都用已经失效的缓存返回给用户,这样的逻辑显然是会有问题的。所以,本文就来说说当使用Eh...