自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

寒山道杳

合抱之木,生於毫末;九層之台,起於累土;千里之行,始於足下。

  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spring Boot 初始化阶段解析

导语前面笔者写过一篇关于Spring Boot 自动装配的文章:再说Spring Boot的自动装配原理,这篇文章是从装配的角度上去进行阐述的,其间主要是对@SpringBootApplication这个注解进行展开,然后进行一些列的相关解析,由此很多童鞋可能并不能看出什么,那么下面笔者将会对此的用意进行说明。既然说完了自动装配,那么接下来自然要说说Spring Boot的初始化和运行等...

2020-03-11 11:31:48 230

原创 再说Spring Boot的自动装配原理

导语由于疫情原因,基本上大家过了半个暑假了,过年在家的时候,感觉貌似很少有人去写技术文章,于是我也随了大流,其实更多的原因是家里比较忙,最近忙完手头的一些事情,想着要继续回来写点东西,考虑了一下还是继续接着之前的那篇文章来写吧!前面的一篇说说Spring Boot(Spring)的自动装配机制文章中,简单大概笼统的说了一下Spring Boot的自动装配机制。其间应该也有一些错讹之处,不过...

2020-02-16 19:28:56 337

原创 说说Spring Boot(Spring)的自动装配机制

导语说到Spring Boot的特性是什么,大家都可能都会说Spring Boot的特性有自动化装配,当然我也看到网上有一些文章讲这方面的,但是貌似都是Copy来Copy去的,很多也没什么新意,基本上就是简单说说几个注解的含义等等。因此笔者想着是不是该写写这方面的文章,其实笔者也是现学现卖的。既然说的是现学现卖,那么肯定写的不是特别严谨,因此如果下面的文章中,有什么不足之处也请大家多多的之处。...

2020-01-20 23:50:02 251

原创 Spring Boot 的java -jar命令启动原理

导语在运用Spring Boot 后,我们基本上摆脱之前项目每次上线的时候把项目打成war包。当然也不排除一些奇葩的规定,必须要用war包上线,不过很多时候,我们对一些东西只是处在使用的阶段,并不会去深入的研究使用的原理是什么,这貌似也是大多数人的固定思维。或许正是如此,总会有些没有固定思维的人会去积极的探索原理,当然这话不是说我是积极的,我其实也是只原理的搬运工。今天和大家来简单的说下S...

2020-01-18 15:30:31 1528 1

原创 为什么不建议数据库建外键

导语有人可能在面试的时候被问到过,你觉得为什么不建议数据库通过构建外键做约束?你可以回答说,在《阿里Java开发手册》中是这样说的:不得使用外键与级联,一切外键概念必须在应用层解决。而且这个规约是强制的。但是我想这样的答案,可能并不能让面试官满意。当然,可能也有人说:在每次对表数据进行操作时,需要考虑外键的因素,太过于繁琐,但是这依然不是问题的重点。那么该如何回答这样的一个问题呢?下面我们...

2020-01-16 20:52:21 1388

原创 深入浅出Mybatis源码解析——结果集映射流程

前言在前一篇文章中,笔者补上了一篇文章,在那篇文章中,主要说了关于SQL语句的执行流程,当SQL执行完成后,那么肯定会返回一个结果集,对于这样的结果集是需要做一个映射的,就譬如你所返回的数据是表中的数据,但是要映射成Java中的实体类对象,便需要进行映射处理。说起来很抽象,那么就不多说了,还是直接进入主题,来看看在源码中是怎么实现的。一、包装结果列元信息对象在进入正文之前,还需要再...

2020-01-14 20:13:31 1731

原创 深入浅出Mybatis源码解析——SqlSession执行主流程(补)

前言由于Mybatis的源码系列文章,期间有长时间的脱节,导致笔者在写代码解析的时候中间出现了断裂,这个要和大家说声对不起,因此本篇文章是补深入浅出Mybatis源码解析——获取Mapper代理对象流程照片文章的,在这篇文章中简单的说了一下SqlSession执行主流程,也只是简单的说了说,后面的核心代码还没有涉及。说到这里,我们还是尽快进入主题,首先回顾下前面提到的那篇文章最后的代码,如...

2020-01-08 22:24:06 242

原创 深入浅出Mybatis源码解析——BoundSql获取流程

前言停更了一个多月,博主一直在忙于技术的学习与工作的繁忙之间,其实更多的是迷茫于技术中,但是想想还是要把Mybatis系列继续更新下去。博主也给自己在20年立了几个flag:深入学习Java、研究研究c++、第三个就是健身咯,只要是因为回首2019年,感觉自己在技术学习的道路上是在没走多少,因此想着这次必须要对自己狠一点了。先不多说了,回顾一下前一篇文章,由于时隔太久,笔者都有点记不清了。...

