自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(151)
  • 资源 (2)
  • 收藏
  • 关注

原创 【Druid源码阅读】11. 小结

今天总结下,前几天分析的 Druid 源码。由于每天可投入的有效时间有限,只把 Druid 最基本的流程大概看了下,但还是有些疑惑点的。最重要的就是获取连接方法中的初始化方法 init(),连接对象保存在3个数组中,后续创建和销毁线层都是通过操作这3个数组来完成的。再有就是可重入锁 lock,以及可重入锁上的2个条件empty 和notEmpty。用来控制线程池中如果连接数已经达到最大连接数时,线程阻塞,不再创建新的连接; 如果连接池中没有可用连接时,阻塞,并且通知创建线程恢复,...

2022-05-21 01:43:59 175

原创 【Druid源码阅读】10. 过滤器工作原理

昨天以 StatFilter 分析了责任链模式,今天还以 StatFilter 来举例。StatFilter 就是用来统计数据,用来支撑 Druid 监控的。其实大概看一下 StatFilter 的结构,可以看到有很多 public 方法,第一个参数是 FilterChain,并且代码实现都是使用调用过滤器的同名方法,过滤方法有很多,除了昨天介绍的 dataSource_getConnection,再举个例子:@Overridepublic void connection_commi

2022-05-19 23:59:28 351

原创 【Druid源码阅读】8. 对于连接的管理

目录testOnBorrowtestWhileIdletestOnReturn结论第6篇中,分析了如何获取连接,那获取连接后,Druid 是如何管理这些连接的呢?可以先给结论,是通过几个关键参数来控制的testOnBorrowtestOnReturntestWhileIdletestOnBorrow首先看 testOnBorrow,从字面理解,是从连接池中获取连接时,要测试连接是否可用。下面是代码中使用这个属性的几处地方:1179 和 1193 行,

2022-05-19 22:20:43 355

原创 【Druid源码阅读】9. 过滤器

