玩转spring cloud
夯实spring boot基础,从源码、架构的视角解读spring cloud技术栈
布道
专注但要有大局观(先大后小,思路为先,实验为辅)
展开
-
spring boot:日志系统源码深度解析
总所周知,spring boot对各类日志组件进行了集成,使用起来非常便捷,让我们需要定义对应日志框架的配置文件,比如LogBack、Log4j2等,代码内部便可以直接使用。话不多说,接下来让我们来领略spring这块的奥秘吧。目录spring如何集成日志组件LoggingSystemLogFile是什么LoggingSystem的实例化logback.xml的加载优先级...原创 2020-04-30 16:08:55 · 1802 阅读 · 1 评论 -
spring boot之maven-wrapper
Spring Boot有很多功能特性值得借鉴和学习,很多玩Spring Boot的人知道不需要安装Tomcat很方便,其实并没有发现Maven也是不需要提前安装。它这样做的好处在于解决了开发环境maven版本不一致导致的各种问题,spring boot中集成了maven-wrapper的确比较务实。它是什么相信大家都用到spring的脚手架:https://start.spring.io/...原创 2019-11-23 14:32:00 · 12524 阅读 · 2 评论 -
Spring Boot 访问安全之认证和鉴权
在web应用中有大量场景需要对用户进行安全校,一般人的做法就是硬编码的方式直接埋到到业务代码中,但可曾想过这样做法会导致代码不够简洁(大量重复代码)、有个性化时难维护(每个业务逻辑访问控制策略都不相同甚至差异很大)、容易发生安全泄露(有些业务可能不需要当前登录信息,但被访问的数据可能是敏感数据由于遗忘而没有受到保护)。为了更安全、更方便的进行访问安全控制,我们可以想到的就是使用springmvc的...原创 2019-07-04 10:26:17 · 18081 阅读 · 0 评论 -
再谈spring boot 优雅停机
再谈为了提醒明知故犯(在一坑里迭倒两次不是不多见),由于业务系统中大量使用了spring Boot embedded tomcat的模式运行,在一些运维脚本中经常看到Linux 中 kill 指令,然而它的使用也有些讲究,要思考如何能做到优雅停机。目录何为优雅关机kill指令Runtime.addShutdownHookspring 3.2.12spring boot何...原创 2019-05-24 10:24:33 · 11346 阅读 · 0 评论 -
Spring Cloud Feign和Ribbon源码系列汇总篇
Spring cloud 中服务之间通过restful方式调用。一种是RestTemplate+Ribbon,另一种是Spring cloud Feign默认集成Ribbon。原创 2019-05-05 15:01:25 · 45305 阅读 · 0 评论 -
Spring Cloud Hystrix:番外篇Sentinel
Hystrix是社区中非常活跃的限流降级神器,之前也花了几周的时间去研究分享源码,而Sentinel 是阿里中间件团队2018年开源的另一款面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。Sentinel 和之前常用的熔断降级库 Netflix Hystrix的异同点: Sentinel ...原创 2019-05-05 14:38:50 · 657 阅读 · 0 评论 -
Spring Cloud Hystrix 源码系列汇总篇
随着服务化的大规模演化,每个应用系统对这些依赖的稳定性与否对系统的影响非常大。而依赖有很多不可控问题:网络连接缓慢,资源繁忙,服务暂时不可用等。特别是高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险。Netflix 公司开发并成功使用Hystrix,它是社区中非常活跃的限流降级神器。Netflix 应用系统规模TheNetflixAPIprocesses10+b...原创 2019-05-05 14:28:43 · 3668 阅读 · 0 评论 -
@Import注入之ImportSelector和ImportBeanDefinitionRegistrar
在spring-boot中随处可以见的就是@Import,它的作用就是通过导入的方式把实例注入到IOC中,本文主要介绍下@Import的用法。知识点回顾:给IOC容器中注册Bean的方式:包扫描+组件标注注解(@Controller/@Service/@Repository/@Component) @Bean @Import@Import源码可以发现@Import注解只能注解在...原创 2019-04-23 22:13:49 · 2052 阅读 · 0 评论 -
spring boot中Date时区错乱
由于系统中采用了spring-boot中jar方式(内嵌tomcat容器)运行,发现new Date()获取的时间与当前系统时间间隔了8个小时,初步断定是时区错乱导致。实际上系统的运行环境是在docker中,并且使用apollo作为配置中心。其实解决它并不复杂,通过添加命令行参数-Duser.timezone=GMT+08就可以解决它。然后很多时候,我们发现了这样的一个现象:告诉运维,某个...原创 2019-04-08 18:21:06 · 8100 阅读 · 0 评论 -
Springboot中HandlerInterceptor与HttpMessageConverter异常冲突
为何要讲HandlerInterceptor与HttpMessageConverter异常冲突呢?其实社区也有不少文章讲过(没有讲清楚),很多时候也存在滥用的情况,这里更多是从源码分析他们,并从中学习spring在请求处理这块优秀之处。目录示例代码HandlerInterceptor基础知识源码HttpMessageConverter基础知识:HandlerAdapte...原创 2019-03-30 19:46:08 · 2145 阅读 · 0 评论 -
Spring Cloud的 Feign和Ribbon重试机制的误区
在spring cloud项目中,因为用了feign肯定会用到ribbon,二者都提供了重试功能。引入的重试机制保证了高可用的同时,也会带来一些其它的问题,如幂等操作或一些没必要的重试。但很多人对其重试机制经常混淆,接下来将分析Feign和 Ribbon 重试机制的实现原理和区别。结论Feign和 Ribbon重试,其实二者的重试机制相互独立,并无联系。如果一个http请求,如果fe...原创 2019-03-28 19:16:01 · 4825 阅读 · 0 评论 -
spring cloud的Feign Hystrix Ribbon配置详解及原理
在之前的文章,分享了Feign、Hystrix、Ribbon的基本原理及源码实现,其中最让人头痛的就是配置,这也是很多开发者在使用spring-cloud-netflix组件最烦心的事(netflix的Archaius和相互交织),有时候感叹:见鬼了,我的配置怎么没生效,配置读取的好像不太对....诸如此类的问题!不过随着Spring Cloud Netflix项目进入维护模式,说实话Spring...原创 2019-03-27 23:14:13 · 10056 阅读 · 1 评论 -
Spring Cloud Ribbon源码解析
负载均衡就是用来帮助我们将众多的客户端请求合理的分配到各个服务器,以达到服务端资源的充分利用和更少的请求时间,它是日活亿级用户的网站架构中最重要的手段。而Ribbon实现正向代理的软负载均衡,Spring cloud Feign默认集成Ribbon,所以注解@FeignClient的类,默认实现了ribbon的功能,在之前的spring cloud-feign源码中已经提过LoadBalancer...原创 2019-03-24 22:12:10 · 5143 阅读 · 0 评论 -
Spring Cloud Hystrix 源码系列:熔断器
circuit-breaker,circuit表示电路,译为熔断器非常精准,而Hystrix属于自动恢复的智能熔断器,它保护的着你的系统,宿主在调用方的应用系统中,避免因为依赖系统的异常或宕机而引发一系列连锁反应。Hystrix原理也比较简单,在一个时间窗口下,通过不断收集依赖服务(第三方)请求指标信息(sucess、failure、timeout、rejection),当达到设定熔断条件时(...原创 2019-03-23 17:20:08 · 1084 阅读 · 0 评论 -
Spring Cloud Hystrix 源码系列:Metrics 收集
在 Hystrix Command 执行过程(开始执行、结束执行、异常、超时)时会不断发出各类事件,通过收集这些数据,提供给消费者。如断路器、Hystrix Dashboard可以统计分析这些数据,从而完成特定的功能。本文基于hystrix-core1.5.18(近年来几乎很少更新,建议升级)。目录1. rxjava1.2Observable.share1.3 Subject...原创 2019-03-21 21:40:40 · 1220 阅读 · 0 评论 -
spring boot中慎用@EnableWebMvc
什么情况?我为了自定义了一个HandlerInterceptor,非常普通的做法,先是继承了WebMvcConfigurerAdapter,再添加了@EnableWebMvc。注:本篇基于spring-webmvc 4.3.9版本。@EnableWebMvc@Configurationpublic class XXXAutoConfiguration extends WebMvcConf...原创 2019-03-21 20:53:11 · 8477 阅读 · 1 评论 -
Spring Cloud Hystrix 源码系列:HystrixCommandAspect 入口解析
在前面的文章已经基本上讲过Hystrix的由来,功能介绍及工作原理。本篇开始正式进入Hystrix 源码分析阶段,将带你深入简出的理解HystrixCommandAspect、HystrixCommand、HystrixObservableCommand的内部构建。本文基于hystrix-core1.5.18(近年来几乎很少更新,建议升级)。目录1. HystrixCommandAspe...原创 2019-03-21 17:49:46 · 2703 阅读 · 0 评论 -
spring cloud 系列之Netflix Archaius
在之前的系列讲过Hystrix的核心实现源码,多次提及到Archaius(Netflix公司开源项目之一),其实Netflix的所有组件都是通过它获取配置。Archaius主要用于多配置存储的动态获取,基于对apache common configuration类库的扩展。本文基于hystrix-core1.4.26(最新的1.5.18会有些差别)。//比如Hystrix有使用publi...原创 2019-03-17 16:32:49 · 1978 阅读 · 1 评论 -
微服务框架 spring-cloud 绝非你唯一的选择
Spring Cloud全家桶的构建是建立在Spring Boot基础上的,特别上容器化技术已经成熟,以快而著称,号称3秒内启动。其实企业级的docker容器一般内存低于4g(快),如何解决SpringBoot巨耗内存,构建慢,启动也很慢,这确实是每个架构师一个很值得思考的问题!当然,Spring Cloud的工艺水平有多优秀,更新速度之快,稳定性,成熟度,早已在很多大型的企业级的应用中得到验证。...原创 2019-03-14 22:22:46 · 1271 阅读 · 0 评论 -
spring boot @SpringBootApplication @EnableAutoConfiguration 的工作原理
在spring boot中@SpringBootApplication、@EnableAutoConfiguration是最常见Annotation,且最为重要,所以本文将展开对此的解读。@SpringBootApplication在spring框架中的处理尤为复杂,然后能将它的来龙去脉(加载机制)讲清楚的文章非常少。说实话你要完全理解及解读它,需要对spring3.x的源码有一定程度了解,主要...原创 2019-03-10 18:07:30 · 1497 阅读 · 0 评论 -
Spring Boot 容器启动原理揭秘
不得不讲SpringBoot 使用起来太方便了,它的外表轻巧简单,在企业级的应用系统中非常流行,已经成为java开发者必备技能。而它采用的one-jar的方案已经深入人心,其实one-jar技术早在2004年就已经被提出,除此之外spring boot的强大的自动配置类也是非常的受用,总之用过的童靴都会很感觉一个字“爽”。但是 SpringBoot它内部实现却非常的复杂,它常常把爱研究源码的读者绕...原创 2019-03-08 21:50:20 · 16276 阅读 · 0 评论 -
Spring boot 源码分析-Conditional
在Spring Boot中大量的应用到@Conditional条件注解,Condition接口是spring4.0增加的条件判断接口,用于判断条件满足情况,主要集中在Bean的定义和使用。当前文章基于spring boot1.5.4.RELEASE,spring-core4.3.9.RELEASE。目录1. 用法演示1.1 小结1.2 spring Condtion拓展集2...原创 2019-03-07 17:01:06 · 950 阅读 · 0 评论 -
Spring Cloud Hystrix 源码系列:HystrixRequestContext
在讲HystrixRequestContext之前,先了解下Hystrix 跨线程传递数据的知识,我们都知道ThreadLocal、InheritableThreadLocal跨父子线程传递数据。本文基于hystrix-core1.5.18(近年来几乎很少更新,建议升级)需求描述服务A 通过 Feign + Hystrix 调用服务B,服务间调用时需传递 JWT Token,希望在Fei...原创 2019-03-02 22:18:15 · 3714 阅读 · 0 评论 -
spring mvc的DataBinder、Validator、BeanWrapper、ConversionService、Formatter
很多人对spring mvc的请求处理流程都不陌生,今天我们要展开讲解的是请求体数据body的绑定、验证、格式化、类型转换,它是怎样实现的呢?其实就是大家熟悉的HandlerAdapter干的事情。为何要讲这个呢?其实和我最近的工作内容是分不开的,刚好在设计开发一个数据聚合组件(它主要是解决微服务化后vo 拆分之疼),当然后续会开源出来的。目录spring mvc知识回顾BeanW...原创 2019-03-02 16:57:28 · 3781 阅读 · 0 评论 -
Spring Cloud Hystrix 源码系列:隔离策略和请求缓存
隔离是一种常见的风险控制(保护)手段,Hystrix 也使用了隔离策略,称之为bulkhead pattern,翻译为:舱壁隔离模式(舱壁将船体内部空间划分成多个舱室,将舱与舱之间严密分开,在航行中,即使有舱破损进水,水也不会流到其他舱)。本文基于hystrix-core1.5.18(近年来几乎很少更新,建议升级)目录1. Hystrix 隔离1.1 Thread Pool1....原创 2019-02-27 21:45:20 · 7336 阅读 · 0 评论 -
Spring Cloud Hystrix 源码系列:工作原理
Hystrix 译为 "豪猪",豪猪的棘刺能保护自己不受天敌伤害,代表了强大的防御能力。Hystrix 基于 RxJava 进行实现,RxJava 是一种基于观察者模式的响应式编程框架。Spring Cloud Hystrix 基于 Netflix Hystrix 实现,具备服务降级、服务熔断、线程与信号隔离、请求缓存、请求合并以及服务监控等强大功能。本文基于hystrix-core1.5.18...原创 2019-02-27 20:13:10 · 2009 阅读 · 1 评论 -
Spring Cloud Netflix项目进入维护模式
这两年最热门的微服务化话题,Spring Cloud Netflix真可谓璀璨夺目。熟悉spring cloud的同学都知道下面张图,netflix公司的贡献非常大。不过最近2018-12-12日,Netflix宣布Spring Cloud Netflix系列技术栈进入维护模式(不再添加新特性),距离上次宣布Eureka 2.0闭源(Spring Cloud 还是在1.x 上面开发的,最新版本依赖...原创 2018-12-26 12:31:56 · 4533 阅读 · 0 评论 -
spring ObjectProvider 源码分析
在新spring框架(4.x系列)源码中经常可以看到ObjectProvider<T>的语法,而在度娘查找资料,你发现几乎找不到能讲清楚它来龙去脉的文章,下面将本着寻根溯源的态度去研究它。//源自org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration@Configuration@AutoCon...原创 2018-10-24 12:40:31 · 11458 阅读 · 7 评论 -
JPA之Spring Data JPA
JPA是Java Persistence API的简称,也称为Java持久层API,已成为目前比较流行的一种ORM技术之一,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。目录1.背景2.优势2.1 标准化2.2 对容器级特性的支持2.3 简单易用,集成方便2.4 可媲美JDBC的查询能力2.5 支持面向对象的高级特性...原创 2018-09-30 11:38:03 · 6436 阅读 · 1 评论 -
基于spring cloud-feign的异步支持
Netflix的Feign作为Http Client的话,我们就可以做到像Dubbo的声明式服务一样,服务的调用者直接调用接口方法调用远程服务,而不需要通过常规的Http Client构造请求再解析返回数据。目录1. 背景2.该如何入手?2.1什么是Feign3. spring-cloud-openfeign源码3.1 相关配置3.2EnableFeignClien...原创 2018-08-08 12:20:51 · 31092 阅读 · 2 评论 -
spring boot静态处理
springboot在处理web静态请求上和springmvc在使用是有些不同的,同时还增加了一些新的特性。目录1.静态页面2.动态页面3.webjars4.webjars-locator5.静态资源版本管理1.静态页面springboot项目只有src目录,没有webapp目录,会将静态访问(html/图片等)映射到其自动配置的静态目录,主要有:src/mai...原创 2017-09-18 16:23:02 · 792 阅读 · 0 评论 -
spring boot+druid+mybatis多数据源使用
spring-boot上使用多数据源真的很麻烦,很多都不推荐这样去使用。但某些特殊的场景确实需求,它涉及到非查询操作(需事务接入),没有分布式事务真的解决不了。入坑记mybatis-spring-boot-starter上折腾了2天,多数据源上没有想象中的好用 @bean重名加载问题:不会再加载(方法student2不会被执行)说明顺序很重要 @Bean("student")...原创 2017-09-15 19:04:49 · 446 阅读 · 0 评论 -
spring cloud 学习指南
spring cloud 已成为一套完美微服务解决框架,它提供了一整套服务治理相关的东西,比如:服务注册/发现、断路器、负载均衡、接口网关、接口方式调用、分布式配置中心等。我相信只要往微服务,基本上spring cloud 是绕不开的话题。Dubbo采用的通信机制 RPC,spring cloud采用http的restful api。要了解spring cloud,首先你得了解spring b...原创 2017-08-11 13:53:17 · 5925 阅读 · 0 评论 -
spring boot 笔记之注解大全及疑问解读
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。它已经成为地球上最热门的技术之一。首先你要达到系统化入门级,我给你推荐的图书:《Java EE开发的颠覆者 Spring Boot实战》和《Spring Boot参考指南》。目录1.appli...原创 2017-08-04 15:04:21 · 26552 阅读 · 0 评论