2020-01-06 19:32:57 1698

原创 深入浅出Mybatis源码解析——获取Mapper代理对象流程

前言在上一篇文章深入浅出Mybatis源码解析——SqlSource的创建流程中,说了SqlSource的创建流程这样一个完整的创建流程,在这个流程中包含了:动态SQL标签处理器、解析动态SQL、创建MappedStatement对象。这样给我们对SQLSource这样的整个流程有了一个大概的了解。而这个过程的作用其实就是把Mapper文件中的SQL语句进行相关的解析和封装,一遍后续的执行...

2019-11-20 23:34:44 278

原创 深入浅出Mybatis源码解析——SqlSource的创建流程

前言在前一篇文章深入浅出Mybatis源码解析——映射文件加载流程中,最后说到了创建SqlSource和创建MappedStatement对象,由于篇幅原因最后只好终止了,所以便只好在写一篇文章来说说SqlSource这样的一个创建流程是怎样的,在本系列第一篇完成后,也曾问过一两个认识的读者,有说不太看得懂,可能本人写博客不够图文并茂,所以在下一篇博文中准备来整理一张Mybatis的一个完整的...

2019-11-19 23:53:20 363

原创 深入浅出Mybatis源码解析——映射文件加载流程

前言在前两篇文章中,简单了说了下Mybatis全局配置文件解析加载流程和和全局配置文件的部分标签解析,但是还并没有涉及到核心的解析。所以本篇文章将开始核心解析的部分,那就是mappers标签的解析。可能有人很奇怪这为什么不在前两篇文章中拿出来说,因为mapper标签的解析在configuration标签同层标签解析中是一个比较特殊的部分,因此需要单独拿出来进行说明。好吧,说了这么多废话,还...

2019-11-18 23:46:19 157

原创 深入浅出Mybatis源码解析——全局配置文件解析(全局配置文件解析加载流程附篇)

前言首先要说下停更这么久的原因,因为工作上最近有点忙,加上学习债的繁重以至于没有继续更新Mybatis源码解析的文章,所以趁着忙里偷闲,来简单的更新一篇。在上一篇文章深入浅出Mybatis源码解析——全局配置文件解析加载流程中,我们讲到了全局配置文件的一个加载的过程,既然只是一个加载的流程,那就有解析的流程的啦!因此大家也猜到了,本篇正是讲全局配置文件中的一些解析,在parseConfig...

2019-11-16 23:18:56 136

原创 深入浅出Mybatis源码解析——全局配置文件解析加载流程

前言前面笔者其实已经写了两篇关于Mybatis源码解析的文章,可后面自觉其解析的不够全面,但是那两篇文章完全是按照debug模式,简单的走了一遍流程去解析的,对于Mybatis内部的很多类的属性以及类的作用都没有做相关介绍。后来想想还是觉得好好写几篇关于Mybatis的文章,其实这也是为了强逼自己要深度的去阅读一下源码。现在写这篇文章的同时,也是笔者自己在学习的一个过程,如果文章中有错误之...

2019-09-27 17:55:54 168

原创 Mybatis源码解析《二》

导语在前一篇文章Mybatis源码解析《一》中,已经简单了捋了一下mybatis核心文件和mapper配置文件的一个基本的解析流程,这是理解mybatis的基本,和spring中的配置文件的加载解析是一样的道理。既然说完了文件的加载,那么接下来便是关于mybatis的核心流程了,SqlSession的创建、SQL语句的操作、session的commit和关闭。在正式开始之前先回顾下上一篇文...

2019-08-05 17:09:25 141

原创 Mybatis源码解析《一》

导语在当前的日常开发中,mybatis这样的一个框架的使用,是很多程序员都无法避开的。大多数人都知道mybatis 的作用是为了避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。因为在开始接触使用Java操作数据库的时候,我们都是使用JDBC的。自从有了持久化框架之后,使用持久化框架已经是“理所当然”的了,虽然我们已经脱离了使用JDBC是阶段了,但是这毕竟是基础的知识,所以本篇...

2019-08-02 09:59:32 169

原创 Spring源码深度解析系列——自定义bean标签解析

导语前面已经通过两篇文章说了一下bean标签的解析,感兴趣的同学可以去看一下(Spring源码深度解析系列——bean标签解析《一》和Spring源码深度解析系列——bean标签解析《二》),而这两篇是关于默认标签解析的,既然存在默认的,那么自然就有自定义的了,本篇文章便开始自定义标签的解析。首先来回顾下bean解析初始代码吧! protected void parseBeanDefin...

