随笔分类 - 源码 / SpringBoot
SpringBoot
摘要:1 前言 上节我们看了【SpringBoot】@Validated @Valid 参数校验概述以及使用方式,对于 @Valid 以及 @Validated 有了大概的认识,并也尝试了集中校验方式,那么本节我们重点看一下 SpringBoot 中 @Valid @Validated 的校验实现原理。
阅读全文
摘要:1 前言 最近在思考 SpringBoot 中的参数校验,比如我们写一段业务代码,首要的就是校验参数,单据编码空不空,数量空不空,客户空不空等,最简单的就是单独抽个方法逐个进行 if else 校验,高级点的整个校验工厂,当需要校验某种业务的时候,拿到校验器来校验,可以是简单工厂或者工厂方法都可以实
阅读全文
摘要:1 前言 SpringBoot 它给我们留了很多的扩展点,这节我们就看看都有哪些(有的扩展点是基于 Spring 的,有的我就不具体强调到底是 SpringBoot 还是 Spring 的噢)。 另外每一种扩展点我们都从两个方面来看: 入口时机:入口就是 SpringBoot 解析或者寻找你自定义的
阅读全文
摘要:1 前言 之前看过 SpringBoot 启动后,Tomcat监听端口也就是正式接收请求的开启时机以及启动时向注册中心注册服务的时机,都是在刷新上下文的 finishRefresh() 阶段通过执行生命周期的 Bean 来得到执行的。 当有多个 Bean 的话他们的执行顺序有没有什么说法呢,出于这个
阅读全文
摘要:1 前言 上节我们主要看了下服务启动的注册时机,可以看到它最后的落点是在实例化 DiscoveryClient 的时候进行服务的注册,看完启动注册,那么我们本节就看看当服务关闭时候的一个下线时机以及过程。 当然服务关闭也分情况,比如我能想到的直接暴力关闭类似 kill -9,柔和优雅关闭的类似 ki
阅读全文
摘要:1 前言 我们看过很多的时机,比如服务数据源的关闭时机、服务正式开始处理请求的时机或者Tomcat和SpringBoot的协同、还有 mybatis等一些插件的入场时机等,这节我们要再看一个时机,就是关于跟注册中心(Eureka、Nacos)的时机,比如你有没有思考过: 我服务还没起来,你就到注册中
阅读全文
摘要:1 前言 到现在我碰到的微服务,大多都是打的 Jar包,然后打镜像,推镜像,发布。当然也有 War 包的,但是还是比较少。我们这节主要看看 Jar包。 不知道大家有没有看过 SpringBoot 打好的 Jar 包的内容,以及它是如何启动的,这节我们就来看看。 2 Jar 包启动 2.1 单Java
阅读全文
摘要:1 前言 微服务中我们会用到数据源,数据源中其实就是管理我们的数据库连接,对于数据库而言,连接数是很珍贵的资源,所以释放无用或者长时间空闲的连接显得很重要。 那么对于微服务比如我们的 SpringBoot 当服务启动的时候会初始化数据源,那么停止的时候,是如何关闭数据源,释放连接的呢?这节我们就来看
阅读全文
摘要:1 前言 上节我们从整体上看了下数据源连接池的创建入口,以及连接池创建的时机和获取连接的过程,对于连接池的创建我们只是粗糙的看了下,那么这节我们就详细看一下 HikariDataSource 数据源的创建过程,以及连接池的创建过程。 2 实践 2.1 数据源的创建过程 那我们就还是从 DataSou
阅读全文
摘要:1 前言 上节我们看了看,SpringBoot 启动后都有哪些线程,看到有一部分是关于数据源连接池的,那么这节我们就看看数据源连接池都是如何工作的。 我们本节就从这两个问题看起: (1)数据源是什么时候创建的?连接池是什么时候创建的呢?一起创建的?还是分开创建的? (2)连接是什么时候放进连接池的?
阅读全文
摘要:1 前言 现在流行搞微服务,基本也都是 SpringBoot 打底的,那么你可否知道一个基本的 SpringBoot 启动后,都开辟了哪些线程呢?这节我们就来看看。 为什么要看呢?这个主要是增加对服务的了解,比如你管的支付中心或者订单中心,你都有哪些线程,各个线程都是干什么的,你不了解这些你怎么调优
阅读全文
摘要:1 前言 我上次有一篇是讲了从一个数据库连接的角度分析了 Spring + MyBaits + 事务三者的联系https://www.cnblogs.com/kukuxjx/p/17861966.html,这是在数据源固定的情况下。那么可能会遇到,比如按租户的分库,这种情况下我们会引入动态的数据源比
阅读全文
摘要:1 前言 我们知道 Spring 中有数据源、事务,Mybatis 里也有数据源,数据源可以理解为就是数据库连接 Connection,而 Spring中的事务设置的隔离级别、自动提交什么的,其实就是给当前的数据库连接设置的,那么 Mybatis 又是如何巧妙的拿到这个连接并执行相关的语句的呢?我们
阅读全文
摘要:1 前言 在复习 SpringBoot,顺便画画图,捋捋执行过程哈。画图工具用的 ProcessOn,感觉还行。 2 启动 2.1 初始化器、监听器 2.2 构建环境变量对象 2.3 创建上下文对象 2.4 准备上下文
阅读全文
摘要:1 前言 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。 我非常喜欢这种自动装配
阅读全文
摘要:1 前言 这节我们来讨论下 Spring MVC 和 Web容器(这里我们拿Tomcat来说)两者启动的思考,不知道大家有没有想过,我们的 SpringBoot 是在启动的时候会创建 Tomcat出来,那么我Tomcat什么时候知道你 SpringBoot 已经启动完毕可以处理请求呢?或者说 Spr
阅读全文
摘要:1 前言 本节我们主要是讲讲@Value的使用以及它是什么时候解析的并且解析后是如何注入值的呢?我们来看看。 2 @Value的使用 @Value 注解可以用来将外部的值动态注入到 Bean 中,在 @Value 注解中,可以使${} 与 #{} ,它们的区别如下: (1)@Value("${}")
阅读全文
摘要:1 前言 不知道大家对于配置文件的加载有没有考虑过是什么时候加载解析的,这节我们就来看看。 2 执行入口 我们就先来看看加载配置的入口,核心类就是 ConfigFileApplicationListener主要作用就是读取应用的配置文件并add到Environment的PropertySources
阅读全文
摘要:1 前言 我们都知道 SpringBoot 有个自动装配的机制,那你们知道平时如何使用么,以及他是什么时候执行的么,那么本节我们就来看看。 2 为什么要有自动装配 我们经历过SSM时期的时候,比如要引进Redis,是不是要先要导Maven依赖,还要进行大量的配置Bean,然后才能使用,而使用 Spr
阅读全文
摘要:1 前言 上节我们看了上下文的创建和准备,那么我们这节就来看看刷新上下文。 2 刷新上下文 首先就是我们的 run 方法,执行刷新上下文 refreshContext(context): // ###run方法 refreshContext(context); // ###SpringApplica
阅读全文