#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...

2022年3月24日,Spring官方发布了Spring Boot 3.0.0 M2版本发布。这个版本包含50个Bug修复、文档改进和依赖更新。 M2版本主要是对M1版本的问题修复与更新,之前关于Spring Boot 3.0.0 M1版本,我们已经介绍过,下面一起结合了解一下整个Spring Boot 3的进展。 M1版本回顾 Java基线从 Java 8 提升到了 Java 17 从Java EE APIs 到 Jakarta EE 移除一些还未支持Java 17的组件,包括:Apache ActiveMQ、Atomikos、EhCache 2、Hazelcast 3 M2版本更新M2版本对于M1主要的更新内容如下: 恢复EhCache 3的支持 恢复H2 Console的支持 改进@ConstructorBinding的检测 更多改版本的更新可通过下面的了链接查看:htt...

大家好,我是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默认日志框架依赖 引入要使用的日志框架依赖 加入新日志框架的配置文件 好了,我们就按这个步骤来实战一下...

2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M1。 下面一起来来看看Spring Boot 3.0.0 M1版本都有哪些重大变化: Java基线从 Java 8 提升到了 Java 17这个在最早的Spring Boot 3相关预告中就已经知道了,Java 17将成为未来的主流版本。那么问题来了,大家都把Java 17的升级提上日程了吗?如果你对Java 8之后的各种版本的信息不太了解的话,这里有份 4.6 W 字的总结,或许你可以读一读。 从Java EE APIs 到 Jakarta EESpring Boot 3开始,所有的Java EE Api都需要迁移到Jakarta EE上来。大部分用户需要修改import相关API的时候,要用jakarta替换javax。比如:原来引入javax.servlet.Filter的地方,需...

上一篇我们介绍了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,即:简单日志门面,它并不是...

12月22日,Spring官方发布了Spring Boot 2.6.2版本,此版本包括55个错误修复、文档改进和依赖项升级。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.2</version> <relativePath/> <!-- lookup parent from repository --></parent> 缺陷修复 当getter或setter被子类覆盖属性配置类型,在属性绑定期间使用的getter和setter的时候会有所不同 #29143 Databa...

12月22日,Spring官方发布了Spring Boot 2.5.8版本,此版本包括46个错误修复、文档改进和依赖项升级。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.8</version> <relativePath/> <!-- lookup parent from repository --></parent> 缺陷修复 DatabaseInitializationDependencyConfigurer触发工厂Bean的饥饿初始化 #28977 当应用程序依赖...

Spring Boot Admin 2.5.5 发布,这是一个错误修正版本。现在可以从 maven 仓库 下载 <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.5.5</version></dependency><dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> ...