在前面几天获取连接的代码中,经常会看到 filters 这个属性,今天一起来看下过滤器是如何工作的。找一个单侧,把里面连接串和用户名密码改成自己的:src/test/java/com/alibaba/druid/pool/Case0.java设置 stat 过滤器里面有一行代码,就是设置过滤器的:dataSource.setFilters("stat");public void setFilters(String filters) throws SQLException {

2022-05-19 00:45:10 862

原创 【Druid源码阅读】7. 驱动加载

在初始化 init() 方法中,可以看到2处关于 java.sql.Driver 驱动的方法:// bug fixed for dead lock, for issue #2980DruidDriver.getInstance();resolveDriver();先来看第1处,看注释是为了解决一个bug而增加的,主要解决了多线程死锁的问题,issue 链接:https://github.com/alibaba/druid/issues/2980DruidDriver 类的 static

2022-05-17 01:47:17 377

原创 【Druid源码阅读】5. 创建并运行销毁连接线程:createAndStartDestroyThread()

上一篇分析了创建连接线程,今天来看下销毁连接线程。1. 2种方式执行destroyTask 中封装的逻辑分2种情况,取决于使用者有没有在初始化连接池前设置destroyScheduler:protected void createAndStartDestroyThread() { // 这里创建真正销毁连接的任务 destroyTask = new DestroyTask(); // 如果在初始化连接池之前设置了销毁连接的定时执行器 destroySchedule..

2022-05-15 01:00:55 336

原创 【Druid源码阅读】6. 初始化后获取连接

前几天把 init 初始化方法大概分析了下,今天继续,把获取连接的部分分析完。public DruidPooledConnection getConnection(long maxWaitMillis) throws SQLException { init(); if (filters.size() > 0) { FilterChainImpl filterChain = new FilterChainImpl(this); return fil

2022-05-14 00:09:59 254

原创 【Druid源码阅读】4. 创建并运行创建连接线程:createAndStartCreatorThread()

现在我们来一起看下 创建并运行创建连接线程:createAndStartCreatorThread();protected void createAndStartCreatorThread() { // 只有在创建执行器没有设置时,才会创建创建连接线程 if (createScheduler == null) { String threadName = "Druid-ConnectionPool-Create-" + System.identityHashCode(..

2022-05-13 00:36:24 387

原创 【Druid源码阅读】3. 初始化连接之同步创建连接

书接上文,异步创建连接需要设置参数,如果不设置参数,使用默认配置,会进到同步创建连接的分支。if (createScheduler != null && asyncInit) { // 异步 for (int i = 0; i < initialSize; ++i) { submitCreateTask(true); }} else if (!asyncInit) { // 同步 // init connections..

2022-05-12 23:22:10 171

原创 【Druid源码阅读】2. 初始化连接之异步创建连接

今天就连着昨天的思路,来看下连接到底是如何初始化的。第14步: 初始化连接,数量为设置的初始连接数,并存放到数组中;(真正创建连接在这一步中)if (createScheduler != null && asyncInit) { // 异步 for (int i = 0; i < initialSize; ++i) { submitCreateTask(true); }} else if (!asyncInit) { //..

2022-05-12 01:04:07 1140

原创 【Druid源码阅读】1. 初识Druid

Druid源码阅读

2022-05-11 01:38:55 1047

原创 Java8 日期和时间API

Java8 日期和时间APIA new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your teamhttps://foggy-airbus-610.notion.site/Java8-API-71e484547208463395b5b269d51b81cc

2022-05-04 21:59:29 546

原创 AOP之 AspectJ

AOP之jac编译器

2022-04-16 21:46:06 241

原创 TCP握手的理解

TCP握手

2022-03-19 09:26:13 201

原创 使用 HSDB 探究多态原理

HSDB(Hotspot Debugger),是一个内置的 JVM 工具,可以用来深入分析 JVM运行时内部状态。位于 JDK 安装目录下的 lib/sa-jdi.jar 中,启动命令:(一定要使用 sudo,否则后面输入 pid 后连接不上)sudo java -cp sa-jdi.jar sun.jvm.hotspot.HSDB打开界面后,依次点击 File -> Attach to HotSpot Process…输入程序启动后的进程ID。测试程序代码如下:public abstra

2021-06-06 14:13:28 590

原创 Java 不同 String 相同 hashCode

快速找到 hashCode 相同的两个字符串:查看 String 的 hashCode() 方法,源码如下:public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) {

2021-06-05 22:15:33 778

转载 软件公司的两种管理方式 - 转自 CoolShell

本文转自酷壳:https://coolshell.cn/articles/4951.html软件公司的两种管理方式2011年07月06日陈皓评论110 条评论74,539 人阅读这篇文章是我的一个外国的同事Gareth推荐给我的,我和他一起工作过一段时间。他之所以觉得非常不错,是因为这篇文章让他身有体会,他觉得我也一定会有体会,并让我考虑一下翻译到我的blog上来。我看完后觉得很有代表性,而且觉得说得太对了,所以翻译过来,希望大家都读一读,最好转给你的公司老板。这篇文章来源于 ...

2021-03-02 08:59:37 134

原创 【Soul源码阅读】21.插件之大体流程

插件的接口 SoulPlugin 有很多实现,我们先关注以下这些,从名字上能看出来,这些就是 soul-admin 管理页面上插件列表里的代码实现。下面,以DividePlugin 为例,详细看看这优雅的设计。...

2021-02-06 03:05:00 203

原创 【Soul源码阅读】20.插件灵魂之选择器和规则

目录1.灵魂2.数据结构3.选择器4.规则1.灵魂这几天一直在看插件相关的功能,一直把核心概念忽略了,那就是所有的插件都有的:selector 和 rule。在看看官网文档https://dromara.org/zh/projects/soul/selector-and-rule/,里面第一句就是:选择器和规则是 soul 网关中最灵魂的东西。掌握好它,你可以对任何流量进行管理。都这么多天过去了,眼睛里净盯着具体对接的协议和同步功能,还有插件的具体使用,就没有关心过.

2021-02-05 01:09:49 344

原创 【Soul源码阅读】19.插件之 divide

目录1.启动2.开启 divide 插件3.添加选择器和规则4.验证4.1 负载均衡4.2 IP 端口探活官网文档https://dromara.org/zh/projects/soul/divide-plugin/divide插件是网关处理 http协议请求的核心处理插件。1.启动在网关的 pom.xml 文件中添加 starter 依赖,当然,divide 插件是默认支持的。(application-local.yml) <!--if .

2021-02-04 00:27:58 288 1

原创 【Soul源码阅读】18.插件之 sentinel

目录1.启动2.开启 sentinel 插件3.添加选择器和规则4.验证官网文档 https://dromara.org/zh/projects/soul/sentinel-plugin/sentinel 插件是网关用来对流量进行限流与熔断的可选选择之一。1.启动在网关的 pom.xml 文件中添加 sentinel的支持。 <!-- soul sentinel plugin start--> <dependency&gt

2021-02-01 22:27:56 99

原创 【Soul源码阅读】17.插件之 hystrix

官网文档https://dromara.org/zh/projects/soul/hystrix-plugin/hystrix插件是网关用来对流量进行熔断的核心实现。1.启动在网关的 pom.xml 文件中添加 hystrix starter 依赖 <!-- soul hystrix plugin start--> <dependency> <groupId>org.dromara</g...

2021-02-01 21:47:37 110 1

原创 【Soul源码阅读】16.启动多台admin,多个网关,形成一个集群

目录1.启动多台 soul-admin2.启动多台 soul-bootstrap3.启动多台业务系统4.验证同步4.1 负载均衡4.2 数据同步1.启动多台 soul-admin修改配置文件,把可以开启允许并行执行的复选框。application.ymlserver: port: 9095server: port: 9096启动后状态:2.启动多台 soul-bootstrap跟上面的一样,修改配置文件,打开并行执行的开关。.

2021-01-31 04:19:14 427

原创 【Soul源码阅读】15.soul-admin 与 soul-bootstrap 同步机制之 nacos 解析(下)

目录1.准备2.页面操作3.跟踪源码3.1 soul-admin 端3.2 soul-bootstrap 端上一篇讲到使用 nacos 同步策略,在项目启动时的同步机制,今天来看下在页面操作时,是怎么同步的。1.准备按照昨天的帖子(【Soul源码阅读】14.soul-admin 与 soul-bootstrap 同步机制之 nacos 解析(上)),把项目启动起来,soul-admin、soul-bootstrap 和 soul-examples-http 三个项目,当然还有

2021-01-30 01:11:14 1005 4

原创 【Soul源码阅读】14.soul-admin 与 soul-bootstrap 同步机制之 nacos 解析(上)

目录1.准备配套设施2.配置2.1 soul-admin 配置2.2 soul-bootstrap 配置3.启动服务4.源码分析1.准备配套设施启动 MySQL、Nacos。使用 docker 启动 Nacos(详情见官网github https://github.com/nacos-group/nacos-docker)。Clone projectgit clone --depth 1 https://github.com/nacos-group/nacos-

2021-01-29 03:18:46 318

原创 【Soul源码阅读】13.soul-admin 与 soul-bootstrap 同步机制之 http 长轮询解析(下)

目录1.前情回顾2.soul-bootstrap 长轮询任务3.soul-admin 中 /configs/listener 接口3.1比对数据是否有变化3.2阻塞并监听变化1.前情回顾书接上文,昨天的文章【Soul源码阅读】12.soul-admin 与 soul-bootstrap 同步机制之 http 长轮询解析(上) 4.2小节的坑(不开 zk 网关不能启动的错误),没研究明白,最后放弃了,把 soul-admin 和 soul-bootstrap 都关掉,把 soul

2021-01-28 02:16:27 192

原创 【Soul源码阅读】12.soul-admin 与 soul-bootstrap 同步机制之 http 长轮询解析(上)

1.前情回顾紧接着前两天的 zookeeper,今天来看下 http 长轮询。2.配置数据同步策略官网链接https://dromara.org/zh-cn/docs/soul/user-dataSync.html2.1 soul-admin修改application.yml 配置文件,打开注释的代码:soul: sync: http: enabled: true对应 Bean,默认 enabled 就是 true,只要配置 soul.s...

2021-01-27 04:03:19 880 3

原创 【Soul源码阅读】11.soul-admin 与 soul-bootstrap 同步机制之 zookeeper 解析(下)

目录3.3 启动 soul-bootstrap接上篇【Soul源码阅读】10.soul-admin 与 soul-bootstrap 同步机制之 zookeeper 解析(上)3.3 启动 soul-bootstrap在上篇 2.2 小节中,提到了ZookeeperConfig 配置类,在代码中搜索使用的地方,找到ZookeeperSyncDataConfiguration,源码如下:/** * The type Zookeeper configuration. * * @...

2021-01-25 23:53:18 205

原创 【Soul源码阅读】10.soul-admin 与 soul-bootstrap 同步机制之 zookeeper 解析(上)

1.前情回顾紧接着昨天的 websocket,今天来看下 zookeeper。想知道websocket 相关的出门左转【Soul源码阅读】9.soul-admin 与 soul-bootstrap 同步机制之 websocket 解析2.配置因为数据同步方式是双方规定的,必须保持一致,所以修改配置也是 soul-admin 和 soul-bootstrap 都要改。其实配置都是类似的,之前默认是 websocket,需要把 websocket 相关的配置注释掉,打开zookeeper .

2021-01-24 03:39:38 291

原创 【Soul源码阅读】9.soul-admin 与 soul-bootstrap 同步机制之 websocket 解析

1.前情回顾在第4篇中,我们分析了 HTTP 用户业务系统接入 Soul 网关后,会调用 soul-admin 的注册接口,把需要网关代理的接口信息全部注册到 soul-admin 上,在最后,会通过 websocket 长连接,将soul-admin 接收到的接口信息同步给 Soul 网关(即 soul-bootstrap),今天就来接着继续分析,数据是怎么同步到 soul-bootstrap 的。不清楚流程的可以出门左转看下第4篇文章【Soul源码阅读】4.HTTP 用户接入 Soul 调用 .

2021-01-23 00:44:29 843

原创 【Soul源码阅读】番外1.WebFlux服务器启动流程

WebFlux 服务器启动流程结合 Spring Boot 的启动流程讲解 WebFlux 服务启动流程,首先看一下启动时序图:1.run // SpringApplication.java /** * Static helper that can be used to run a {@link SpringApplication} from the * specified sources using default settings and user supplie...

2021-01-22 17:06:34 507 5

原创 【Soul源码阅读】8. Spring Cloud 用户接入 Soul 网关流程解析

官网文档中有详细的接入流程,地址:https://dromara.org/zh-cn/docs/soul/user-springcloud.html1.前置条件接入前,请正确的启动soul-admin(如有疑问,出门左转【Soul源码阅读】2.单机部署 Soul或官网文档-搭建Soul网关环境)2.引入网关对 Spring Cloud 的插件支持2.1 公共依赖在 soul-bootstrap 的 pom.xml 文件中,找到了被注释掉的3个依赖,打开注释:<!--so...

2021-01-21 16:54:17 260 1

原创 【Soul源码阅读】7. sofa 用户接入 Soul 网关流程解析

官网文档中有详细的接入流程,地址:https://dromara.org/zh-cn/docs/soul/user-sofa.html之前一直没接触过 sofa,官网的介绍如下:SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework. In Ant Financial, SOFARPC has been used for more than ten years and develo

2021-01-21 00:33:29 408

原创 【Soul源码阅读】6. Dubbo 用户接入 Soul 网关流程解析

OK,前面几天把 HTTP 用户 接入 Soul 网关大概了解了下,尤其是昨天 debug 到底层,发现里面配置了很多 plugin 插件,默认只开启了一个 divide 插件,用来转发 HTTP 请求的。今天不搞那么复杂的,要劳逸结合嘛,毕竟一口吃个胖子只存在于幻想中,还是一口口慢慢消化吧。来一起看下 dubbo 插件吧。根据官网文档操作这年头,各种帖子层出不穷,甚至还有内容农场,相信你也遇到过很多帖子,内容明明一样,各种错误也是直接 copy,对于需要解决问题的我,真的是恨之入骨。即使

2021-01-19 20:00:02 306

原创 【Soul源码阅读】5.GET 请求在 Soul 网关中流转的简单分析

前几天一直在外围转悠,试用了一下默认的 divide 插件,今天来研究下一个请求是如何通过 Soul 网关分发到真实服务节点的。通过浏览器或 postman 发送一个 GET 请求。http://localhost:9195/http/order/findById?id=95selector 和 rule 默认都打开日志了,可以在 SoulBootstrapApplication 的 console 控制台看到如下日志如下:2021-01-18 18:35:05.357 INFO 20836 -

2021-01-19 01:38:47 258 1

原创 【Soul源码阅读】4.HTTP 用户接入 Soul 调用 /soul-client/springmvc-register 接口逻辑分析

今天我们紧接着昨天分析继续,如果想知道昨天分析了点儿啥,出门左转【Soul源码阅读】3.HTTP 用户接入 Soul 流程解析。1. 前情回顾好的,言归正传,昨天分析到我们自己的业务系统,会调用 soul-admin 一个接口,把需要 Soul 网关管理的接口注册,今天就具体看看到底干了点儿啥。先看下调用的接口信息如下:/** * Instantiates a new Soul client bean post processor. * * @param soulSpringMvcC

2021-01-17 02:20:23 1822 1

原创 【Soul源码阅读】3.HTTP 用户接入 Soul 流程解析

昨天只是极简入门,关于网关是怎么感知到我们的应用的,相信小伙伴们一定有疑问,今天先来看下 HTTP 用户如何接入 Soul,以及接入的流程是怎样的。这是官网对于 HTTP 用户的文档,https://dromara.org/zh-cn/docs/soul/user-http.html。官网文档明确指出,Soul 网关使用 divide 插件来处理http请求,我们在 soul-admin 页面中看到,第一个就是 divide 插件,而且是默认开启的。Http请求接入网关,分2种情况,1种是 sp

2021-01-16 00:42:29 1238 4

原创 【Soul源码阅读】2.单机部署 Soul

上一篇中,我们对 Soul 有了一个简单的认识。在学习一项新技术时,我们先按照官网上的 Demo 把环境搭建起来。今天先搭建一个单机版测试环境。1.下载源码soul 的 github 地址:https://github.com/dromara/soul这里有2个选择:如果只是用来阅读 soul 源码,不会改动,不提交 PR的,直接 git clone 的地址。 如果学习源码后,希望参与到 soul 开源项目中,fork 到自己账号下,再 clone 自己账号下的 soul 项目。这.

2021-01-14 17:49:45 383

原创 【Soul源码阅读】1.初识 Soul

无论我们学习什么东西之前,都要先搞清楚我们要学习的是什么,就像一些哲学思考先要给出清晰的定义,否则后面的一切都无从谈起。从今天开始,我来和大家一起,学习一款非常优秀的开源网关项目 Soul。Soul 是什么呢?先来看下官网作者的定义:这是一个异步的,高性能的,跨语言的,响应式的API网关。我希望能够有一样东西像灵魂一样,保护您的微服务。参考了Kong,Spring-Cloud-Gateway等优秀的网关后,站在巨人的肩膀上,Soul由此诞生!里面提到了几个关键字,“异步”、“高性能”、“

2021-01-14 16:03:34 1156 1

原创 MySQL索引那些事儿

1.B+树一个节点有多个元素 所有元素都在叶子节点冗余 叶子节点间有指针且有序推荐一个B+树演示网站https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html2.InnoDB数据引擎中的页默认页大小为16kbmysql> show global status like 'Innodb_page_size';+------------------+-------+| Variable_name | Val.

2020-05-24 08:40:24 270

spark-1.6.3.zip

spark-1.6.3源码,学习spark1.x必备源码,从github上下载超级慢。

2019-02-20

exe4j安装包

将jar包封装成exe可执行文件,安装后即可使用,使用教程详见

2018-09-26

空空如也

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

TA关注的人

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