Spring-Boot-Start-Extension

Spring Boot 启动扩展点总结

文章来源公众号:栈长

1、背景

Spring 的核心思想就是容器,当容器 refresh 的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot 更是封装了 Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。
我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性。让使用者以最小的代价接入。想要把自动装配玩的转,就必须要了解 spring 对于 bean 的构造生命周期以及各个扩展接口。当然了解了 bean 的各个生命周期也能促进我们加深对 spring 的理解。业务代码也能合理利用这些扩展点写出更加漂亮的代码。
在网上搜索 spring 扩展点,发现很少有博文说的很全的,只有一些常用的扩展点的说明。
所以在这篇文章里,我总结了几乎 Spring & Springboot 所有的扩展接口,以及各个扩展点的使用场景。并且整理出了一个 bean 在 spring 内部从被加载到最后初始化完成所有可扩展点的顺序调用图。从而我们也能窥探到 bean 是如何一步步加载到 spring 容器中的。

Spring-Boot-Cycle1

Spring 中的循环依赖

来源公众号:三太子敖丙,一个文绉绉的程序员
Spring 中的循环依赖一直是 Spring 中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到 Spring 中比较高阶的问题,那么循环依赖必定逃不掉。
如果你回答得好,那么这就是你的必杀技,反正,那就是面试官的必杀技,这也是取这个标题的原因,当然,本文的目的是为了让你在之后的所有面试中能多一个必杀技,专门用来绝杀面试官!
本文的核心思想就是,
当面试官问:

“ 请讲一讲 Spring 中的循环依赖。” 的时候,

我们到底该怎么回答?

主要分下面几点

什么是循环依赖?
什么情况下循环依赖可以被处理?
Spring 是如何解决的循环依赖?

同时本文希望纠正几个目前业界内经常出现的几个关于循环依赖的错误的说法

只有在 setter 方式注入的情况下,循环依赖才能解决(错)
三级缓存的目的是为了提高效率(错)

OK,铺垫已经做完了,接下来我们开始正文

Mysql-Procedure-HTML-Report

Mysql 存储过程拼接多个HTML报告表格案例

该篇文章不多做介绍,是按照前几篇存储过程拼接HTML的一个总结案例,也是记录第一次将存储过程写的这么长,并没有什么具体的学习意义。

可以做的优化有:

1、将该存储过程各个报告模板的代码块写成单独的函数方便后期维护。
2、存储过程的变量字段进行调整长度。
3、减少On循环嵌套

K8S-Dashboard

部署dashboard

官网:https://github.com/kubernetes/dashboard

注:1.8版本的dashboard,默认是可以跳过验证的。跳过登录是不科学的,因为我们在配置dashboard的rbac权限时,绑定的角色是system:admin,这个是集群管理员的角色,权限很大,如果任何人都可跳过登录直接使用,那你就等着背锅。所以这边用了1.10.0版本,并配置证书。dashboard当前已经出到了 2.2.0版本。

K8S-Coredns-1

为什么需要服务发现

在K8S集群中,POD有以下特性:

1、服务动态性强
容器在k8s中迁移会导致POD的IP地址变化

2、更新发布频繁
版本迭代快,新旧POD的IP地址会不同

3、支持自动伸缩
大促或流量高峰需要动态伸缩,IP地址会动态增减

|