自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 图文讲解“延时双删”原因及必要性

Redis延时双删原因及必要性

2023-07-14 22:58:51 6115 2

原创 @RefreshScope 和 @Scope的使用及源码解析

Scope1、@Scope代表spring Bean对象的作用域,一般分为singleton、prototype、request、session、application。其中request、session、application的缓存在GenericWebApplicationContext.postProcessBeanFactory方法中创建2、@Scope的注解proxyMode的参数,默认为DEFAULT,还有INTERFACES、TARGET_CLASS两种。

2023-03-28 17:58:04 1633

原创 @Resource和@Autowired 区别和源码详解

@Resource和@Autowired 区别和源码详解

2023-03-18 18:44:59 778

原创 @Component@Import@Bean加载顺序解析

@Component@Import@Bean加载顺序解析

2023-02-24 22:57:59 5030 3

原创 <? extend T> 和 <? super T> 使用

java 基础

2023-02-17 16:08:48 348

原创 Spring 注入Bean对象,父类也可以当作配置类

Spring Bean注入

2022-08-19 11:45:17 907

原创 B树和B+树定义

B树和B+树

2022-07-11 18:37:55 164

原创 Java Cglib 动态代理intercept的参数含义

如何使用CGLIB创建动态代理,网上已经有很多资料,这里就不再赘述。直接说结论。当我们使用自定义类private static class MethodInterceptorImpl implements MethodInterceptor { private Object target; public MethodInterceptorImpl(Object object){ this.target= object; } @Overrid

2022-05-10 17:36:47 1244

原创 Spring自定义实现Aop或使用@Transaction,Bean对象注入为null的情况分析

一、前言 有时我们需要通过使用Aop的方式对我们的程序进行切面监控,比如Service执行时间,记录log等。常用的两种方式一个是写execution表达式,还一种是自定义注解。但是在使用的过程中,有时我们会发现原本没问题的Service,现在使用里面注入的bean对象变为null了,针对这种情况我们分析一下。二、情景再现自定义注解Monitorpublic @interface Monitor {}自定义Advice@Aspect@Component@EnableAsp.

2021-02-06 18:51:41 1896 8

原创 SpringBoot 定时器Scheduled源码解析

一、示例SpringBoot使用定时器非常简单,首先定义一个需要定时执行的类,接着定义一个需要执行的方法,并在方法上添加@Scheduled注解@Componentpublic class ScheduleTest { @Scheduled(cron = "*/4 * * * * *") public void scheduleCheck2(){ System.out.println("task2 begin: "+new Date()); t

2020-12-12 00:27:49 818 2

原创 SpringBoot启动Mybatis源码解析——@Mapper和@MapperScan区别

我们知道用使用Mybatis的时候,一般有两种方式。一是在接口上添加@Mapper注解,二是在datasource中添加@MapperScan注解那么这两种注解有什么区别呢?@Mapper首先我们先看@Mapper,@Mapper的加载还需要在接口中添加@Component注解。之后SpringBoot中会自动加载MybatisAutoConfiguration类,在该类最下面会判断,如果我们没有手动创建MapperFactoryBean,或者使用@MapperScan(MapperSc

2020-11-28 00:49:42 752

原创 Spring Aop 匹配源码解析

一、前言AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。AOP的相关概念:(1)横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点(2)Aspect(切面):通常是一个类,里面可以定义切入点和通知(3)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用。被拦截到的点,因为Sp

2020-10-28 00:17:50 611 2

原创 Spring 事务对数据源的选择问题源码解析

前言 我们知道Spring Boot和Spring帮我们创建了数据源dataSource连接,当我们运用Spring事务或者@Transactional注解时,Spring对数据源是如何选择的呢?以及为什么在一个事务中不支持多数据源,如何做到支持多数据源。下面我们先来分析第一个问题,Spring事务的数据源选择问题。一、Spring数据源选择问题 无论是Spring Boot 还是 Spring,道理都是一样的,这里拿Spring Boot做源码解析。在我们引入spring boot的p...

2020-10-26 00:28:56 690 1

原创 Eureka 服务治理源码解析

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。Eureka Server:提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

2020-10-13 00:12:43 191

原创 Spring Boot、Spring Cloud Stream 整合 RabbitMQ源码解析

Spring Boot对RabbitMQ进行了很好的支持,今天简单的从源码层面分析RabbitMQ推送消息后如何找到我们监听方法的,以及Spring Cloud Stream中如何找到的。首先

2020-10-05 00:28:22 988

原创 Thread类中的interrupt(),interrupted()以及isInterrupted()区别

关于Java Thread类中的这三个方法,看起来很像,但只有interrupt是打断线程,interrupted和isInterrupted返回的是boolean值。1、interrupt:对应线程调用此方法时,会标记此线程被打断。 public void interrupt() { if (this != Thread.currentThread()) checkAccess(); synchronized (blockerLoc

2020-10-01 22:21:31 750

原创 ReentrantLock和Condition源码解析

Java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能。而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。这篇文章主要是从源码的角度来分析一下ReentrantLock。ReentrantLock一、加锁代码如下:ReentrantLock reentrantLock = new ReentrantLock();reentrantLock.lock();先看创建Reen

2020-09-28 22:20:28 372

原创 阿里Sentinel 源码解析

前言阿里Sentinel 是面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。阿里Sentinel和Hystrix有类似的功能,本文先从使用和源码角度分析,后续再说对比。首先导入pom文件,这里有两个版本:如果springboot基于1.5的则导入以下内容: <dependency> <groupId>com.alibaba.csp&lt

2020-09-15 00:10:07 642

原创 Spring Cloud Hystrix 源码解析(超过最大线程数、最大请求数)

之前分析了Spring Cloud Hystrix的创建和超时源码。现在我们来分析下关于Hystirx Thread模式,超过设置最大线程数量以及Hystrix SEMAPHORE 模式,超过最大请求数量源码解析。继续回到AbstractCommand的applyHystrixSemantics方法。 private Observable<R> applyHystrixSemantics(final AbstractCommand<R> _cmd) {

2020-09-07 17:13:41 815

转载 Spring Cloud Hystrix 配置内容详解

Command Properties以下属性控制HystrixCommand行为:Execution以下属性控制HystrixCommand.run()如何执行。源码及默认参数参考HystrixCommandProperties类。 参数 描述 默认值 execution.isolation.strategy 隔离策略,有THREAD和SEMAPHORE THREAD - 它在单独的线程上

2020-09-06 23:21:45 166

原创 RxJava简单示例

RxJava - JVM响应式扩展Reactive Extensions 用于使用Java VM的可观察序列编写异步和基于事件的程序的库。Rxjava由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点。简单示例:首先创建一个被观察者Observable,之后创建一个观察者(订阅者),接着建立订阅关系。 public static void main(String[] args) { Observable ob = Observable.create(new

2020-09-06 15:59:08 758

原创 Spring Cloud Hystrix 源码解析

在微服务架构中多层服务之间会相互调用,如果其中有一层服务故障了,可能会导致一层服务或者多层服务故障,从而导致整个系统故障。这种现象被称为服务雪崩效应。SpringCloud 中的 Hystrix 组件就可以解决此类问题,Hystrix 负责监控服务之间的调用情况,连续多次失败的情况进行熔断保护。保护的方法就是使用 Fallback,当调用的服务出现故障时,就可以使用 Fallback 方法的返回值;Hystrix 间隔时间会再次检查故障的服务,如果故障服务恢复,将继续使用服务。首先导入pom文件

2020-09-05 21:31:23 317

原创 Apollo 源码解析 —— 配置刷新篇

之前我们分析了Apollo获取配置的源码解析,下面我们来分析配置刷新的源码。快速回顾一下创建过程。加上@EnableApolloConfig注解。@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(ApolloConfigRegistrar.class)public @interface EnableApolloConfig { .............}public

2020-08-28 21:29:18 1260

原创 Apollo 源码解析 —— 获取配置信息篇

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。分两个部分去分析,首先从获取配置信息角度。添加pom

2020-08-26 23:49:46 4687

原创 Spring Cloud Bus 源码分析

Spring Cloud Bus使用轻量级消息代理将分布式系统的节点连接起来。然后可以使用此广播状态更改(例如配置更改)或其他管理指令。 Spring Cloud 体系中的一个组件 Spring Cloud Bus ,要分析Spring Cloud Bus,建议先熟悉 Spring Cloud Stream,不然无法理解 Spring Cloud Bus 内部的代码。Spring Cloud Stream 源码分析点击这里。要使用Bus,首先需要在pom文件中引用。 <dependen

2020-08-22 12:13:16 480

原创 Spring Cloud Stream 源码解析

Spring Cloud Stream 是一个消息驱动微服务的框架。  应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互,通过我们配置来 binding ,而 Spring Cloud Stream 的 binder 负责与消息中间件交互。所以,我们只需要搞清楚如何与 Spring Cloud Stream 交互就可以方便使用消息驱动的方式。  通过使用Spring Integration来连接消息代理中间件以实现消息事件...

2020-08-19 23:34:06 1813

原创 SpringCloud组件总结

一、Spring Config1、通过BootstrapListener加载BootstrapConfiguration配置文件2、DiscoveryClientConfigServiceBootstrapConfiguration生成后,通过Bean的@EventListener重写url地址3、通过ConfigServiceBootstrapConfiguration加载ConfigServicePropertySourceLocator类,之后通过SpringBoot初始化方法执行Conf

2020-08-13 23:47:07 165

原创 Spring Sleuth ZipKin 源码解析

在微服务中,通常根据业务模块分服务,项目中前端发起一个请求,后端可能跨几个服务调用才能完成这个请求。如果系统越来越庞大,服务之间的调用与被调用关系就会变得很复杂,假如一个请求中需要跨几个服务调用,其中一个服务由于网络延迟等原因挂掉了,那么这时候我们需要分析具体哪一个服务出问题了就会显得很困难。Spring Cloud Sleuth服务链路跟踪功能就可以帮助我们快速的发现错误根源以及监控分析每条请求链路上的性能等等。Spring-Cloud-Sleuth是Spring Cloud的组成部分之一,为Spri

2020-08-12 21:44:22 767

原创 Feign 源码解析

之前分析过Ribbon的源码加载过程,这次我们看一下Feign的源码解析。Feign底层调用的还是Ribbon,只不过Spring Cloud将Feign当作了Bean对象,支持注入调用。更符合我们的编程方式。下面开始分析。没看过之前Ribbon 源码解析的可以点击这里 Ribbon 源码解析。首先需要加载pom文件,spring boot 1.5加载如下 <dependency> <groupId>org.springframew.

2020-08-08 12:57:47 163

原创 Spring Cloud Zuul 源码分析

Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强, Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/service-a/login转发到到service-a服务。zuul默认和Ribbon结合实现了负载均衡的功能。zuul的核心是一系列的filters。下面开始简单的源码分析。我们知道一般在使用zuul的时候,需要在application启用应用上添加@EnableZuu

2020-08-02 23:52:17 448

原创 Spring Cloud Config 源码解析

Spring Cloud Config组件作为微服务的配置中心,可以为各个应用提供集中的配置中心,使用起来还是比较方便的。现在就来分析一波实现原理。Config组件主要由客户端和服务端组成。客户端可以单独作为一个微服务,引入依赖如下: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-confi

2020-07-27 20:40:57 1692

原创 Ribbon 源码解析过程

Ribbon是SpringCloud常用的一种负载均衡的技术,今日无聊读读源码,正好复习一下启动过程。以此记录。首先需要再POM文件中添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId></dependency>点进去看看spring-

2020-07-25 19:59:58 269

原创 SpringMVC 启动doDispatch类解析

springmvc dodispatcher解析。

2017-12-03 01:04:49 502

转载 zookeeper-Leader选举

转载:http://blog.csdn.net/abountwinter/article/details/55188647#t31.    Zookeeper技术内幕 1.1. Leader选举1.1.1.  Leader选举概述        服务器启动时期的Leader选举        ZooKeeper的集群规模至少是2台机器,这里我们以3台机器组成的服务器集群

2017-11-26 22:24:28 213

转载 dubbo服务注册

dubbo服务注册

2017-11-12 00:15:24 640

原创 MySQL常用命令

mysql 常用sql

2017-10-01 20:09:48 252

原创 Java线程池的几种实现方式

Java线程池的几种实现原理

2017-09-13 15:42:29 2362

原创 Java几种常用算法汇总

java几种常用算法

2017-09-08 22:51:19 454

空空如也

空空如也

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

TA关注的人

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