ClassLoader 类加载-type checking 对类加载的影响

Type Checking

Type Checking (类型检测) 的作用是分析程序在编译或者运行期间,其类型表达是否一致的一个过程。举个例子:如果一个变量被声明为 int 类型,那么他就不能被赋值为实际的值(或者字符串类型、或者其他任何类型)。java 语言的类型检测分为两种:

  • 静态类型检测(static checking): 问题在程序运行之前被自动找到,也就是在编译阶段完成的检查。静态类型检测更多的是关注在”类型“上。
  • 动态类型检测(dynamic checking): 问题在运行期间被检测,动态运行检测关注的是在”值“上。
阅读更多
【译】微服务(microservices)

解决方案系列-基于 SOFAArk 实现应用的动态装载和卸载

原文链接:解决方案系列-基于 SOFAArk 实现应用的动态装载和卸载

本篇主要来看下蚂蚁金服开源的 SOFAArk 这个产品。SOFAArk 是一款基于 Java 实现的轻量级类隔离容器,主要提供类隔离和应用(模块)合并部署能力;本文主要基于 telnet 指令的方式进行应用 Biz 的装载和卸载操作。去年在上海 KubeCon 大会上有分享过 《SOFABoot 动态模块实践》,主要是通过 SOFADashboard 来下发指令的,基于 SOFABoot 3.1.4 和 SOFAArk 0.6.0 版本;目前 SOFABoot 已经发布到 3.3.x+ ,SOFAARK 1.1.1 版本,其中 ,SOFAARK 提供了很多新的特性,包括全生命周期的事件机制、卸载优化等。

阅读更多

聊一聊 CopyOnWriteArraySet 的迭代删除

上周在工程中涉及到一个清理 Set 集合的操作,将满足设定条件的项从 Set 中删除掉。简化版本代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
Set<String> sets = new CopyOnWriteArraySet<>();
sets.add("1");
sets.add("3");
sets.add("3");
sets.add("4");
Iterator<String> iterator = sets.iterator();
while (iterator.hasNext()){
iterator.remove();
}
System.out.println(sets);
}

这个看起来是个很常规的问题,没有验证就直接发了线下环境,然后就收到了业务方反馈的服务无法正常使用的问题了。

阅读更多

SpringBoot 实践系列-Filter 中的异常处理和 Controller 中的异常处理

本篇主要是记录如何使用 SpringBoot 所提供的 ErrorController 这个接口能力;其内置了一个 BasicErrorController 对异常进行统一的处理,当在 Controller 发生异常的时候会自动把请求 forward 到 /error 这个请求 path 下(/error 是 SpringBoot 提供的一个默认的mapping)。BasicErrorController 提供两种返回错误:1、页面返回;2、json 返回。

阅读更多

一文详解蚂蚁金服分布式链路组件 SOFATracer 的埋点机制

原文链接 一文详解蚂蚁金服分布式链路组件 SOFATracer 的埋点机制

SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 TraceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的,这些链路数据可用于故障的快速发现,服务治理等。

GITHUB 地址:https://github.com/sofastack/sofa-tracer/pulls (欢迎 star)
官方文件地址:https://www.sofastack.tech/projects/sofa-tracer/overview/

2018 年末时至 2019 年初,SOFA 团队发起过 剖析-sofatracer-框架 的源码解析系列文章。这个系列中,基本对 SOFATracer 所提供的能力及实现原理都做了比较全面的分析,有兴趣的同学可以看下。

阅读更多

SpringBoot 源码系列-自动配置及 starter 机制解析

一家之言,如有任何错误,请批评指出,不胜感激

本篇主要来讨论研究两个问题:1、什么自动配置,2、如何编写自动配置

在使用 Spring 作为项目开发框架的过程中,当需要集成某个组件时,通常需要大量的 xml 配置才可以让项目工程 run 起来,下面先以 mybatis 为例,来看下如何使用 mybatis-Spring 模块,需要哪些必不可少的依赖和配置。

阅读更多

SpringBoot 源码系列-配置解析

注:本文基于 SpringBoot 2.1.11 版本

说到配置,你能想到的是什么?

在日常的开发和运维过程中,可以说配置都是及其重要的,因为它可能影响到应用的正常启动或者正常运行。相信在之前 Spring xml 时代,很多人都会被一堆 xml 配置折腾的够呛,除此之外,还有像数据库连接配置、缓存配置、注册中心配置、消息配置等等,这些相信大家都不会陌生。

配置对于开发人员或者运维人员来说可以比喻成一把”钥匙“,可以通过这把”钥匙“让我们的程序 run 起来,可以通过这把 ”钥匙“ 开启或者关闭应用程序的某一个功能。那么为什么会需要配置,对于一个应用来说,配置的意义又是什么呢?

阅读更多