- 博客(38)
- 收藏
- 关注
原创 @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
1875
原创 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
1407
3
原创 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
2039
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
936
2
原创 SpringBoot启动Mybatis源码解析——@Mapper和@MapperScan区别
我们知道用使用Mybatis的时候,一般有两种方式。一是在接口上添加@Mapper注解,二是在datasource中添加@MapperScan注解那么这两种注解有什么区别呢?@Mapper首先我们先看@Mapper,@Mapper的加载还需要在接口中添加@Component注解。之后SpringBoot中会自动加载MybatisAutoConfiguration类,在该类最下面会判断,如果我们没有手动创建MapperFactoryBean,或者使用@MapperScan(MapperSc
2020-11-28 00:49:42
844
原创 Spring Aop 匹配源码解析
一、前言AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。AOP的相关概念:(1)横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点(2)Aspect(切面):通常是一个类,里面可以定义切入点和通知(3)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用。被拦截到的点,因为Sp
2020-10-28 00:17:50
704
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
817
1
原创 Eureka 服务治理源码解析
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。Eureka Server:提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
2020-10-13 00:12:43
225
原创 Spring Boot、Spring Cloud Stream 整合 RabbitMQ源码解析
Spring Boot对RabbitMQ进行了很好的支持,今天简单的从源码层面分析RabbitMQ推送消息后如何找到我们监听方法的,以及Spring Cloud Stream中如何找到的。首先
2020-10-05 00:28:22
1083
原创 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
872
原创 ReentrantLock和Condition源码解析
Java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能。而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。这篇文章主要是从源码的角度来分析一下ReentrantLock。ReentrantLock一、加锁代码如下:ReentrantLock reentrantLock = new ReentrantLock();reentrantLock.lock();先看创建Reen
2020-09-28 22:20:28
407
原创 阿里Sentinel 源码解析
前言阿里Sentinel 是面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。阿里Sentinel和Hystrix有类似的功能,本文先从使用和源码角度分析,后续再说对比。首先导入pom文件,这里有两个版本:如果springboot基于1.5的则导入以下内容: <dependency> <groupId>com.alibaba.csp<
2020-09-15 00:10:07
702
原创 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
860
转载 Spring Cloud Hystrix 配置内容详解
Command Properties以下属性控制HystrixCommand行为:Execution以下属性控制HystrixCommand.run()如何执行。源码及默认参数参考HystrixCommandProperties类。 参数 描述 默认值 execution.isolation.strategy 隔离策略,有THREAD和SEMAPHORE THREAD - 它在单独的线程上
2020-09-06 23:21:45
183
原创 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
815
原创 Spring Cloud Hystrix 源码解析
在微服务架构中多层服务之间会相互调用,如果其中有一层服务故障了,可能会导致一层服务或者多层服务故障,从而导致整个系统故障。这种现象被称为服务雪崩效应。SpringCloud 中的 Hystrix 组件就可以解决此类问题,Hystrix 负责监控服务之间的调用情况,连续多次失败的情况进行熔断保护。保护的方法就是使用 Fallback,当调用的服务出现故障时,就可以使用 Fallback 方法的返回值;Hystrix 间隔时间会再次检查故障的服务,如果故障服务恢复,将继续使用服务。首先导入pom文件
2020-09-05 21:31:23
394
原创 Apollo 源码解析 —— 配置刷新篇
之前我们分析了Apollo获取配置的源码解析,下面我们来分析配置刷新的源码。快速回顾一下创建过程。加上@EnableApolloConfig注解。@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(ApolloConfigRegistrar.class)public @interface EnableApolloConfig { .............}public
2020-08-28 21:29:18
1340
原创 Apollo 源码解析 —— 获取配置信息篇
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。分两个部分去分析,首先从获取配置信息角度。添加pom
2020-08-26 23:49:46
5078
原创 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
566
原创 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
1893
原创 SpringCloud组件总结
一、Spring Config1、通过BootstrapListener加载BootstrapConfiguration配置文件2、DiscoveryClientConfigServiceBootstrapConfiguration生成后,通过Bean的@EventListener重写url地址3、通过ConfigServiceBootstrapConfiguration加载ConfigServicePropertySourceLocator类,之后通过SpringBoot初始化方法执行Conf
2020-08-13 23:47:07
203
原创 Spring Sleuth ZipKin 源码解析
在微服务中,通常根据业务模块分服务,项目中前端发起一个请求,后端可能跨几个服务调用才能完成这个请求。如果系统越来越庞大,服务之间的调用与被调用关系就会变得很复杂,假如一个请求中需要跨几个服务调用,其中一个服务由于网络延迟等原因挂掉了,那么这时候我们需要分析具体哪一个服务出问题了就会显得很困难。Spring Cloud Sleuth服务链路跟踪功能就可以帮助我们快速的发现错误根源以及监控分析每条请求链路上的性能等等。Spring-Cloud-Sleuth是Spring Cloud的组成部分之一,为Spri
2020-08-12 21:44:22
827
原创 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
201
原创 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
495
原创 Spring Cloud Config 源码解析
Spring Cloud Config组件作为微服务的配置中心,可以为各个应用提供集中的配置中心,使用起来还是比较方便的。现在就来分析一波实现原理。Config组件主要由客户端和服务端组成。客户端可以单独作为一个微服务,引入依赖如下: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-confi
2020-07-27 20:40:57
1869
原创 Ribbon 源码解析过程
Ribbon是SpringCloud常用的一种负载均衡的技术,今日无聊读读源码,正好复习一下启动过程。以此记录。首先需要再POM文件中添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId></dependency>点进去看看spring-
2020-07-25 19:59:58
309
转载 zookeeper-Leader选举
转载:http://blog.youkuaiyun.com/abountwinter/article/details/55188647#t31. Zookeeper技术内幕 1.1. Leader选举1.1.1. Leader选举概述 服务器启动时期的Leader选举 ZooKeeper的集群规模至少是2台机器,这里我们以3台机器组成的服务器集群
2017-11-26 22:24:28
242
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人