2019-07-16 15:56:39 186

原创 Spring源码深度解析系列——bean的加载《一》

导语通过前面的几天文章,已经对xml的解析流程进行了阐述,那么在Spring中bean的工作就完成了?其实还没有,在第一篇文章“Spring源码深度解析系列——Bean的基本实现”的测试类中,第一行的代码是对bean解析的操作,第二句便是开始实行bean的加载动作了。那么这篇文章,就是对bean这样的一个加载流程进行讲解。一、初入Bean加载在说bean的加载之前,我们先来重新看...

2019-07-10 11:24:13 187

原创 Spring源码深度解析系列——bean标签解析《二》

导语前一篇文章中,已经把bean的属性解析完成了,也讲到了把xml文档转换为GenericBeanDefinition,这样在GenericDefinition中可以找到对应的配置。但是GenericDefinition也只是子实现类,大部分的属性还是保存在AbstractBeanDefinition中的,那么可以来先看下AbstractBeanDefinition中的基本属性来了解一下在xm...

2019-07-03 16:27:01 122

原创 Spring源码深度解析系列——bean标签解析《一》

导语在上一篇文章Spring源码深度解析系列——Bean的基本实现中,阐述了bean的加载、xml的验证模式、以及文件的获取等。但这还只是一个开始,在我们获取到文件后,且进行验证之后,我们便需要对这样的文件进行解析的工作了。所以,本篇文章将开始文件解析的代码讲解。在Spring中对于标签有默认标签和自定义标签这两种,但这两种方式的用法和解析是存在很大区别的,本篇文章将只针对默认标签和大家进...

2019-07-02 16:43:34 799

原创 Spring源码深度解析系列——Bean的基本实现

导语笔者之前虽然草草的读了关于Spring方面的源码,但也仅仅是草草的读了一下。并未作任何笔记,无奈记性太差,近些时间想起前人的话:好记性不如烂笔头。于是想着再重新阅读一下Spring方面的源码,顺便复习一下一些基础知识。接下来便开始Spring源码之旅了。首先在Spring源码系列中,笔者所使用的是 spring-boot-starter-parent2.1.6.RELEASE 版本,...

2019-06-27 18:27:17 316 2

原创 Java并发编程之ReentrantLock源码解析

一、关于ReetrantLock在上篇文章Java并发编程之AQS中,比较详细的说了一下关于AQS的设计和AQS的代码相关原理。在上篇文章中也说了,AQS是J.U.C的核心,是用来构建锁或其他同步组件的基础框架,这其中就包括了ReentrantLock。由于前面已经详细的说了AQS的原理,在本篇文章中,对于涉及到AQS相关的东西,便会一带而过。ReentrantLock和synchro...

2019-04-15 15:20:58 257

原创 Java并发编程之AQS

一、关于AQS队列同步器 AbstractQueuedSynchronizer 简称AQS,是用来构建锁或其他同步组件的基础框架(ReentrantLock、ReentrantReadWriteLock、Condition、LockSupport等等),它使用了一个int成员变量表示同步的状态,通过内置的FIFO队列来完成资源获取线程的工作,并发包作者(Doug Lea)期望它能够成为实现大部...

2019-04-12 10:27:49 384

原创 Java并发编程之synchronized底层实现原理

一、为什么出现synchronized对于程序员而言,不管是在平常的工作中还是面试中,都会经常用到或者被问到synchronized。在多线程并发编程中,synchronized早已是元老级的角色了,很多人都称其为重量级锁,但是随着Java SE 1.6对其进行各种优化之后,便显得不再是那么的重了。也正是因为多线程并发的出现,便产生了线程安全这样的问题,对于线程安全的主要原因如下:...

2019-04-09 19:24:26 3515

原创 Soul API网关解析之divide插件(上)

关于divide插件divide插件负载均衡实现divide插件ip端口探活总结关于divide插件divide插件是进行http类型请求处理的插件。所有http类型的请求都是经过divide插件进行负载均衡运行的。在前面文章中有介绍SoulWebHandler, 这里重申一下,当有相应的http请求时,在SoulWebHandler中会处理请求。同时也会根据不同的负载均衡算法,进行相应的转发请求。当然在soul-admin端,也会有相应的任务来检测缓存中是否有下线。divide插件负载均.

2021-01-29 18:26:56 98

原创 Soul API网关数据同步ZookeeperSyncData(附)

