Spring Boot在为开发人员提供更高层次的封装,进而提高开发效率的同时,也为出现问题时如何进行定位带来了一定复杂性与难度.但Spring Boot同时又提供了一些诊断工具来辅助开发与分析,如spring-boot-starter-actuator.本文分享一个基于actuator与IDEA条件断点来定位自动配置未生效的案例.望对类似问题分析与处理提供参考. 欢迎关注我的微信公众号:jboost-ksxy 问题确认 在前文介绍的 Spring Boot从入门到实战:整合通用Mapper简化单…
一.背景 公司的项目前段时间发版上线后,测试反馈用户的批量删除功能报错.正常情况下看起来应该是个小 BUG,可怪就怪在上个版本正常,且此次发版未涉及用户功能的改动.因为这个看似小 BUG 我了解到不少未知的东西,在这里和你们分享下. 先声明下具体原因为了避免耽误找解决问题方法的小伙伴们的宝贵时间,因为项目重写了 WebMvcConfigurationSupport,如果你的项目没有重写这个配置类,赶紧到别处找找,祝你很快找到解决 BUG 获取经验值升级. 二.问题描述 用户批量删除功能:前台传递…
一.背景 公司的项目前段时间发版上线后,测试反馈用户的批量删除功能报错.正常情况下看起来应该是个小BUG,可怪就怪在上个版本正常,且此次发版未涉及用户功能的改动.因为这个看似小BUG我了解到不少未知的东西,在这里和你们分享下. 先声明下具体原因为了避免耽误找解决问题方法的小伙伴们的宝贵时间,因为项目重写了WebMvcConfigurationSupport,如果你的项目没有重写这个配置类,赶紧到别处找找,祝你很快找到解决BUG获取经验值升级. 二.问题描述 用户批量删除功能:前台传递用户ID数组…
1. SpringBoot启动主程序类: @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 每次我们直接直接启动这个启动类,SpringBoot就启动成功了,并且帮我们配置了好多自动配置类. 其中最重要是 @SpringBootApplicatio…
springboot版本:2.1.6.RELEASE SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @ConfigurationProperties 等几个注解来进行自动配置完成的. @EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包里的 loadFactoryNames(),将 autoconfi…
191214-SpringBoot 系列教程自动配置选择生效 写了这么久的 Spring 系列博文,发现了一个问题,之前所有的文章都是围绕的让一个东西生效:那么有没有反其道而行之的呢? 我们知道可以通过@ConditionOnXxx来决定一个配置类是否可以加载,那么假设有这么个应用场景 有一个 Print 的抽象接口,有多个实现,如输出到控制台的 ConsolePrint, 输出到文件的 FilePrint, 输出到 db 的 DbPrint 我们在实际使用的时候,根据用户的选择,使用其中的一个…
@SpringBootApplication @SpringBootApplication表示SpringBoot应用,标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就运行这个类的main方法来启动应用: @SpringBootApplication是组合注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfigu…
摘要 本文主要介绍如何把一个spring的项目(特别是一些公共工具类项目),基于spring boot的自动配置的思想封装起来,使其他Spring-Boot项目引入后能够进行快速配置. AutoConfiguration Spring-boot的一个重要特性就是提供了各种各样的AutoConfiguration.例如DataSourceAutoConfiguration.这样我们只需要在配置文件中进行如下配置 spring: datasource: url: jdbc:mysql://xxxxx…
SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @ConfigurationProperties 等几个注解来进行自动配置完成的. @EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包里的 loadFactoryNames(),将 autoconfig 包里的已经写好的自动配置加载进来. @Condit…
源码学习系列之SpringBoot自动配置源码学习(篇一) ok,本博客尝试跟一下Springboot的自动配置源码,做一下笔记记录,自动配置是Springboot的一个很关键的特性,也容易被忽略的属性,因为这个属性被包括在@SpringBootApplication注解里,所以不去跟一下源码都不知道还有这个属性,ps:本博客源码基于SpringBoot1.5.7版本 @SpringBootApplication ok,跟一下@SpringBootApplication,发现@SpringBoo…
源码学习系列之SpringBoot自动配置(篇二)之HttpEncodingAutoConfiguration 源码分析 继上一篇博客源码学习系列之SpringBoot自动配置(篇一)之后,本博客继续跟一下SpringBoot的自动配置源码 ok,先复习一下上一篇的内容,从前面的学习,我们知道了SpringBoot的自动配置主要是由一个选择器AutoConfigurationImportSelector,先通过选择器将自动配置的类加载到Spring容器 注意点: List configurati…
介绍 构建Springboot项目时我们会创建一个启动类 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 1. 在之前使用Spring框架时,我们一般会创建web.xml和spring-context.xml等文件配置组件扫描.调度器.视图解析器…
最近在整理springBoot国际化时,发现国际化没有生效,通过报错提示在 MessageTag -> doEndTag处打断点 最后发现messageSource并不是ResourceBundleMessageSource,而是DelegatingMessageSource代理对象,其内部代理的对象为null,可知springboot自动配置的ResourceBundleMessageSource没有生效. springBoot启动时,会自动加载MessageSourceAutoConfigu…
https://juejin.im/post/5ce5effb6fb9a07f0b039a14 前言 小伙伴们是否想起曾经被 SSM 整合支配的恐惧?相信很多小伙伴都是有过这样的经历的,一大堆配置问题,各种排除扫描,导入一个新的依赖又得添加新的配置.自从有了 SpringBoot 之后,咋们就起飞了!各种零配置开箱即用,而我们之所以开发起来能够这么爽,自动配置的功劳少不了,今天我们就一起来讨论一下 SpringBoot 自动配置原理. 本文主要分为三大部分: SpringBoot 源码常用注解拾…
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何分析SpringBoot源码模块及结构?--SpringBoot源码(二) 上一篇分析了SpringBoot源码结构及各个模块pom之间的关系后,那么此篇开始就开始解开SpringBoot新特性之一--自动配置的神秘面纱了.因为SpringBoot自动配置原理是基于其大量的条件注解ConditionalOnXXX,因此,本节我们先来撸下Spring的条件注解的相关源码. 2 SpringBoot的派生条…
前言 springboot自动配置关键在于@SpringBootApplication注解,启动类之所以作为项目启动的入口,也是因为该注解,下面浅谈下这个注解的作用和实现原理 @SpringBootApplication注解 查看源码@SpringBootApplication,由以下组成 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfigur…
之前对SpringBoot的自动配置原理进行了较为详细的介绍(https://www.cnblogs.com/stm32stm32/p/10560933.html),接下来就对自动配置进行源码调试,探究下这个配置过程中各参数的情况. 这里对AutoConfigurationImportSelector类的selectImports()方法打了4处断点,将着重对这4处进行调试. 第一处断点: 该方法的源码如下: 这一步就是将META-INF/spring-autoconfigure-metadat…
Introduction 我们知道,SpringBoot之所以强大,就是因为他提供了各种默认的配置,可以让我们在集成各个组件的时候从各种各样的配置文件中解放出来. 拿一个最普通的 web 项目举例.我们需要使用 servlet 容器,SpringBoot 就提供了嵌入式的 Tomcat 作为默认容器,不需要一行配置就能直接以最普通的 Java 程序的方式启动:java -jar:接收请求需要一个网络端口,默认配置好8080:处理请求需要 servlet 的多线程特性,默认配置好了最大线程数为20…
前言 不知道从啥时候开始项目上就一直用MyBatis,其实我个人更新JPA些,因为JPA看起来OO的思想更强烈些,所以这才最近把JPA拿出来再看一看,使用起来也很简单,除了定义Entity实体外,声明自己的业务接口继承JpaRepository接口,什么逻辑也不用写,基本的增删改查,分页,排序就都搞定了. 我在实现JpaRepository接口时就有个疑问,那么实现类是什么?如果用过MyBatis肯定也知道,是接口和实现类之间有一个代理类专门来处理这块的业务,那么JPA这块是否也会有一个代理类来…
SpringBoot自动配置原理 前言 后面还会讲到SpringBoot自动配置原理,会主要讲解@EnableAutoConfiguratuon注解帮助我们做了什么事情,是如何自动把自动配置类扫描到容器中的,建议看完这篇后,两篇配合使用,传送门 package com.staticzz.springboot_quick; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoc…
Spring自动配置 从@SpringBootApplication注解说起 SpringBoot会根据类路径下的类自动配置,省去了编写繁琐的xml配置文件.原本基于xml配置bean的方式编程基于Java代码,并且可以条件化配置,根据不同的场景配置也随之不同.是不是很智能 为了清楚SpringBoot自动配置的原理,我们从最简单的SpringBoot的启动类说起,看一个简单的启动实例 @SpringBootApplication public class Application { publi…
springboot自动配置原理以及手动实现配置类 1.原理 spring有一个思想是"约定大于配置". 配置类自动配置可以帮助开发人员更加专注于业务逻辑开发,springboot在启动的时候可以把一些配置类自动注入到spring的IOC容器里,项目运行之后就可以直接使用这些配置类的属性和方法等. springboot有一个全局配置文件,application.properties / application.yml,各种属性都可以在文件中进行自定义配置. 自动配置实现原理: 我们都知…
源码分析 SpringBoot自动配置流程 ​ ​ 首先,我们要了解在@SpringBootApplication注解的内部,还具有@EnableAutoConfiguration,@SpringBootConfiguration,@ComponentScan三个主要注解. @SpringBootConfiguration //标注该类是配置类,需要通过该类查找自动配置文件 @EnableAutoConfiguration //自动配置的关键注解 其内部就是执行自动配置的代码 @Componen…
背景描述 为了适配新功能,裸金属服务的磁盘镜像中做了如下修改: dracut添加network, iscsi模块 grub添加rd.iscsi.firmware=1参数 删除网卡配置文件/etc/sysconfig/network-scripts/ifcfg-* 禁止network服务开机启动,防止网络中断 修改镜像后,需对裸金属服务既有功能进行测试,包括初始化密码.重置密码.从卷创建.从备份创建.重新部署.网卡bond配置等等. 环境准备 基础网段:10.33.46.0/24 裸金属节点:72…
首先,写源码分析真的很花时间,所以希望大家转的时候也请注明一下,Thanks♪(・ω・)ノ SpringBoot最大的好处就是对于很多框架都默认的配置,让我们开发的时候不必为了大一堆的配置文件头疼,关于Spring boot的配置类在哪里,怎么看,我在https://www.cnblogs.com/yangfeiORfeiyang/p/9356981.html这篇博客里已经写了,这里就不再赘述,我们就直接看看它是怎么注册这些配置的吧 首先,因为Spring boot我们点进@EnableAuto…
spring-boot 相对于 spring,很重要的一个特点就是自动配置,使约定大于配置思想成功落地.xxx-spring-boot-starter 一系列引导器能够开箱即用,或者只需要很少的配置(对于初学人员)就是因为已做了默认的自动配置. 自动配置在一开始就初始化了一些配置,同时提供修改配置的入口. 整体结构 spring-boot-autoconfigure 包是 spring-boot-starter 中一个非常重要的包,其中提供了自动配置功能,还对常用依赖,设置了默认配置. 依赖 其…
一前言 springboot 2.0.0版本分析,整体的自动配置流程如下: 具体配置参考官方文档:springboot-doc 二 @SpringBootApplication 核心注解@SpringBootConfiguration其实就是@Configuration注解,表示是个配置类:@EnableAutoConfiguration表示springboot的自动配置机制:@ComponentScan表示扫描允许注册额外的配置类: @SpringBootApplication = @Conf…
主程序类的注解 @SpringBootApplication 注解,它其实是个组合注解,源码如下: @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter( type = FilterType.CU…
解析思路 我们建立好一个SpringBoot的工程后,我们将从启动类,SpringBootApplication开始进行探究. 开始解析 首先我们建立一个 Springboot的工程.找到启动类,我们看到启动类上有一个注解@SpringBootApplication.我们从这开始. 我们通过idea点进去看看 这是两个关键的注解,我们先来看一下@SpringBootConfiguration里面是个啥. 发现就是个普通的@Configuration注解,至此,破案. 我们要重点来看@Enable…
首先我们先来看springboot的主程序类,主程序类中使用@SpringBootApplication注解来标记说明这是一个springboot应用,查看该注解源码如下图: 图中的@EnableAutoConfiguration注解开启了自动配置. 我们再深入一层,如下图: 上图代码中EnableAutoConfigurationImportSelector用来给容器中导入一些组件,再进入一层: 注意标记出来的位置,从侧面说明了spring扫描所有jar包类路径下  META-INF/spri…