随笔分类 - 源码
源码
摘要:1 前言 上节我们看了下 OpenFeign 里的重试,在从源码的角度看它的执行原理的时候,又意外的遇到了一个【OpenFeign 】OpenFeign 下未开启重试,服务却被调用了两次 的问题的分析,那本节我们就来看看重试器的一个入场以及执行的过程。 2 源码分析 首先我们要知道在默认的情况下,O
阅读全文
摘要:1 前言 上节我们看了下 OpenFeign 里的重试,后来我从源码的角度看了下它的原理,发现一个诡异的情况,就是我没开启重试的情况下,我的服务却被调用了两次,这是为什么呢?本节我们来看看这个问题。 2 环境准备 首先准备一下,我这里有两个服务,一个是 demo 一个是 virtuous,本地启动的
阅读全文
摘要:1 前言 服务间的调用,大家可能会用到 OpenFeign 方式。那么当被调用服务可能会因为某种情况导致调用失败(这个失败可能好似下游服务重启了或者超时断开等)的情况下,我们想重试的情况下该怎么做呢?本节我们就来看看。 2 环境准备 首先准备一下,我这里有两个服务,一个是 demo 一个是 virt
阅读全文
摘要:1 前言 SpringBoot 它给我们留了很多的扩展点,这节我们就看看都有哪些(有的扩展点是基于 Spring 的,有的我就不具体强调到底是 SpringBoot 还是 Spring 的噢)。 另外每一种扩展点我们都从两个方面来看: 入口时机:入口就是 SpringBoot 解析或者寻找你自定义的
阅读全文
摘要:1 前言 之前看过 SpringBoot 启动后,Tomcat监听端口也就是正式接收请求的开启时机以及启动时向注册中心注册服务的时机,都是在刷新上下文的 finishRefresh() 阶段通过执行生命周期的 Bean 来得到执行的。 当有多个 Bean 的话他们的执行顺序有没有什么说法呢,出于这个
阅读全文
摘要:1 前言 最近项目上线,比较忙,没怎么写哈,一个月多了终于忙的差不多了。今儿看一个关于自增 ID 获取过程。 我们平时插入数据,关于主键的值,我们从程序的角度看的话,大概分两种一种是主动,一种就是被动。 主动:即我们程序在插入的时候直接主动赋予主键 id 的值,比如 uuid、雪花算法生成的id等,
阅读全文
摘要:1 前言 最近在看一些高并发的书籍 《Java高并发核心编程》,对线程池的关闭人家写的挺好,嘿嘿就拿来记录一下,方便梳理。说到关闭就涉及到线程池的状态以及流转,每种关闭方式对线程池带来的影响又是什么等,你还记得么,一起来回忆回忆吧。 2 线程池的状态 线程池总共存在5种状态,定义在ThreadPoo
阅读全文
摘要:1 前言 本文小看一下 Thread 类里的优先级。 2 优先级 在Thread类中有一个实例属性和两个实例方法,专门用于进行线程优先级相关的操作,与线程 优先级相关的成员属性为: private int priority;//该属性保存一个Thread实例的优先级,即1~10之间的值 与Threa
阅读全文
摘要:1 前言 上节我们主要看了下服务启动的注册时机,可以看到它最后的落点是在实例化 DiscoveryClient 的时候进行服务的注册,看完启动注册,那么我们本节就看看当服务关闭时候的一个下线时机以及过程。 当然服务关闭也分情况,比如我能想到的直接暴力关闭类似 kill -9,柔和优雅关闭的类似 ki
阅读全文
摘要:1 前言 我们平时在 Java 中处理异常的时候,通常的做法是使用try-catch-finally来包含代码块,但是Java自身还有一种方式可以处理就是使用UncaughtExceptionHandler,本节我们就来看看。 2 UncaughtExceptionHandler 2.1 认识 当
阅读全文
摘要:1 前言 Spring 帮我们创建 Bean,那么它是如何创建的呢?一种是 FactoryBean 类似提供工厂的创建,还有一种就是利用我们类的构造器进行创建。那么当我们有多个构造器的时候,它又是如何选择的呢,具体情况又是如何的,这节我们就来看看。 2 构造器的选择 2.1 选择的入场时机 我们这里
阅读全文
摘要:1 前言 上节我们使用javassist字节码增强的方式,来监控方法程序的执行耗时。这节我们再用一个字节码操作工具ByteBuddy来帮助我们实现更完善的监控程序。 2 Java agent 2.1 ByteBuddy 是什么 Byte Buddy是一个字节码生成和操作库,用于在Java应用程序运行
阅读全文
摘要:1 前言 上节我们已经知道通过配置-javaagent:文件.jar后,在java程序启动时候会执行premain方法。接下来我们使用javassist字节码增强的方式,来监控方法程序的执行耗时。 2 Java agent 2.1 Javassist 是什么 Javassist是一个开源的分析、编辑
阅读全文
摘要:1 前言 JavaAgent是在JDK5之后提供的新特性,也可以叫java代理。开发者通过这种机制(Instrumentation)可以在加载class文件之前修改方法的字节码(此时字节码尚未加入JVM),动态更改类方法实现AOP,提供监控服务如;方法调用时长、可用率、内存等。 比如 Skywalk
阅读全文
摘要:1 前言 Spring 帮助我们管理着 Bean,那么带来的一个思考就是 Bean 该维护一个实例呢?还是每次都获取新的呢?单例的依赖多例的作用范围的变化怎么处理呢?也就是 Bean 的一个作用范围的管理是怎么控制的呢?这就是我们本节要看的 Scope。 2 Scope 介绍 2.1 @Scope
阅读全文
摘要:1 前言 我们看过很多的时机,比如服务数据源的关闭时机、服务正式开始处理请求的时机或者Tomcat和SpringBoot的协同、还有 mybatis等一些插件的入场时机等,这节我们要再看一个时机,就是关于跟注册中心(Eureka、Nacos)的时机,比如你有没有思考过: 我服务还没起来,你就到注册中
阅读全文
摘要:1 前言 到现在我碰到的微服务,大多都是打的 Jar包,然后打镜像,推镜像,发布。当然也有 War 包的,但是还是比较少。我们这节主要看看 Jar包。 不知道大家有没有看过 SpringBoot 打好的 Jar 包的内容,以及它是如何启动的,这节我们就来看看。 2 Jar 包启动 2.1 单Java
阅读全文
摘要:1 前言 微服务中我们会用到数据源,数据源中其实就是管理我们的数据库连接,对于数据库而言,连接数是很珍贵的资源,所以释放无用或者长时间空闲的连接显得很重要。 那么对于微服务比如我们的 SpringBoot 当服务启动的时候会初始化数据源,那么停止的时候,是如何关闭数据源,释放连接的呢?这节我们就来看
阅读全文
摘要:1 前言 我之前看过插件的执行过程:【Mybatis】【插件】Mybatis源码解析-插件机制,主要是通过一个 Executor 的创建以及执行过程串了一下插件,我们这里简单回忆下: (1)Mybatis 把所有的插件都放进了 InterceptorChain 类里的 interceptors 集合
阅读全文
摘要:1 前言 ThreadLocal 是一个常用的工具类,它允许我们创建线程局部变量。这意味着每个线程都可以独立地改变自己的副本,而不会影响其他线程所持有的数据。然而 ThreadLocal 在高并发环境下存在一些问题: (1)内存占用:每个 ThreadLocal 变量都会在每个线程中持有一个独立的副
阅读全文

浙公网安备 33010602011771号