spring cloud gateway源码(一)请求时少一层的路径的源码分析
r有时我们用springcloudgateway做网关的时候,会发现调用的url少了一层,这个是什么做到的呢,我们就根据源码分析一下。
一、初始化
在GatewayDiscoveryClientAutoConfiguration类中创建了bean:DiscoveryLocatorProperties
@Bean
public DiscoveryLocatorProperties ...
spring cloud gateway源码(三)Filter的加载
在SpringCloud Gateway网关中,必不可少的就是filter了,网关中的filter是分两层走的,先走一层是bean的filter,再走一层普通的filter。具体什么意思,下面我们一起来看下。
一、带bean的filter。
刚开始初始化的时候,会加载HttpHandlerAutoConfiguration类中的bean,HttpHandler,如下:
@Bean
...
springboot源码解析(六)@ConditionalOnClass
在springboot中,有@ConditionalOnClass,@ConditionalOnBean,@ConditionalOnMissingClass,@ConditionalOnMissingBean等注解,这些注解的含义是有某个类或者没有某个bean才会加载,那么源码是在什么地方处理的呢,下面我们一起看下。
一、举例
我们以类EncryptionBootstrapConfigura...
SpringBoot源码解析(七)@Primary
在SpringBoot中有许多类使用到了@Primary注解,关于用法,请看这篇博客:在spring中常被忽视的注解 @Primary。
这次我们不说用法,从源码层面来看下:
一、入口
在创建bean的时候,我们会获取bean的依赖bean,这个方法就是DefaultListableBeanFactory的doResolveDependency方法,如果匹配的bean大于1,会执行如下方法:...
【数据结构与算法分析】第四章 树(二)
【数据结构与算法分析】第四章 树(二)
3.二叉树
二叉树是一棵树,其中每个节点都不能有多于两个的儿子。
4.表达式树
表达式树的树叶是操作数,如常量或变量,其他节点为操作符。其计算过程为中序遍历(左子树,节点,右子树)。
如图为一个表达式树:
左子树的值为a+(b*c),右子树的值是((d * e)+f)*g,整个树为(a+(b * c))+(((d * e)+f)*g),也称为...
Spring源码之请求路径匹配路由
在spring中,当一个请求过来的时候会做路径匹配,下面我们就从源码层面分析一下路径匹配。
示例:
@RequestMapping(value = "/user/{aid}/online/**", method = RequestMethod.GET)
我们一起看看这个方法是如何寻找的,和一些相应的工具类
1、入口
我的项目使用的是自动配置的RequestMappingHandlerM...
数据结构| |希尔排序
希尔排序思想:又称“缩小增量排序”,先将整个待排记录序列分割成为若干个子序列,对每个子序列分别直接插入排序,待整个序列记录“基本有序”时,再对全体记录进行一次直接插入排序。代码如下:void shell_sort(int arr[], int sz)
{
//自己定义一个增量数组
int add[MAX] = { 0 };
int sz_d = 0;
int ret = sz;
whil...
spring cloud gateway源码(四)路由定位器
在SpringCloud Gateway中,路由定位器是查找请求连接的作用,我们通过源码看下,在SpringCloud Gateway中,路由定位器是如何工作的。
一、RouteLocator
SpringCloud gateway的路由定位器,包括CachingRouteLocator,CompositeRouteLocator,RouteDefinitionRouteLocator,他们的...
数据结构| |冒泡排序
冒泡排序:也叫作起泡排序对于n个数据,进行n-1次冒泡,每一次冒泡将最大的或者最小的放到序列的第n个,然后在进行下一次冒泡,下次冒泡将前n-1个数据的最小的,放到n-1的位置上,一次冒泡,知道n-1结束,那么该序列也就有有序了。代码如下:1.基础版(没有进行任何优化)void bubble_sort(int arr[], int sz)
{
int i = 0;
int j = 0;
for...
spring cloud gateway源码(五)请求流程
spring Cloud gateway的请求流程图如下:
一、Predicate
在Spring Cloud Gateway中,在走完自定义的Filter后,会找到对应的handler方法,而在Spring Cloud Gateway中,对应的Handler就是根据Route去寻找的,
@Override
public Mono<Object> getHandler(S...
数据结构| |快速排序
代码如下:void quick_sort(int arr[], int left, int right)
{
//保存枢轴
int head = left;
int tail = right;
int pivotkey = arr[left];
if (left < right)
{
while (left != right)
{
while (left < ...
spring cloud gateway源码(六)Predicate
在Spring Cloud Gateway中,默认添加的predicate是:PathRoutePredicateFactory。在Spring Cloud Gateway中有许多的Predicate,他们的功能各异。下面我们一起分析一下。
一、获取predicate
在RouteDefinitionRouteLocator类的getRoutes()方法中:
@Override
pub...
spring cloud gateway源码(七)GatewayFilterFactory
在spring cloud gateway中,有两种形式的gatewayFilter,一种是直接实现Global接口的bean,还有一种就是GatewayFilterFactory。这些类在spring-cloud-gateway的core包中的org.springframework.cloud.gateway.filter.factory路径下。
一,初始化
在创建DiscoveryLoca...
c语言| |交换两个数的n种方法
交换两个数的n种办法代码如下:#include <stdio.h>
//采用辅助空间的方法
void SwapTmp(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
//没有采用辅助空间,运用异或计算
void SwapNotTmp(int* a, int* b)
{
*a = (*a) ...
springboot项目中dubbo启动的源码分析
现在本人开始使用起来了微服务,spring boot是微服务必备的框架,那么今天就说下,springboot中是怎么整合dubbo的(源码层面)
我们直接从AbstractApplicationContext类的refresh方法开始说起,首先springboot项目的Application上面的注解是配置扫描的路径的,如下:
@SpringBootApplication
@MapperSc...
内存溢出分析工具MAT实战(一)JVM启动参数分析
在工作的过程中,有时我们会遇到内存溢出的问题,这时候就需要我们有足够的知识积累去解决内存溢出相关问题。
本文章是建立在读者了解java的内存结构的基础上。
关于内存分析工具,mat是非常实用的一款内存分析工具,下面我们针对实际情况对其进行介绍。
一、获取分析文件
一般我们分析内存的时候都是针对dump文件进行分析,关于dump文件的获取,有两种方式,一种是在jvm参数中添加,当内存溢出时生...
c语言| |求最大公约数
1-暴力求解法思想:两个数的最大公约数一定小于或者等于两者中较小的数,那么就从1开始一直除,除到较小值,得出最大公约数2-辗转相除法思想:用两者中任意一个数,除以另外一个数,得到余数,在用刚才的除数除以余数,一直这样除下去,如果哪一次余数为0,那么该次中的除数就是最大公约数。//求两个数的最大公约数
#include <stdio.h>
//暴力求解法
int GetCo...
SpringBoot源码解析(九)Actuator
一、引入Actuator
当我们在项目中引入spring-boot-starter-actuator的时候,我们可以通过如下方式调用,查看服务的信息:
localhost:8006/actuator/info
默认actuator只开启了info和health,如果想要使用其他功能,需要在配置中类似如下方式添加:
management.endpoints.web.exposure.i...
python中字符串的基本常识。
字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。
创建字符串很简单,只要为变量分配一个值即可。例如:
info = '今天是星期四 Hello World'
Python不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
Python访问子字符串,可以使用方括号来截取字符串。
# 值1:开始位置 (包括该位置)...
今日推荐
周排行