- 博客(27)
- 收藏
- 关注
原创 Spring Boot 集成 prometheus,Grafana 监控
1 prometheusPrometheus是一个根据应用的metrics来进行监控的开源工具。具体可见官网2 Spring Boot 集成 prometheus2.1 构建 spring boot 应用pom 依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin
2020-07-01 14:19:56 777
原创 Java并发——深入 ThreadPoolExecutor 任务执行原理
1 Executor它用于执行指定的任务,把任务提交与任务执行分离,程序员不需要关注线程的管理,以及任务的执行。ExecutorService 接口对 Executor 接口提供更多的扩展,ThreadPoolExecutor 类提供可以扩展的线程池实现,而 Executors 只是对这些 Executor 提供方便的工厂方法。1.1 类图2 Future2.1 类图2.2 FutureTask类结构:class FutureTask { // 任务运行状态 /*
2020-06-27 18:52:10 346 1
原创 Java并发——深入 ReadWriteLock 原理
ReadWriteLock 背后维护着一对相互关联的锁,一个用于读,一个用于写。读锁可以被多个读线程并发获取,只要没有写线程。而写锁不支持此种情况。读写锁,读-读能共存,读-写不能共存,写-写不能共存。自实现如果某个线程想要读取资源,只要没有线程正在对该资源进行写操作且没有线程请求对该资源的写操作即可。public class ReadWriteLock { private int readers = 0; private int writers = 0; private int wr.
2020-06-09 10:13:02 423
原创 Java并发——别再问 ReentrantLock 的原理了
说到并发,我们会马上想到锁,使用锁来保证各线程之间能够安全访问临界区以及非线程安全的数据。那为啥 Java 要提供另一种机制呢?难道 synchronized 关键字不香吗?嗯,它确实在有些场景不是那么香,从而迫切需要提供一种更灵活,更易于控制的锁机制。那在去了解 Doug Lea 大佬写的锁机制原理之前,我们自己先想想应该怎么去实现。自实现思考1、需要一个标志是否可以访问共享资源,如果直接使用 boolean 变量来做标记,可以控制。但是,在如果在可以并发性访问某个共享资源,那么就不好做了.
2020-06-02 17:37:54 329
原创 分布式概述
分布式系统架构第一原则就是不分布式。分布式系统的两个关键目标:性能容错性场景业务不一样,容错性策略也不一样。设计思路:中心化思想:分布式集群中节点机器按角色分工,基本上分两种角色:“领导” 和 “干活的”。“领导” 通常负责分派任务并监督“干活的”。问题“领导”的单点问题主备两个“领导”的设计方案,可以是热备或冷备,可以是自动切换或手动切换。“领导”的能力问题去中心化思想各节点机器地位平等,不存在角色的分工。问题脑裂问题。脑裂指单个集群由于网络的.
2020-05-31 15:43:06 228
原创 Spring 源码阅读(三):自定义标签解析原理
在很多情况下,我们需要为系统提供可配置化支持。因此 spring 提供了可扩展 schema 的支持,扩展spring 自定义标签配置大致需要以下几个步骤:创建一个需要扩展的组件定义一个 XSD 文件描述组件内容创建一个文件,实现 BeanDefinitionParser 接口,用于解析 XSD 文件中的定义和组件定义创建一个 Handler 文件,扩展自 NamespaceHandle...
2019-03-11 22:46:20 271
原创 zookeeper 集群搭建
假设 zookeeper 集群规划为 3 台机器(zookeeper 推荐集群机器个数为奇数),分别命名为:zk1、zk2 和 zk3。安装解压 zookeeper 安装包到 /opt/module/ 目录下 tar -zxvf zookeeper-3.4.9.tar.gz -C /opt/module/在 /opt/module/zookeeper-3.4.9/ 目录下创...
2018-11-22 20:26:30 205
原创 Spring 源码阅读(二):bean 元素解析以及注册
在上一篇文章中,我们了解了加载 bean 的整个过程,在最后会走入到 XMLBeanDefinitionReader 类下的 doLoadBeanDefinitions() 方法,在此之前会对 Resource 进行封装,目的是考虑到 Resource 可能存在编码要求的情况,其次,通过 SAX 读取 XML 文件的方式来准备 InputResource 对象,最后将准备的数据通过参数传入真正的核...
2018-11-07 23:26:16 163
原创 zookeeper 源码:客户端连接过程
可能我们直接使用 zookeeper 的机会并不多,甚至都不会直接去使用,但是 zookeeper 作为分布式协调框架,在如今分布式系统领域有着非常大的作用,很多流行框架都有使用它,如分布式治理框架 dubbo,大数据领域中的 hbase,所以了解 zookeeper 是非常有必要的。 此篇文章是从源码的角度去了解下底层是怎么连接 zookeeper 的,肯定感觉很奇怪,一个连接操作有啥好了...
2018-11-04 15:44:13 3367
原创 Spring 源码阅读(一):Bean 的加载过程
在使用 Spring 的过程中,不知道大家有时候是否像我有一样的疑问,都说 Spring 主要提供两大机制:IoC 容器和 AOP 编程,而 IoC 容器是根本,提供控制反转的功能,我们在使用的过程中只管声明 bean 或使用注解的方式,IoC 容器就为我们管理这些对象,并且帮我注入对象依赖,那么这一切都是怎么做到的呢?既然有这样的疑问,那就得去弄明白,而想明白 IoC 容器的原理,首先就得需明白...
2018-11-01 23:53:47 287
原创 Mybatis 源码分析:数据源与连接池
1. mybatis 数据源原理分析mybatis 数据源 DataSource 的创建是在解析配置文件 <environment /> 元素下子元素 <dataSource /> 时创建的。配置如下:<dataSource type="POOLED"> <property name="url" value="" /> &
2018-10-30 16:32:02 216
原创 Mybatis 源码分析:事物管理
1. mybatis 事物概述mybatis 使用 Transaction 接口封装了数据库连接 Connection 的生命周期,它由 creation、preparation、commit/rollback 和 close 组成。public interface Transaction { Connection getConnection() throws SQLException;...
2018-10-25 20:47:47 211
原创 UML 类之间关系总结
UML 表示类之间的关系有如下几种:泛化关系(generalization)泛化关系其实就是说在面向对象编程中继承这个概念,表示的是 is-a 关系,即表示 A 是 B 的关系。实现关系(realization)实现关系从字面就可以知道它表示的是面向对象编程中对接口实现这个概念。聚合关系(aggregation)聚合关系是用一条带空心的菱形箭头的直线表示,如下图表示 A ...
2018-10-24 20:12:46 159
原创 Mybatis 源码分析:获取 Mapper 接口对象
我们知道使用 mybatis 作为 ORM 框架时,想要使用面向接口的方式操作数据库,即使用 mapper 文件形式,那么就需要获取 Mapper 接口对象,从而才能对数据库进行操作。那么问题来了,在 java 中是不可能对 interface 进行 new 的,那么 mybatis 是怎么做到面向 Mapper 接口的呢?那就从源码的角度揭开这层其实没有想象那么高深的面纱! 首先来看看 Sql...
2018-10-24 20:07:17 1214
原创 Mybatis 源码分析:Mapper 解析过程
在上一篇文章中我们已经知道了 SqlSessionFactory 对象的过程,但是没有具体对 XMLConfigBuilder 类的 parse() 方法进行讲解,那么此次就通过了解 mapper 的解析过程来顺便把 parse() 方法的流程给讲喽!核心代码就是通过 parseConfiguration() 方法解析 xml 配置文件下 &amp;lt;configuration/&amp;gt; 元素下的...
2018-10-23 23:43:11 464
原创 Mybatis 源码分析:SqlSessionFactory 的创建过程
最近工作不忙,上班时间看了下 mybatis 源码,学习学习…我们要使用 mybatis,就必须得有 SqlSession 对象,它是 mybatis 的核心接口,它提供了执行 sql 、获取 mapper 和管理事物的功能。而想要得到 SqlSession 对象。从源码可知 SqlSession 是一个接口,并不能直接 new 出来,那么肯定就有实现类让我们使用,而 mybatis 确实也提供...
2018-10-22 22:44:55 681
原创 HBase 配置
1.1 HBase 配置文件文件概述backup-masters默认情况在 conf/ 目录下是不存在的。它只是一个普通的文本问你件,内容是列举运行 backpu HMaster 进程的主机名hadoop-metrics2-hbase.properties连接 HBase Hadoop 的 Metrics2 框架,可以点击这里了解更多关于 Metrics2 框架的信息。默认情况下,...
2018-10-20 21:41:44 587
原创 HBase 入门
1.1 单机模式HBase 可以以单机模式方式运行,如果以此种方式运行,那么所有的 HBase 进程:Master、RegionServers 和 zookeeper 都运行在一个 JVM 实例上。1.1.1 配置在 conf/hbase-env.sh 文件配置 JAVA_HOME。编辑 conf/hbase-site.xml 文件,配置如下属性:&amp;lt;configuration&amp;gt...
2018-10-20 09:11:51 268
原创 kafka 入门
1 kafka 是什么Apache kafka is a distributed streaming platform,即官方定义 kafka 是一个分布式流式计算平台。而在大部分企业开发人员中,都是把 kafka 当成消息系统使用,即它是一个分布式消息队列,很少会使用 kafka 的流式计算。它有四个关键概念: topic kafka 把收到的消息按 top...
2018-08-26 22:48:50 5901 1
原创 异常:javassist.CannotCompileException: [source error] getPropertyValue
由于在 dubbo 接口服务中添加了一个接口,之后项目运行出现如下异常信息:java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.l...
2018-08-14 21:03:32 7719 6
原创 ApplicationContext 源码解析(一)加载 Bean 定义
1. ApplicationContext 文档定义 ApplicationContext 为为应用提供可配置化的核心接口,它提供如下功能: 访问组件的 BeanFactory 方法 方便的加载文件资源方式 发布事件 支持国际化 在应用中,使用最多的是它的实现类: ClasspathXmlApplicationContext。只需要 new 一个 Ap...
2018-08-08 21:51:19 404
原创 (一)RxJava 入门概述
RxJava 是为 Java 和 Android 响应式编程开发的特定实现,它深受函数式编程的影响。RxJava 对函数的组合,避免了全局状态和函数调用副作用的出现,并且它使用流的方式编写异步和基于事件的程序。它从生产者/消费者(观察者模式)开始,然后扩展了数十个操作,有创建、转换、错误处理和生命周期管理等操作。1. 响应式编程和 RxJava响应式编程是一个通用编程术语,它对变化作出响应...
2018-06-28 22:55:45 387
翻译 响应式编程入门
1. 响应式编程是对异步数据流编程在响应式编程中,最重要的就是数据流(data starems)。事件、消息 和 方法调用,甚至异常都可以用数据流来表达,因此,响应式编程中,我们必须观察这些流,当数据流中有数据时,我们对此作出响应。因此,我们要创建可以拥有任何事物的数据流,或在任何事物(如 点击事件、http 请求)可能要改变或发生时创建数据流。这样本质上它就拥有了异步特性。 Rea...
2018-06-27 18:52:06 1130
原创 异常: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]]
Spring Boot 出现 Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]],即 Tomcat 启动失败。原因:一般是 servlet-api jar 包冲突,因此可使用命令: mvn dependency:tree | grep servlet-api查找哪个依赖依赖了 se...
2018-06-26 21:52:21 8310 1
原创 异常:Cannot execute request on any known server
当在启动 spring cloud 微服务 provider 时,如果出现异常信息:Cannot execute request on any known server,原因是,在默认设置下,eureka 服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册。 配置如下:eureka.client.register-with-eureka=falseeure...
2018-06-21 15:57:13 23932 3
原创 Spring Cloud 入门概述
1. Spring Cloud 是什么?Building distributed systems doesn’t need to be complex and error-prone. Spring Cloud offers a simple and accessible programming model to the most common distributed system patte...
2018-06-20 22:47:04 247
原创 微服务
1. 微服务 与 微服务架构的区别?微服务关注的是服务的大小,是具体解决某一问题的一个组件,可独立部署执行。微服务架构是一种架构模式,它把一个单一的应用开发为一组小型服务的方法。每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用 HTTP 资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理。2. 微服务的优缺点:...
2018-06-18 09:11:10 1856 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人