在前面的文章中介绍了zk的数据同步方式,但是当时只是从soul-bootstrap这个工程的角度去解析的。但是soul-bootstrap的启动也是要依赖于soul-admin的,那么本篇文章就继续从soul-admin工程的角度来看看。关于zk数据同步的方式,从soul-admin的角度来解析的话,它数据同步的答题步骤如下:启动构建ZookeeperDataInit类执行ZookeeperDataInit类中的run方法(源头是SpringApplication.run(…)方法)执行Zooke

2021-01-28 21:09:35 38

原创 Soul API网关数据同步之Nacos数据同步(admin端)

前一篇关于nacos的文章,是从bootstarp的角度去说, 那么本篇将从admin端的角度去看看。话不多说,那就开始吧!配置类DataSyncConfiguration这里必须要提一下DataSyncConfiguration这个类,因为在admin端几种数据同步配置类都是在此构建的,如下:@Configurationpublic class DataSyncConfiguration { // 这里通过 @ConditionalOnProperty 注解来控制 @Configuration

2021-01-28 21:08:49 38

原创 Soul API网关数据同步之Nacos数据同步

在前面的几篇文章中已经介绍了http、zk、websocket这几种同步数据的方式,也对其中的源码做了些分析。那么本篇文章将开始nacos数据同步的解析了。Nacos数据同步配置还是和前面一样要从配置文件开始,还是soul-admin、soul-bootstrap这两个工程的配置文件。soul-admin.yml:soul: database: dialect: mysql init_script: "META-INF/schema.sql" init_enable: t

2021-01-26 19:46:08 54

原创 Soul API网关数据同步之HttpSyncData

前言上一篇文章写了关于WebSocket数据同步,从配置文件到接口定义,再到接口实现,,最后解析了事件的发布与处理。整体的执行逻辑就是这样。那么本篇文章便开始HttpSyncData的解析之旅,那么话不多说,就开始吧!HTTP同步配置这里还是要涉及到soul-admin和soul-bootstrap,首先要在这两个里面开启同步配置,配置如下:soul-admin配置: sync: http: enabled: truesoul-bootstrap配置:soul :

2021-01-25 19:31:40 52

原创 Soul API网关数据同步之ZookeeperSyncData

前面介绍了WebSocket同步和Http同步,本篇将开始介绍Zookeeper同步的内容。Zookeeper数据同步配置在启动soul-admin和soul-bootstrap的时候,我们需要把其他的同步方式给关闭掉,然后开启zk的同步方式。soul-admin.yml: soul: sync: zookeeper: url: localhost:2181 sessionTimeout: 5000

2021-01-25 19:30:48 43

原创 Soul API网关数据同步之WebSocket

前言前面的一系列文章,先说了几个example的使用,然后说了SoulWebHandler、SoulPlugin、MatchStrage、MatchStrategy;前面几个主要从使用的角度说,后面的基本源于单独的类(接口)来进行源码解析的。那么从本篇文章开始将讲一些系统性的东西,那就从数据同步来开始我们说数据同步的代码分析模块。数据同步源头1、配置文件说到数据同步,我们要先说一下yml配置文件,这里涉及两个地方,一个是soul-admin,另一个是soul-bootstrap,这两个yml的文件

2021-01-23 00:44:06 53

原创 Windows10安装kafka

准备安装jdk安装配置kafka启动kafka测试注意:因为新版本的kafka自带zookeeper的,所以这里就不展示怎么安装zk了。安装jdkjdk是开发的必备环节,所以这里首先安装jdk便是必要的了。下载地址:oracle.com/java/technologies/javase-downloads.html。如图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDz5Se6D-1611287223867)(https://uploader.shim

2021-01-22 11:46:40 98 2

原创 Soul API网关源码解析之MatchStrategy

前言前面一篇文章讲到了SoulPlugin和插件选择器,主要是讲了SoulPlugin的定义与实现,以及选择器的匹配,但是并没有把选择器的匹配给写完。那么本篇文章就去这里继续进行解析。和大家进一步进行深入的分析。先看下代码:public class MatchStrategyUtils { /** * Match boolean. * * @param strategy the strategy * @param conditionDat

2021-01-21 21:32:26 54 2

原创 Soul API网关源码解析之SoulPlugin

前言上一篇文章中,我们提到了SoulWebHandler和WebHandler。WebHandler是WeFlux编程的核心接口,而SoulWebHandler是自定义实现的一个Handler。也简单的介绍了SoulWebHandler的作用与构建时机等等。当然在SoulWebHandler里最核心的是handle方法,关于这个方法的调用是在DefaultWebFilterChain.filter中,代码如下:@Overridepublic Mono<Void> filter(Server

2021-01-20 19:42:21 54

原创 Soul API 网关源码解析之SoulWebHandler

关于web handler前言1、关于SoulWebHandlerSoul 实际是通过Spring WebFlux来实现的,而在WebFlux中最核心的接口便是WebHandler,它是一个请求处理器,具体处理请求是由它的实现类实现的,它具有多个实现类。如图:但是我在Soul中,它有一个自定义的实现SoulWebHandler,如果是用Gateway网关的话,则要关注DispatcherHandler、FilteringWebHandler。在这里我们只需要关注SoulWebHandler即可,先

2021-01-19 20:27:13 80

原创 Soul API 网关源码学习《四》

整合sofa插件,接入网关一、启动服务作为RPC框架,sofa和dubbo在插件接入上有着一定的相似性。那么我们还是和前面的案例一样,先启动服务,启动服务的顺序是:soul-adminsoul-bootstrapsoul-examples-sofa不过在启动服务前,我们先看看配置文件:1、soul-examples-sofa pom 依赖<dependency> <groupId>org.dromara</groupId> <ar

2021-01-18 22:54:12 61

原创 Soul API 网关源码学习《三》

前一篇文章,我们通过 soul-examples-http 实例的启动初始化和调用的接口调用的流程过程进行了简单的介绍。本篇文章将会介绍与dubbo整合的使用(关于Spring Boot 整合 Dubbo,童鞋们可以自己去网上找示例看看)。示例代码及运行1、示例展示在看示例之前,先简单说下流程,首先在soul 网关 admin系统中的插件管理中打开插件,如下图:然后我们来看下,dubbo代码的示例,如图:上图中的“soul-examples-dubbo-api“是dubbo的api端,上面的一个

2021-01-18 22:52:36 27

原创 Soul API 网关源码学习《二》

基于examples下面的 http服务进行源码解析前言上一篇文章Soul API 网关源码解析《一》 中简单介绍了一下网关的含义,同时介绍了两种微服务开发常用的网关:Zuul 1.x(毕竟Zuul 2.x难产了)和Gateway。简单的阐述了一下两种网关的执行流程,以及Zuul 1.x网关被Gateway取代的原因。在介绍了这些之后,又介绍了一下Soul API 网关,这是一款是基于WebFlux实现的响应式的 API 网关,具有异步、高性能、跨语言等特点。其优点我们在后面的源码解析中再慢慢阐述。本

2021-01-18 22:50:13 39

原创 Soul API 网关源码学习《一》

Soul API 网关源码解析 01一、初识网关“网关”一个对开发人员众所周知的词语,那么什么是网关呢?在维基百科中的定义是:“网关是程序或者系统之间的连接点,扮演者程序和系统之间的门户,允许它们之间通过通讯协议交换信息,它们可能是同构和异构的系统”。其实,简而言之网关就是一种外部网络和内部服务之间的关卡,它可以最先得到外部的请求。当然从软硬件角度来看,网关可分为软件网关和硬件网关,硬件网关也就是我们所熟知的 LVS 和 F5,但是一般来说这不是我们所需要了解的,软件网关则有:Nginx、CGI、KO

2021-01-15 11:08:41 190

原创 ThreadLocal的使用与源码解析

前言对于ThreadLocal,那是众所周知的,因为在项目中它是常常被使用的,先简单说下平常使用的场景:设置每个线程所需要的独享数据 设置内存中需要的全局变量(譬如拦截其中的用户信息)在ThreadLocal类的注释中,作者给的便是这样的定义,如图:这段注释大体的意思是说(笔者英语极差):ThreadLocal这个类提供了thread-local变量,这些变量与普通变量不同,每个线程可以根据get或者set方法来操作自己独立初始化的变量副本。ThreadLocal 实例通常是类中的 pr

2020-11-22 23:04:12 27

原创 关于为什么线程通信的方法wait()、notify()、notifyAll()被定义在Object类里面?而sleep为什么定义在Thread类里面?
原力计划

导语在面试中经常会被问到多线程的知识,而在这个知识范围内,我们也会被问到关于wait、notify等这些方法。一般基础点的都会问使用的方法,当然这只是初级的问题,那么稍微深点的问题,可能就像我们标题这样:为什么线程通信的方法wait()、notify()、notifyAll()被定义在Object类里面?而sleep定义在Thread类里面?其实这样的问题更多的是体现在程序实际上面,意思就...

2020-03-18 18:40:43 1352

Java基本算法手册

java算法,基本算法,冒泡排序,递归排序。

2015-12-03

空空如也

空空如也

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

TA关注的人 TA的粉丝

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