- 博客(32)
- 收藏
- 关注
原创 注册中心Zookeeper版本降级
项目中引入spring-cloud-starter-zookeeper-discovery依赖将zookeeper作为注册中心,但关联SpringCloud版本依赖中指定zookeeper版本为3.6.0,与客户zookeeper服务端(3.4.10)版本不适配,项目启动会直接抛出。异常,经过测试及查询确定该异常由zookeeper客户端与服务端版本不适配导致。
2023-05-19 09:16:55
295
原创 @Configuration(proxyBeanMethods = false) 解析
属性是 Spring注解的一个重要属性,它用于指示 Spring 是否应该对配置类的方法进行 CGLIB 代理。将属性设置为false可以提高 Spring 应用程序的性能,但需要注意返回的 Bean 实例必须是单例的。!!
2023-05-08 14:47:51
601
原创 SpringBoot属性配置优先级
因此,在没有使用命令行参数的情况下,应用程序的属性值将是"Hello from myapp.properties",因为myapp.properties是最高优先级的属性源。如果我们删除myapp.properties文件,则属性值将变为"Hello from bootstrap.properties",因为bootstrap.properties是次高优先级的属性源。在Spring Boot中,应用程序可以使用多种方式来配置。
2023-05-05 13:04:44
1497
原创 分布式Session的容灾方案
类会将 Session 数据存储在 Redis 中,当 Redis 宕机时,会将 Session 数据备份到其他地方,比如文件系统。需要注意的是,在使用备份存储时,需要保证存储的数据安全性和可靠性,并根据具体业务需求和技术栈选择合适的存储方式。综上所述,保证 Redis 宕机时用户能够正常登录需要考虑多种因素,需要根据具体的业务场景和需求,选择合适的方案和技术。该示例中使用了文件系统作为备份存储方式,可以根据具体业务需求和技术栈选择合适的备份存储方式,比如数据库、对象存储等。在正常情况下,该示例中的。
2023-04-20 20:03:59
506
原创 SpringCloud整合Feign基本使用及源码分析-02
导致原请求相关信息会被移除,这个时候可以通过RequestInterceptor来手动添加原请求相关参数,避免请求信息丢失的情况。FeignClient实例为动态代理创建的对象,当进行服务调用FeignClient的接口方法就会被。是Feign提供的扩展点,当实际开发过程中远程服务调用有设置请求头相关参数时,由于。的invoke方法拦截。
2023-04-03 16:44:49
603
原创 SpringCloud整合Feign基本使用及源码分析-01
Demo基于SpringCloudAlibaba整合Nacos,利用Feign实现服务间调用;针对Feign的服务调用进行源码简要分析;针对于Feign服务调用中的重试机制及负载均衡进行源码简要分析;
2023-04-03 16:10:35
639
原创 线程池ThreadPoolExecutor源码分析
的一个内部类,主要是用来维护线程执行任务的中断控制状态,它实现了Runnable 接口同时继承了AQS,实现 Runnable 接口意味着 Worker 就是一个线程,继承 AQS 是为了实现独占锁这个功能。
2023-03-31 16:16:12
214
原创 PropertySourceLocator(SpringCloud中的配置操作)
SpringCloud服务在主程序启动时,会在刷新上下文之前通过扩展点初始化器ApplicationContextInitializer的initialize方法来进行环境相关内容的准备,作为ApplicationContextInitializer的实现类,在环境准备期间会通过接口在程序启动前来获取应用属性资源并加载到当前Environment中。eg. SpringCloud在整合Nacos(Config)配置中心,应用在启动过程中会执行Nacos实现的。
2023-03-31 11:54:54
791
原创 利用责任链模式实现过滤器链
SpringMVC中在实现过滤器链ApplicationFilterChain和拦截器链HandlerExecutionChain的过程中均使用到了责任链模式,便于请求拦截的动态扩展。
2023-03-30 17:36:11
163
原创 Springboot整合Nacos实现动态线程池
又是美好的一天呀~个人博客地址: huanghong.top往下看看~内容简介代码实现配置文件pom.xmlbootstrap.yamldynamic-threadpool.yaml配置BeanThreadPoolPropertiesThreadPoolConfig枚举QueueTypeEnumRejectedTypeEnumrefresher测试类备注内容内容简介基于Springboot整合Nacos(Config)构建项目,客户端监听Nacos服务端配置变化动态修改线程池相关参数。代码实现
2023-03-30 14:05:34
1677
1
原创 Nacos配置变更(Bean属性动态变更)
通常使用Nacos服务端进行配置变更时,客户端配置nacos相关属性并设置refresh属性为true(默认为fasle),客户端映射实体类属性就可以自动重新映射,其实现原理基于事件发布监听和Spring容器中接口的实现。注: 本文内容只针对于Bean属性动态刷新,并不支持@Value注解的动态更新。
2023-03-30 09:19:14
1644
原创 Nacos(Config)配置中心源码分析-02
TaskManager构造器中调用父类NacosDelayTaskExecuteEngine构造器,初始化父类。ProcessRunnable实现Runnable接口,执行processTasks方法。EmbeddedDumpService初始化会进行TaskManager的初始化。初始化TaskManager时。通过nacos ui界面。配置信息(接口访问同理)
2023-03-28 16:39:11
565
原创 Nacos服务注册
NacosWatch实现了SmartLifecycle接口,执行。请求uri:/nacos/v1/ns/service。6s执行一次定时任务,监控服务状态信息。上下文刷新完成后生命周期管理器执行。nacos服务发现配置Bean(对当前服务进行订阅操作。
2023-03-21 15:42:00
611
原创 Nacos服务注册之NacosWatch
NacosWatch的作用就是更新当前节点的metadata和定时发送一个HearbeatEvent事件,可以监听这个事件做一些配置的动态更新操作。metadata中一般可设置一些状态标识,比如灰度发布可以设置版本号,配合网关把流量做定向分发。!!
2023-03-21 15:40:18
1305
原创 Spring事务机制及源码分析
*PROPAGATION_NESTED ** 表示如果当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中 ,被嵌套的事务可以独立于被封装的事务中进行提交或者回滚。如果封装事务存在,并且外层事务抛出异常回滚,那么内层事务必须回滚,反之,内层事务并不影响外层事务。表示当前方法必须在一个具有事务的 上下文中运行,如有客户端有事务在进行,那么被调用端将在该事务中运行,否则的话重新开启一个事务。表示当前方法不必需要具有一个事务 上下文,但是如果有一个事务的话,它也可以在这个事务中运行;
2023-03-15 11:25:24
405
原创 Springboot中跳过指定过滤器
是过滤器定义,filterDef中的FilterClass和FilterName保存了过滤器类和过滤器名,可以根据过滤器类或名字找到要剔除的过滤器,然后将对应的ApplicationFilterConfig 从数组里剔除就可以了。),filters中存放的是ApplicationFilterConfig 是FilterConfig的实现类,ApplicationFilterConfig中。filterChain有一个filters的属性数组(
2023-03-13 10:59:03
2816
2
原创 Springboot启动过程源码分析
定义初始化器/**} }在src/main/resources目录下创建META-INF/spring.factories;启动项目后日志打印定义监听器/**} }在src/main/resources目录下创建META-INF/spring.factories;启动项目后日志打印} } }实现 ApplicationRunner 接口/**} }实现 CommandLineRunner 接口/**} }日志输出!!
2023-03-10 21:47:30
81
原创 RedisCluster路由
org.redisson.cluster.ClusterConnectionManager#addMasterEntry初始化slot和node的映射关系存储在。)连接redis主节点,存取键值时redis-cli同样也会接收到MOVED重定向错误,但是会自动根据重定向信息来切换节点重新发起请求。在ClusterConnectionManager中的slot2entry中, 根据key所对应的slot获取对应的节点信息。使用redis-cli客户端普通连接redis主节点,来存取键值会返回。
2023-03-10 21:44:52
386
原创 Mybatis源码分析
加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
2023-03-10 21:39:01
283
原创 SpringAOP简单使用场景和源码分析
解析 AOP 的注解,并注册对应的内部管理的自动代理创建者的 bean(r)。当 bean 初始化完毕后,会触发所有 BeanPostProcessor 的 postProcessAfterInitialization 方法,此时就会调用我们的AnnotationAwareAspectJAutoProxyCreator 的 postProcessAfterInitialization。
2023-03-10 21:30:26
113
原创 Spring全局异常处理的使用及源码分析
**} }是一个组合注解,由@ControllerAdvice和@ResponseBody组成,相同于**@RestController与之间的区别,增加@ResponseBody**注解则返回的结果直接写入 HTTP中,反之直接返回view。通过指定@RestControllerAdvice中的和的属性可以扫描指定包路径下或类的异常。/**/**} }
2023-03-10 21:27:01
379
原创 Redis底层数据结构
字符串长度获取需要遍历整个字符串数组,遇到尾标识"\0"则停止计算,复杂度为O(n)。字符串拼接过程中存在原已使用内存空间被覆盖(内存溢出)。字符串以"\0"做为尾标识,存储以多个"\0"作为分隔符的字符串时会出现安全问题。C字符串SDS获取字符串长度的复杂度为O(N)获取字符串长度的复杂度为O(1)API是不安全的,可能会造成缓冲区溢出API是安全的,不会造成缓冲区溢出修改字符串长度N次必然需要执行N次内存重分配修改字符串长度N次最多需要执行N次内存重分配只能保存文本数据。
2023-03-10 17:29:25
106
Springboot扩展Nacos(Config)配置动态更新
2023-03-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人