自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Java MQTT V3客户端使用实践

一、先通过一个测试Java MQTT 客户端是否支持多线程并发的实例大概看看如何使用:生产者代码:public class MqttClientPublish { private static AtomicInteger count = new AtomicInteger(); private static int qos = 1; private static St...

2019-10-08 18:23:49 2966 4

原创 AbstractRoutingDataSource实现多数据源自动切换的原理分析

一、先说怎么用AbstractRoutingDataSource配置多数据源自动切换1、先配置多个数据源@Configuration@MapperScan(basePackages = “com.example.demo.mappers”, sqlSessionTemplateRef = “sqlSessionTemplate”)public class MultiDataSourceCo...

2019-09-23 16:13:06 757

原创 springboot源码解析(四)

@TOC一、综述上一节分析了环境上下文准备整体逻辑逻辑,留下来了一个点就是SpringApplication发布ApplicationEnvironmentPreparedEvent事件,相关监听器收到事件执行响应,其中有一个监听器执行的逻辑很复杂,也很重要,它就是ConfigFileApplicationListener。ConfigFileApplicationListener是我们springboot应用初始化外部配置然后加载到环境上下文对象里面来的核心逻辑。包括有名的appollo都是通过这个

2021-03-23 16:35:57 273

原创 springboot源码解析(三)

@TOC内容开场白上一节中,分析了springboot监听器的初始化和调用的逻辑,本节接着上一节来分析,本节分析springboot环境上下文初始化源码。首先看看整体的run方法代码,看看环境初始化代码在哪个具体位置public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicat

2021-03-22 16:59:25 228

原创 springboot源码解析(二)

内容上一次分析了SpringApplication的静态run方法是先实例化自己本身,然后再调用实例方法run。实例自己本身已经在上一节中分析完成,本节就分析实例run方法public ConfigurableApplicationContext run(String... args) { //开启并启动计时器 StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext

2021-03-17 21:04:44 238

原创 springboot源码解析(一)

这里写自定义目录标题springboot源码解析(一)总结springboot源码解析(一)@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)public class SpringbootWebApp { public static void main(String[] args) { SpringApplication.run(SpringbootWebApp.class, args);

2021-03-17 20:14:36 158

原创 基于springboot2的springmvc执行流程(四)

基于springboot2的springmvc执行流程(四)开始总结开始上一节分析到springmvc把参数名称和参数值解析出来后通过反射执行controller得到返回值,接下来要做的就是根据拿到的返回值然后匹配对应的ReturnValueHandler来解析返回值,如下图:今天就是要分析源码的点就是,如何匹配返回值处理器,返回值处理器是如何解析的,里面还有管内容协商的处理。1、这里的属性returnValueHandlers是从哪里来的呢?这个invokeAndHandle方法是在Servl

2021-03-08 20:07:35 142

原创 基于springboot2的springmvc执行流程(三)

基于springboot2的springmvc执行流程(三)总结上一节我们分析了RequestMappingHandlerAdapter里面整体处理流程。核心的逻辑就是生成一个ServletInvocableHandlerMethod对象,用于真正的执行handle逻辑,handle的代码如下:这个方法核心逻辑就两步,我都写了注释:1、执行请求得到返回值2、处理返回值这一节我重点分析处理请求得到返回值的逻辑进入到方法invokeForRequest这个方法是在ServletInvocabl

2021-03-04 21:10:28 177 1

原创 基于springboot2的springmvc执行流程(二)

基于springboot2的springmvc执行流程(二)上一节中,我们分析了springmvc的大致执行流程,把DispatherServlet里面的整体流程都分析了一遍,doDispatch方法里面有一行代码是整个流程最核心的逻辑,如下图:接下来我们进入到RequestMappingHandlerAdapter的handle方法进行源码分析:首先会进入RequestMappingHandlerAdapter的父类handle方法,handle方法是handlerAdapter的定级接口的方法,

2021-03-03 21:04:41 149 1

原创 基于springboot2的springmvc执行流程(一)

基于springboot2的springmvc执行流程(一)springmvc的详细流程图准备工作源码解析结语springmvc的详细流程图为了读源码,我们需要把源码下载下来,然后打断点,通过debug来分析原来的运行流程。下面我们就一起来分析源码。准备工作一、首先,创建一个最简单的springboot程序在pom文件里面加上org.springframework.bootspring-boot-starter-web依赖,就有了springmvc的功能。二、创建一个controller

2021-03-03 20:31:29 873 1

原创 spring bean 生命周期和bean的扩展点

理解spring bean 的生命周期,就能熟悉spring Ioc容器的初始化流程,就知道它有哪些扩展点,能给写框架或者业务都带来很多便利。1、代码演示bean生命周期public class SpringLifecycleDemo implements BeanFactoryPostProcessor, InstantiationAwareBeanPostProcessor, BeanPo...

2019-11-07 14:24:02 242

原创 一图看懂mybatis核心原理和执行流程

1、mybatis核心对象之间的依赖关系(1)DefaultSessionFactory、confugration、DefaultSqlSession、Excutor、Transaction之间的包含关系(2)(1)DefaultSessionFactory、confugration、DefaultSqlSession、Excutor、Transaction对象之间的依赖关系2、myba...

2019-10-28 16:36:22 1175

原创 EMQX broker安装与启动 以及启动中遇到的问题

1、先下载安装包下载地址: https://www.emqx.io/downloads最好下载zip包安装,rpm方式安装容易出现其他未知异常和不可预知的冲突。根据自己操作系统版本选择对应安装包,我选择的是emqx-centos6-v3.2.3.zip这个版本2、把下载好的包放到特定目录,然后解压$ unzip emqx-centos6-v3.2.3.zip3、启动EMQX进入em...

2019-10-28 14:44:47 28767 5

原创 JDK动态代理原理和mybatis的Mapper底层实现

一、jdk动态代理原理所谓动态代理就是代理对象是动态生成的,不像静态代理那样写好一个代理类,到时候直接new一个对象来代理就可以,静态代理当然没有动态代理灵活,扩展性也没有动态代理好,程序都讲究高内聚低耦合,所以动态代理相对于静态代理来说使用还是大很多。其实JDK动态代理要做的事情用三句话就可以总结:1、拦截目标对象2、查找生成指定代理类3、根据代理类的构造函数构造代理对象所以我们后面...

2019-10-21 18:12:56 732

原创 StampedLock相对于ReentrantReadWriteLock性能提升的原理

StampedLock比ReentrantReadWriteLock性能更好,主要体现在以下几个方面:1、增加乐观读功能,减少写线程饥饿现象出现2、StampedLock要比ReentrantReadWriteLock消耗小3、StampedLock增加了更多的无锁操作,使线程间阻塞减少到最小。那么它为什么能做到这些呢?主要实现的逻辑就是:1、写状态每写一次增加一次值,可以通过比较两次...

2019-10-18 09:49:27 765

原创 jdk1.8中ConcurrentHashMap的并发原理

ConcurrentHashMap的并发原理我们都知道jdk1.8之前ConcurrentHashMap是采用分段锁的机制允许多线程并发操作一个ConcurrentHashMap的方式来提高并发的,它的主要思想是优化HashTable中全局锁,让锁更加细粒度来达到更高的并发度的。但是JDK1.8里面的ConcurrentHashMap则完全不一样,它用到了CAS思想,使用的是乐观锁思想,乐观锁...

2019-10-12 18:20:40 1779

原创 关于ThreadLocal的几点误区

关于ThreadLocal的几点误区我们都知道遇到线程安全问题时可以用ThreadLocal来解决。但是关于这个类,很多人都存在一些误区。误区一:ThreadLocal就是一个map,key就是线程相关的参数,value就是要存放的数据。误区二:一个线程对应一个ThreadLocal,重复设置值会被覆盖。先看一个例子:public class ThreadLocalTest { ...

2019-10-11 12:28:00 1115

原创 HashMap源码解析

本文主要通过分析HashMap的各个字段的意义,常用方法的大致逻辑来大致了解HashMap的源码。一、HashMap的主要字段1、hashmap中有一个静态内部类Node,其结构并不复杂,下面情况它的代码:static class Node<K,V> implements Map.Entry<K,V> { final int hash; ...

2019-10-11 11:24:14 133

原创 spring基于注解的声明式事务原理分析

spring声明式事务管理jdbc数据源的流程和实现原理## 标题首先我们要搞清楚两个核心问题:1、spring声明式事务管理是基于springAOP的,是在目标方法上环绕执行事务逻辑。2、对于jdbc事务管理是基于同一个连接的。也就是jdbc一个事物中所有的操作必须在同一个连接中完成。事务逻辑的大致伪代码如下:Connection conn = DriverManager.getConn...

2019-09-29 11:51:09 653

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除