Spring Boot

Spring Boot 2.5.2 现已发布。此版本包括 53 个错误修复、文档改进和依赖项升级。 主要更新内容 实例化器在没有类加载器的情况下被调用 EnvironmentPostProcessors 未使用正确的 ClassLoader 进行实例化 将不存在的类的名称绑定到 Class<?> 属性时失败 无法排除对重新打包的依赖 当应用程序上下文关闭时死锁,然后在应用程序上下文刷新期间调用 System.exit(int) NettyProperties.leakDetection 的默认值与 Netty 的默认值不一致 处理 “spring.config.import” 属性时仍应进行特定于配置文件的解析 在依赖于 org.springframework.boot:spring-boot-configuration-processor 的项目中使用配置缓存时,Gr...

通过前面一篇集中式缓存的使用教程,我们已经了解了Redis的核心功能:作为K、V存储的高性能缓存。 接下来我们会分几篇来继续讲讲Redis的一些其他强大用法!如果你对此感兴趣,一定要关注收藏我哦! 发布订阅模式如果你看过之前我写的关于MQ的相关文章,那么对于发布订阅功能应该不会陌生。如果没看过,那也不要紧,这里先做一个简单介绍,已经了解的可以跳过直接看下一节内容。 什么是发布订阅模式? 在发布订阅模式中有个重要的角色,一个是发布者Publisher,另一个订阅者Subscriber。本质上来说,发布订阅模式就是一种生产者消费者模式,Publisher负责生产消息,而Subscriber则负责消费它所订阅的消息。这种模式被广泛的应用于软硬件的系统设计中。比如:配置中心的一个配置修改之后,就是通过发布订阅的方式传递给订阅这个配置的订阅者来实现自动刷新的。 不就是观察者模式吗? 看到这里,...

很多时候,我们在做公司系统或产品时,都需要自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个系统维护自己的用户信息,那么此时用户信息的同步就会变的比较麻烦,对于用户自身来说也会非常困扰,很容易出现不同系统密码不一致啊等情况出现。 如果此时我们引入LDAP来集中存储用户的基本信息并提供统一的读写接口和校验机制,那么这样的问题就比较容易解决了。尤其在一些内部管理系统的开发和搭建时,往往我们的内部系统一开始并不全是自己开发的,还有很多第三方产品支持,比如:OA系统、财务系统等,如果自己开发一套用户管理系统,那么这些系统对接还得二次开发,成本很大。由于LDAP并不是什么新技术,大部分成熟软件都支持用LDAP来管理用户,所以时至今日,LDAP的应用依然可以经常看到。 下面我们就具体来看看,当使用Spring Boot...

在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理。那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一个对象呢? 实现原理:消息转换器(Message Converter)在扩展上述问题之前,我们先要知道Spring Boot中处理HTTP请求的实现是采用的Spring MVC。而在Spring MVC中有一个消息转换器这个概念,它主要负责处理各种不同格式的请求数据进行处理,并包转换成对象,以提供更好的编程体验。 在Spring MVC中定义了HttpMessageConverter接口,抽象了消息转换器对类型的判断、对读写的判断与操作,具体可见如下定义: public interface HttpMessageConverter<T> { boolea...

文章介绍了spring-boot中实现通用auth的四种方式,包括 传统AOP、拦截器、参数解析器和过滤器,并提供了对应的实例代码,最后简单总结了下他们的执行顺序。 前言最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大,代码方面不明显,但感觉自己抹掉了 java、Tomcat、Spring 一直挡在我眼前的一层纱。对它们的理解上了一个新的层次。 好久没输出了,于是挑一个方面总结一下,希望在梳理过程中再了解一些其他的东西。由于 Java 繁荣的生态,下面每一个模块都有大量的文章专门讲述。所以我选了另外一个角度,从实际问题出发,将这些分散的知识串联起来,各位可以作为一个综述来看。各个模块的极致详细介绍,大家可以去翻官方文档或看网络上的其他博客。 需求很简单清晰,跟产品们提的妖艳需求一点也不一样:在我们...

Spring Boot 2.5.1 、2.4.7 已经发布。现在可从 repo.spring.io 和 Maven Central 获得。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.1</version> <relativePath/></parent> 这是一个提前发布的 BUG FIX 版本,由于官方在 发布 SpringBoot 2.5.0 后收到大量的 BUG 反馈。 如果你还没有开始使用 spring boot 2.5.0, 请直接使用 2.5.1 向下兼容。 修复缺...

今天看到群里有小伙伴问,这个异常要怎么解决: java.lang.IllegalArgumentException: Request header is too large 异常原因根据Exception MessageRequest header is too large,就可以判断这个错误原因是HTTP请求头过大导致的。 如何解决解决方法主要两个方向: 方向一: 配置应用服务器使其允许的最大值 > 你实用实用的请求头数据大小 如果用Spring Boot的话,只需要在配置文件里配置这个参数即可: server.max-http-header-size= 方向二:规避请求头过大的情况 虽然上面的配置可以在解决,但是如果无节制的使用header部分,那么这个参数就会变得不可控。 对于请求头部分的数据其实本身并不建议放太大的数据,所以,还是建议把这些数据放到body里更为合理。 ...

前几天Spring Boot 2.5.0发布了,其中提到了关于Datasource初始化机制的调整,有读者私信想了解这方面做了什么调整。那么今天就要详细说说这个重新设计的配置内容,并结合实际情况说说我的理解和实践建议。 弃用内容先来纠正一个误区。主要之前在版本更新介绍的时候,存在一些表述上的问题。导致部分读者认为这次的更新是Datasource本身初始化的调整,但其实并不是。这次重新设计的只是对Datasource脚本初始化机制的重新设计。 先来看看这次被弃用部分的内容(位于org.springframework.boot.autoconfigure.jdbc.DataSourceProperties),如果你有用过这些配置内容,那么新配置就很容易理解了。 /** * Mode to apply when determining if DataSource initializatio...

今年的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没有,那就自己配置下。 检查否存在版本不兼容的情况,如果不兼容他会下载合适的版本来帮助你完成构建 更多检查的...