![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
spring、boot、cloud
文章平均质量分 86
spring、boot、cloud
秃了也弱了。
即使没有万全准备,也要勇敢迈出第一步。无论远方的风雨有多大、路有多难走。风里雨里陪伴你们,赠人玫瑰,手有余香。在技术领域,我会一如既往的坚持下去。
展开
-
nacos核心源码深度剖析
2.x版本:同一个服务下,节点必须是相同的(临时/非临时)。nacos2.0使用大量的事件驱动方式。原创 2024-05-08 08:20:41 · 1315 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(五)手写一个编程式AOP
Retention;Target;/*** 这是一个Advice/*** 这相当于around通知try {System . out . println("前置通知");System . out . println("后置通知");System . out . println("异常通知");throw e;System . out . println("最终通知");} } }/**原创 2024-04-25 08:33:01 · 402 阅读 · 0 评论 -
SpringBoot3.0新特性尝鲜,秒启动的快感!熟悉SpringAOT与RuntimeHints
在MyService中,通过反射的方式使用到了MyService的无参构造方法(MyService.class.newInstance()),如果我们不做任何处理,那么打成二进制可执行文件后是运行不了的,可执行文件中是没有MyService的无参构造方法的,会报方法找不到的错误。AOT会提前启动Spring容器,并执行Bean扫描的过程,将这个过程产生的所有BeanDefinition提前生成为Java文件,如下那样,所以,可以在编译期间通过插件生成BeanDefinition,而不是在启动期间进行扫描。原创 2024-04-25 08:24:53 · 1328 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(四)SpringAOP的源码分析
/ 把所有的Bean拿出来遍历,判断某个bean的类型是否是Aspectif (!continue;Class原创 2024-04-18 21:39:37 · 932 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(三)ProxyFactory源码分析
在构造JdkDynamicAopProxy对象时,会先拿到被代理对象自己所实现的接口,并且额外的增加SpringProxy、Advised、DecoratingProxy三个接口,组合成一个Class[],并赋值给proxiedInterfaces属性并且检查这些接口中是否定义了equals()、hashcode()方法。原创 2024-04-18 21:39:04 · 969 阅读 · 0 评论 -
Spring配置类解析与Bean扫描过程源码分析
6、如果配置类上存在@ComponentScan注解,那么则解析该注解,进行扫描,扫描得到一系列的BeanDefinition对象,然后判断这些BeanDefinition是不是也是配置类BeanDefinition(只要存在@Component注解就是配置类,所以基本上扫描出来的都是配置类),如果是则继续解析该配置类,(也有递归),并且会生成对应的ConfigurationClass。4、如果配置类上存在@Component注解,那么解析配置类中的内部类(这里有递归,如果内部类也是配置类的话)原创 2024-04-15 20:58:55 · 749 阅读 · 0 评论 -
Spring中类解析神器:MetadataReader,熟悉ClassMetadata、AnnotationMetadata
*** 自定义过滤器,只扫描标注@MyAnnotation的类} });// 获取扫描结果,并并且会自动封装到BeanDefinition Set < BeanDefinition > candidateComponents = provider . findCandidateComponents("com.test");原创 2024-04-15 20:58:03 · 1135 阅读 · 0 评论 -
Springboot中ApplicationContextInitializer的使用及源码分析
ApplicationContextInitializer接口的执行时机:用于在刷新之前初始化Spring ConfigurableApplicationContext的回调接口。通常在需要对应用程序上下文进行一些中使用。例如,。ApplicationContextInitializer接口只有一个方法,实现该方法会获得一个ConfigurableApplicationContext的回调。3、ApplicationContextInitializer的常用用法(1)注册BeanFactoryPostP原创 2024-02-28 15:43:46 · 1804 阅读 · 0 评论 -
Springboot外部化配置详解与源码分析
如果有两者的配置文件.properties和YAML格式放在同一个位置,.properties优先考虑。Springboot配置属性加载顺序从上到下依次加载,后加载的同名配置会覆盖之前的。).如果您仍然希望使用构造函数注入其他bean,则配置属性bean必须用。默认情况下,当指定的配置数据位置不存在时,Spring Boot将引发。如果希望指定一个位置,但允许它不存在,可以使用。多文档属性文件通常与激活属性结合使用,例如。对应第十条,当应用程序启动时,任何。中,它是一个抽象类,有许多实现。原创 2024-02-28 15:43:10 · 805 阅读 · 0 评论 -
Springboot应用执行器Actuator源码分析
通过各种方式定义的Endpoint,创建为WebMvcEndpointHandlerMapping,进行Web映射。Actuator是Springboot提供运行时数据交互的规范。它覆盖应用内心戏、环境配置、度量指标、敏感操作。交互方式为Http Web或者JMX。注册Endpoint为Mvc映射。原创 2024-02-26 22:19:55 · 1163 阅读 · 0 评论 -
@Transactional中使用线程锁(不管是什么锁)导致了锁失效,震惊我一整年
我们都知道,@Transactional是通过使用AOP,在目标方法执行前后进行事务的开启和提交。所以,Lock锁住的代码,其实并没有包含住一整个事务!线程B此时可以获取到锁并进行查询,查询出来的level还是线程A修改之前的100,所以出现了并发问题。执行结果:我们发现,level只扣减了86!执行结果:我们发现,level只扣减了26,说明存在并发问题!我们将在该表中,实现level数据递减的并发操作。执行结果:我们发现,将整个事务都锁住,就没问题了!执行结果:我们发现,使用锁是可以控制并发问题。原创 2023-12-12 16:22:39 · 807 阅读 · 2 评论 -
Springboot项目实现简单的文件服务器,实现文件上传+图片及文件回显
平常工作中的项目,上传的文件一般都会传到对象存储云服务中。当接手一个小项目,如何自己动手搭建一个文件服务器,实现图片、文件的回显,可以通过http请求获取到呢?注!本文以Springboot为基础,在其web环境进行搭建的。原创 2023-12-06 14:11:39 · 614 阅读 · 0 评论 -
Spring-SpEL表达式超级详细使用全解
SpEL(Spring Expression Language)是Spring框架中用于表达式语言的一种方式。它类似于其他编程语言中的表达式语言,用于在运行时计算值或执行特定任务。SpEL提供了一种简单且强大的方式来访问和操作对象的属性、调用对象的方法,以及实现运算、条件判断等操作。它可以被用于XML和注解配置中,可以用于许多Spring框架中的特性,如依赖注入、AOP、配置文件等。SpEL表达式可以在字符串中进行定义,使用特殊的语法和符号来表示特定的操作。原创 2023-11-15 11:44:27 · 9932 阅读 · 3 评论 -
Nacos使用JavaSDK,Nacos 动态监听配置,Nacos动态发布配置,Nacos动态获取实例
Nacos提供了一些客户端内置的SDK,以供我们直接对nacos中部分数据的操作。获取配置;监听配置动态变化;删除监听;发布配置;删除配置;注册实例;注销实例;获取全部实例;获取健康或不健康实例列表;获取一个健康实例;监听服务。要想使用这些内置SDK,需要引入nacos-client包:原创 2023-09-13 04:00:00 · 932 阅读 · 0 评论 -
Spring Cloud OpenFeign源码解析,代理的魅力一展无遗
SpringCloud-OpenFeign官方文档使用大全详解本文主要分析OpenFeign的源码。通过上面的分析,我们知道,Feign定义的FeignClient接口,使用@Autowire自动注入时,最终会调用FactoryBean的getObject方法,而getObject方法最终通过jdk动态代理生成一个代理类,调用目标方法时会调用FeignInvocationHandler的invoke方法。原创 2023-06-09 10:54:55 · 878 阅读 · 0 评论 -
Spring Cloud Ribbon源码解析,Ribbon为什么可以实现负载均衡,为什么可以用服务名调用
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。简单的说,Ribbon是Neflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。注!原创 2023-06-08 14:35:43 · 1167 阅读 · 0 评论 -
SpringCloud-OpenFeign官方文档使用大全详解
Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。原创 2023-03-31 14:20:17 · 3660 阅读 · 4 评论 -
Spring-WebFlux使用,一文带你从0开始学明白Spring-WebFlux,学明白响应式编程
传统的基于Servlet的Web框架,如Spring MVC,在本质上都是阻塞和多线程的,每个连接都会使用一个线程。在请求处理的时候,会在线程池中拉取一个工作者( worker )线程来对请求进行处理。同时,请求线程是阻塞的,直到工作者线程提示它已经完成为止。在Spring5中,引入了一个新的异步、非阻塞的WEB模块,就是Spring-WebFlux。该框架在很大程度上是基于Reactor项目的,能够解决Web应用和API中对更好的可扩展性的需求。响应式编程详解,带你熟悉Reactor响应式编程。原创 2023-03-16 20:59:48 · 7501 阅读 · 4 评论 -
响应式编程详解,带你熟悉Reactor响应式编程
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。在开发应⽤程序代码时,我们可以编写两种⻛格的代码,即命令式和响应式。命令式(Imperative)的代码:它由⼀组任务组成,每次只运⾏⼀项任务,每项任务⼜都依赖于前⾯的任务。数据会按批次进⾏处理,在前⼀项任务还没有完成对当前数据批次的处理时,不能将这些数据递交给下⼀项处理任务。原创 2023-03-16 16:32:51 · 2851 阅读 · 6 评论 -
MyBatis源码分析(七)MyBatis与Spring的整合原理与源码分析
MyBatis与Spring的整合,依赖于mybatis-spring包。其中的设计非常的巧妙,并且与Spring完美结合,我们一起来完整分析一下MyBatis是怎么与Spring整合的。也就是说,通过代理SqlSession,每次执行SqlSession的select、update等方法时,会先执行获取SqlSession的方法,然后再调用select方法。也就是说,我们做的sqlSessionFactory.openSession这个操作,交给框架的代理做了。原创 2023-03-07 22:25:52 · 702 阅读 · 0 评论 -
MyBatis源码分析(四、续)MyBatis分页插件拦截器设计与实现
2.不对使用场景作假设:不限制用户使用,如接口调用,还是回话调用,又或是对Executor以及StatementHandler的选择等,不能影响缓存业务。3.友好性:当不符合分页情况下,作出友好的用户提示。如在修改操作中传入分页参数,或用户本身已在查询语句中自带分页语句,这种情况应作出提示(抛异常)。对二级缓存不友好,并且如果XML中带有collection标签的话,会造成数据行数紊乱。1.易用性:不需要额外配置,参数中带上Page即可,Page尽可能简单。原创 2023-03-07 10:25:16 · 251 阅读 · 0 评论 -
MyBatis源码分析(六)MetaObject工具类的使用与源码分析
MyBatis的MetaObject反射工具类,可以说是MyBatis的底层类,几乎不与MyBatis有耦合,如果项目中也需要这样一个工具类,可以“拿来即用”,或者稍加修改就可以拿来使用。非常强大。(图片来自于鲁班大叔)原创 2023-03-06 16:44:35 · 801 阅读 · 0 评论 -
MyBatis源码分析(二、续)SqlSource创建流程,SQL如何解析?如何将#{id}变成?的
解析select\insert\ update\delete标签中的SQL语句,最终将解析到的SqlNode封装到MixedSqlNode中的List集合中。如果SQL中包含#{},则将SqlNode封装到RawSqlSource中,并指定parameterType。如果SQL中包含${}和动态SQL语句,则将SqlNode封装到DynamicSqlSource。创建SqlSource,解析SQL,封装SQL语句(未参数绑定)和入参信息。咱们此处研究的是简单的、包含#{id}的sql,暂不研究动态SQL。原创 2023-03-02 16:45:49 · 985 阅读 · 2 评论 -
MyBatis源码分析(五)一级缓存与二级缓存的原理
MyBatis二级缓存只适用于不常进行增、删、改的数据,比如国家行政区省市区街道数据。一但数据变更,MyBatis会清空缓存。因此二级缓存不适用于经常进行更新的数据。在二级缓存的设计上,MyBatis大量地运用了装饰者模式,如CachingExecutor, 以及各种Cache接口的装饰器。二级缓存的刷新:二级缓存实现了Sqlsession之间的缓存数据共享,属于namespace级别二级缓存具有丰富的缓存策略。二级缓存可由多个装饰器,与基础缓存组合而成。原创 2023-03-02 15:58:21 · 422 阅读 · 0 评论 -
MyBatis源码分析(四)插件拦截器的原理及使用
一般开源框架都会提供扩展点,让开发者自行扩展,从而完成逻辑的增强。基于插件机制可以实现了很多有用的功能,比如说分页,字段加密,监控等功能,这种通用的功能,就如同AOP一样,横切在数据操作上。而通过Mybatis插件可以实现对框架的扩展,来实现自定义功能,并且对于用户是无感知的。Mybatis插件本质上来说就是一个拦截器,它体现了 JDK动态代理和责任链设计模式的综合运用。原创 2023-03-02 12:47:45 · 960 阅读 · 0 评论 -
MyBatis源码分析(三)SqlSession的执行主流程
PreparedStatementHandler:预编译语句处理器,继承 BaseStatementHandler 抽象类,对应 java.sql.PrepareStatement 对象的处理,相比上面的普通语句处理器,它支持可变参数 SQL 执行,由于 PrepareStatement 的特性,它会进行预编译,在缓存中一旦发现有预编译的命令,会直接解析执行,所以减少了再次编译环节,能够有效提高系统性能,并预防 SQL 注入攻击(所以是系统默认也是我们推荐的语句处理器)。处理存储过程执行后的输出参数;原创 2023-03-01 18:48:58 · 581 阅读 · 0 评论 -
MyBatis源码分析(二)SqlSessionFactory的构建及配置文件读取过程
当我们获取到SqlSessionFactory之后,相当于初始化工作已经全部处理完成了,DefaultSqlSessionFactory中包含着Configuration的引用,所有的配置(Mapper、TypeHandler等等)都加载在Configuration中了。原创 2023-03-01 16:37:58 · 2297 阅读 · 0 评论 -
MyBatis源码分析(一)MyBatis整体架构分析
所以,很多公司推出了MyBatis-Plus来对MyBatis进行了增强,由于MyBatis的扩展机制较差,MyBatis-Plus几乎所有的扩展点都是对MyBatis源码的复写,而不是通过接口来扩展。StatementHandler:封装了JDBC Statement操作,负责对Statement的操作,例如PrepareStatement参数的设置以及结果集的处理。MyBatis提供的可以自定义复杂sql的机制,可以完美的结合sql优化,应对当前环境数据多查询慢的情况。原创 2023-03-01 16:37:40 · 1304 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(一)熟悉动态代理
SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(一)SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(二)SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(三)SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(四)java是静态语言,一旦定义好结构不容易被修改,而且传统的扩展方式都是通过继承和组合的方式组织新的类结构,侵入性太强。所以aop的出现就是为了解决这个问题,就是让它方便的被修改从而对类的结构进行增强。Java的Class类一旦被Cla原创 2023-02-21 10:44:02 · 810 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(二)熟悉ProxyFactory
• 常见实现类:org.springframework.aop.framework.ProxyFactory;实现类: org.springframework.aop.aspectj.annotation.AspectJProxyFactory。原创 2023-02-21 10:45:03 · 625 阅读 · 0 评论 -
Spring循环依赖问题,Spring是如何解决循环依赖的?
多个bean之间相互依赖,形成了一个闭环。比如:A依赖于B、B依赖于C、C依赖于A。注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。Spring解决循环依赖,正式靠着这三级缓存完成的,相当于一个递归初始化的过程:在 Spring 底层 IoC 容器 BeanFactory 中处理循环依赖的方法主要借助于以下3(一级 Map),里面保存了所有已经初始化好的单例 Bean(二级 Map),里面会保存从三级 Map。原创 2023-02-13 09:41:43 · 1057 阅读 · 0 评论 -
@Autowire源码分析,@Autowire是怎么实现依赖注入的
我们经常用@Autowire,那@Autowire是怎么实现自动注入的呢?一起分析源码看看吧!原创 2023-02-13 09:41:26 · 2236 阅读 · 2 评论 -
springboot+jwt实现token登陆权限认证
目录一 前言二 jwt实现登陆认证流程三 相关介绍jwt3.1jwt 组成3.2 jwt优点四 jwt用户登陆发放token4.1 pom.xml4.2jwt工具类4.3 用户实体4.4Controller4.5 测试五 jwt登陆拦截认证5.1自定义拦截器5.2 service5.3拦截器配置5.4Controller5.5 测试六 官网链接一 前言此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉.转载 2020-07-01 11:18:56 · 5998 阅读 · 2 评论 -
springboot访问静态资源
一、访问静态资源1.静态资源目录只要静态资源放在类路径下: called /static (or /public or /resources or /META-INF/resources访问 : 当前项目根路径/ + 静态资源名。2.原理静态映射/**。请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面。3.资源访问路径修改# 当前项目 + static-path-pa..原创 2021-12-24 08:43:55 · 222 阅读 · 0 评论 -
springboot-webFlux的webclient详细使用介绍,细节拉满
在 Spring 5 之前,如果我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,不过由于 RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端,因此存在一定性能瓶颈。根据 Spring 官方文档介绍,在将来的版本中它可能会被弃用。WebClient是Spring WebFlux模块提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具,从Spring5.0开始提供。原创 2022-09-24 20:06:58 · 7894 阅读 · 0 评论 -
SpringBoot自定义banner,如何定制炫酷的banner提升项目B格?
Springboot启动的时候默认是有一套自己的banner的:我们如何自定义这个banner呢?在Spring Boot工程的/src/main/resources目录下创建一个banner.txt文件,然后将ASCII字符画复制进去,就能替换默认的banner了。原创 2022-11-16 23:00:00 · 1508 阅读 · 0 评论 -
Spring Bean生命周期——从源码角度详解Spring Bean的生命周期(上)
spring系列-注解驱动原理及源码-bean生命周期深入浅出弄明白Spring的BeanDefinition,Spring-Beans部分源码分析本文在此做更深入得讨论和研究,将源码吃透!总而言之,Spring BeanDefinition合并阶段,就是在RootBeanDefinition的基础上,添加或者修改成子类的属性。原创 2023-01-07 12:23:18 · 672 阅读 · 0 评论 -
springboot-自动配置原理
目录一、@SpringBootApplication二、@EnableAutoConfiguration1.AutoConfigurationPackages.Registrar.class批量注册组件2.AutoConfigurationImportSelector.class三、按需开启自动配置1.得益于按条件装配@Conditional2.例如AOP:四、总结五、springboot快速配置一、@SpringBootApplication@Targe.原创 2021-12-24 09:27:16 · 1230 阅读 · 0 评论 -
spring-session的使用及其原理——分布式session解决方案
当请求进来的时候,SessionRepositoryFilter会先拦截到请求,将request和response对象转换成SessionRepositoryRequestWrapper和SessionRepositoryResponseWrapper。后续当第一次调用request的getSession方法时,会调用到SessionRepositoryRequestWrapper的getSession方法。这个方法是被从写过的,逻辑是先从request的属性中查找,如果找不到。......原创 2022-07-20 15:56:09 · 1811 阅读 · 0 评论 -
Spring应用上下文生命周期详解及源码分析,Spring IOC容器启动及关闭过程超详细解释(下)
使用Lifecycle 的方式其实并不友好,它是一个同步的方式监听,不如使用Listener监听器的方式,对一些长时间阻塞的方法可以使用异步的方式进行操作。原创 2023-02-08 17:11:25 · 1128 阅读 · 0 评论