Spring Boot

在前几天分享的关于Spring Boot Starter中的spring.factories文件不再推荐使用的视频下,看到有网友问了这样一个问题: 这个文件也是位于/META-INF/目录下面: 里面的大概是这样的: { "groups": [ { "name": "swagger", "type": "com.spring4all.swagger.SwaggerProperties", "sourceType": "com.spring4all.swagger.SwaggerProperties" }, { "name": "swagger.authorization", "type": "com.spring4all.swagger.SwaggerAuthor...

前段时间看到群里有吐槽swagger整合问题,当时没仔细看,总以为是姿势不对。 这两天正好自己升级Spring Boot版本,然后突然出现了这样的一个错误: Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null at springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWra...

昨晚我们讲了Spring Boot 2.7开始不再推荐使用spring.factories了,今天早上公众号(程序猿DD)上也推了,然后收到了不少反馈。其中有个网友说:要维护两个文件,太麻烦了。 作为一名优秀的程序员,当觉得麻烦的时候,第一反应就是要想办法偷懒! 所以,今天就给大家讲讲怎么样轻松的维护这两个文件! 开源项目:mica-auto为了解决维护麻烦的问题,这里要给大家推荐一个开源项目:mica-auto。不要看Star不多,DD用下来感觉还是非常好的。 GitHub地址:https://github.com/lets-mica/mica-auto 该项目的实现原理与Lombok类似,利用Java 6就开始支持的Annotation Processor,在编译期扫描注解和处理注解。这里mica-auto的主要解决问题是为Spring Boot自动生成spring.fac...

如果你是Spring Boot用户的话,一定有这样的开发体验,当我们要引入某个功能的时候,只需要在maven或gradle的配置中直接引入对应的Starter,马上就可以使用了,而不需要像传统Spring应用那样写个xml或java配置类来初始化各种Bean。 如果你有探索过这些Starter的原理,那你一定知道Spring Boot并没有消灭这些原本你要配置的Bean,而是将这些Bean做成了一些默认的配置类,同时利用/META-INF/spring.factories这个文件来指定要加载的默认配置。 这样当Spring Boot应用启动的时候,就会根据引入的各种Starter中的/META-INF/spring.factories文件所指定的配置类去加载Bean。 而这次刚发布的Spring Boot 2.7中,有一个不推荐使用的内容就是关于这个/META-INF/spring....

昨晚(5月19日),Spring Boot官方发布了一系列Spring Boot的版本更新,其中包括: Spring Boot 3.0.0-M3 Spring Boot 2.7.0 Spring Boot 2.6.8 Spring Boot 2.5.14 Spring Boot 3.0.0-M3此版本包括74个bug修复、文档改进和依赖项升级,其中值得注意的新功能包括: Micrometer Observation、Tracing和OtlpMeterRegistry的自动化配置支持 恢复对REST Assured和Pooled JMS的支持 Spring Boot 2.7.02.7.0是2.x版本的一个重要的新特性版本,在该版本中有这些亮点可以关注一下: 增加了Spring GraphQL的自动化配置和Metrics 增加@DataCoubaseTest和@DataElas...

大家好,我是DD! 今天跟大家聊聊这个问题:ApplicationStartedEvent与ContextStartedEvent有区别吗? 对了,最近花了几周时间,把SpringForAll社区 3.0上线了,社区的建设目标与之前一样,希望能够构建一个垂直于Java开发者的高质量技术社区!目前,已经有接近1000名注册用户,每天也有不少读者会发布一些帖子,技术氛围已经初步形成。如果你正在学习Java、Spring,你可以在这里分享你的见解,碰到的问题以及帮助别人解决问题。后面,我会持续精选一些,我觉得有意思的问题,在这里继续给大家分享一下! 关于这个问题,其实就是Spring和Spring Boot事件机制的理解。 虽然Spring Boot的基础是Spring,但Spring Boot并没有直接使用Spring中定义的常用事件,而是重新定义了一批。 它们都是继承自Sprin...

在 Kubernetes 中部署 Spring Boot 应用整体上来说是一件比较繁琐的事情,而 Spring Boot Operator 则能带给你更清爽简单的体验。 Spring Boot Operator 基于 Kubernetes 的 Custom Resource Definitions (CRDs) 扩展 API 进行的开发。 1. 打包 Docker 镜像在讲部署之前我们需要先将我们的 Spring Boot 应用打包成标准的 Docker Image。 Java 项目打包镜像用 Maven/Gradle 插件比较多,这里在介绍一个新的 Google 开源插件 Jib,该插件使用起来比较方便。 注意:Jib 打包的镜像会导致 Java 应用的 pid=1。在使用 Spring Boot Operator 进行发布时候,Operator 会设置 Kubernetes 的 ...

tinylog简介tinylog,与其他各种tiny开头的东西一样,是一个轻量级的开源日志解决方案。它本身只包含两个JAR文件(一个用于API,另一个用于实现),没有任何外部依赖关系。两个JAR文件的总大小只有178KB。 虽然是一个轻量级级别方案,但我们常用的基本日志管理功能都非常完备,它拥有与其他热门日志框架类似的API设计、多种可配置的日志输出选项、性能方面也是非常的出彩(这是官方给出的Benchmark)。 今天我们就来学习一下,如何在Spring Boot中使用tinylog记录日志。 整合tinylog通过之前Spring Boot 2.x基础教程:使用log4j2记录日志 一文的学习,回忆一下,整合其他日志框架,是不是可以总结为这样几步: 排除Spring Boot默认日志框架依赖 引入要使用的日志框架依赖 加入新日志框架的配置文件 好了,我们就按这个步骤来实战一下...

上一篇我们介绍了Spring Boot 2.x中默认日志框架Logback的使用。今天继续说说日志,接下来我们要讲是前段时间爆出核弹漏洞的Log4j2。虽然出了漏洞,让很多小伙伴痛苦了1-2周(加班),但不可否认的是Log4j2依然是目前性能最好的日志框架。所以,当Logback性能上无法支撑的时候,替换使用Log4j2还是最为快速便捷的方法。下面,我们就来学习一下如何在Spring Boot 2.x版本中,替换Logback,使用Log4j2记录日志。 动手试一试这里省略Spring Boot项目的基础创建,如果您还不会可以看本教程的快速入门。 下面的操作你可以基于Spring Boot 2.x中默认日志框架Logback一文的例子继续下去,也可以用任何一个Spring Boot 2.x的项目来尝试。 第一步:在pom.xml中引入Log4j2的Starter依赖spring-bo...

Spring Boot在所有内部日志中使用Commons Logging,但是对底层日志的实现是开放的。在Spring Boot生态中,为Java Util Logging 、Log4J2 和Logback 这些常见的日志框架都提供了自动化配置组件,每种Logger都可以通过配置在控制台或者文件中输出日志内容。默认情况下,当我们使用各种Starter的时候,会使用Logback来实现日志管理。 如何记日志在介绍写日志的方式有很多,这里就不对各种方式做罗列了,只讲DD用得最多的方式! 首先,在代码层面,我们不纠结到底用默认的Logback还是Log4j,而是直接用:Slf4j。 为什么不用管具体用Logback还是Log4j就可以去写代码呢?这个就是使用Slf4j好处,为什么是Slf4j?英文全称:Simple Logging Facade for Java,即:简单日志门面,它并不是...

最近log4j2的核弹级漏洞席卷了大部分互联网公司,升级版本成了这两周的核心任务。对于要升级到什么版本,最新版本2.16.0是最佳选择。那么如何快速升级,之前也给出了Spring Boot项目升级版本的最简方法。 大家只需要使用这样的简单配置,就可以把log4j2一系列包的版本都升级了。 如果这种方法不行,注意加了配置之后要reload下。另外,如果你不是Spring Boot项目,或者是通过其他方式引入的log4j2,那么需要单独处理,或者在你项目的根依赖里,直接写上log4j2的依赖并设置版本为2.16.0,强制覆盖其他地方引入的版本。 上面的配置很简单,但还是有读者不清楚为什么这样就可以了: 所以,今天就具体给大家说一下这个配置的原理。 一步步了解为什么下面我会以读代码寻找源头的方式,带你一步步了解这个配置。希望你通过本文除了知道这个问题是为什么,还能学会这种自己探究问...

相信这几天,很多小伙伴都因为Log4j2的史诗级漏洞忙翻了吧? 看到群里还有小伙伴说公司里还特别建了800+人的群在处理… 好在很快就有了缓解措施和解决方案。同时,log4j2官方也是速度影响发布了最新的修复版本。各应用方也可以执行较为稳定的修复方案了。 不过我看到群里发出来的各种修复方法,还真是不好看… 所以这里也提一下Spring Boot用户怎么修复最简单吧。 如果您正在学习Spring Boot,那么推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-boot-learning-2x/ 最简修复方式 有些小伙伴其实想到了直接通过Spring Boot的Starter去解决,所以还给Spring Boot提了Issue,希望spring-boot-starter-log4j2可以支持最新的2.15版本(提Issue的时...

11月29日 Spring Boot 2.6.1 正式发布,主要是为了支持本周即将发布的 Spring Cloud 2021。 此版本包括 11 个错误修复和文档改进。 Bug修复 模式分析 PatternParseException 的操作消息中的 matching-strategy 属性的名称不正确#28839 修复 ErrorPageSecurityFilter 部署到 Servlet 3.1 的兼容问题#28790 QuartzDataSourceScriptDatabaseInitiializer 不提供 MariaDB #28779的映射 “test” 和 “Inlined Test Properties” 属性源顺序不正确#28776 在没有 spring-security-web 的 Servlet 应用程序中使用 Spring Security 时出现 Array...

昨天,Spring官方正式发布了Spring Boot今年最后一个特性版本:2.6.0 同时,也宣布了2.4.x版本的终结。 那么这个新版本又带来了哪些新特性呢?下面就一起跟着DD来看看吧! 重要特性1. Servlet应用支持在 Cookie 中配置 SameSite 属性该属性可通过server.session.cookie.same-site属性来配置,共有三个可选值: Strict 严格模式,必须同站请求才能发送 cookie Lax 宽松模式,安全的跨站请求可以发送 cookie None 禁止 SameSite 限制,必须配合 Secure 一起使用 2. 支持为主应用端口和管理端口配置健康组这在 Kubernetes 等云服务环境中很有用。在这种环境下,出于安全目的,为执行器端点使用单独的管理端口是很常见的。拥有单独的端口可能会导致不可靠的健康检查,因为即使健康...

前两篇文章分别体验了Spring Authorization Server的使用。今天来讲讲Spring Authorization Server授权服务器的配置。强烈建议自己手动搭建一次试试,纸上得来终觉浅,深知此事要躬行。提升你的代码量才是提高编程技能的不二法门,这也是本篇教程的意义所在。同时也希望多多点赞,转发,多多支持作者原创分享。 配置依赖首先要创建一个Spring Boot Servlet Web项目,这个不难就不赘述了。集成Spring Authorization Server需要引入: <!-- spring security starter 必须 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>s...