
spring、boot、cloud
文章平均质量分 85
spring、boot、cloud
秃了也弱了。
即使没有万全准备,也要勇敢迈出第一步。无论远方的风雨有多大、路有多难走。风里雨里陪伴你们,赠人玫瑰,手有余香。在技术领域,我会一如既往的坚持下去。
展开
-
SpringBoot3.2新特性:JdbcClient
Spring 6.1中新添加了 JdbcClient 接口,它提供了 Fluent 风格的 API,统一了 JdbcTemplate 和 NamedParameterJdbcTemplate 的 Facade,支持链式操作。有了 JdbcClient 后就可以使用 Fluent 风格的 API 定义查询、设置参数以及执行数据库操作了。该功能简化了 JDBC 操作,使其更易读、更易懂。原创 2025-06-03 14:56:23 · 1166 阅读 · 0 评论 -
AntPathMatcher、PathPatternParser :Spring中URL、Resource路径匹配神器
是 Spring 框架里用于路径匹配的工具类,主要在 URL 路由、资源定位等场景发挥作用。该类支持?、*、**这些通配符。?:可匹配单个字符。*:能匹配零个或多个任意字符。**:可以匹配多层路径。原创 2025-05-13 17:26:53 · 340 阅读 · 0 评论 -
SpringBoot3.0不建议使用spring.factories,使用AutoConfiguration.imports新的自动配置方案
是一个位于META-INF/目录下的配置文件,它基于Java的SPI(Service Provider Interface)机制的变种实现。这个文件的主要功能是允许开发者声明接口的实现类,从而实现SpringBoot的自动装配和扩展点注册。这个文件在以前,真就是SpringBoot的扩展神器,各种自动配置的插件几乎都是基于这种方式来实现的。但是以后,就不是最优解了,而是替换为了。以下是翻译:简单来说,只需要创建一个文件,每一行都是一个自动配置的条目即可,用法比以前简洁不少。而以前的的。原创 2025-03-25 11:01:49 · 570 阅读 · 0 评论 -
Spring框架自带的定时任务:Spring Task详解
2、@Scheduled可用作可重复的注释。如果在同一个方法上发现了几个@Scheduled注解,那么它们中的每一个都将被独立处理,并为它们中的每一个触发一个单独的触发器。1、要调度的方法必须有void返回,并且不能接受任何参数。原创 2025-03-04 15:56:04 · 523 阅读 · 0 评论 -
springboot使用websocket
简介略,附上官方文档,spring5和spring6的官方文档内容大致是一样的:2、配置处理器创建WebSocket服务器可以实现或者,更有可能的是,扩展或者。以下示例使用3、前端测试测试地址:。连接,发送消息进行测试一下。使用起来非常的方便原创 2025-01-16 09:55:53 · 566 阅读 · 0 评论 -
Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端
Spring6.0推出了新的HTTP接口(类似Openfeign),Spring框架允许您将HTTP服务定义为Java接口方法。可以将这样的接口传递给创建通过HTTP客户端执行请求的代理,例如RestClient或者WebClient。也可以从实现接口@Controller用于服务器请求处理。原创 2025-01-16 09:25:23 · 1381 阅读 · 0 评论 -
Spring6.0新特性-RestClient:使用更友好的Http客户端
spring6.0官方推出了一个全新的HTTP客户端RestClient它是一个同步HTTP客户端,它提供了一个现代的、流畅的API。提供了对HTTP库的抽象,允许从Java对象到HTTP请求的方便转换,以及从HTTP响应创建对象。原创 2025-01-16 09:08:25 · 1280 阅读 · 0 评论 -
nacos核心源码深度剖析
2.x版本:同一个服务下,节点必须是相同的(临时/非临时)。nacos2.0使用大量的事件驱动方式。原创 2024-05-08 08:20:41 · 2955 阅读 · 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 · 462 阅读 · 0 评论 -
SpringBoot3.0新特性尝鲜,秒启动的快感!熟悉SpringAOT与RuntimeHints
在MyService中,通过反射的方式使用到了MyService的无参构造方法(MyService.class.newInstance()),如果我们不做任何处理,那么打成二进制可执行文件后是运行不了的,可执行文件中是没有MyService的无参构造方法的,会报方法找不到的错误。AOT会提前启动Spring容器,并执行Bean扫描的过程,将这个过程产生的所有BeanDefinition提前生成为Java文件,如下那样,所以,可以在编译期间通过插件生成BeanDefinition,而不是在启动期间进行扫描。原创 2024-04-25 08:24:53 · 2126 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(四)SpringAOP的源码分析
/ 把所有的Bean拿出来遍历,判断某个bean的类型是否是Aspectif (!continue;Class原创 2024-04-18 21:39:37 · 1017 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(三)ProxyFactory源码分析
在构造JdkDynamicAopProxy对象时,会先拿到被代理对象自己所实现的接口,并且额外的增加SpringProxy、Advised、DecoratingProxy三个接口,组合成一个Class[],并赋值给proxiedInterfaces属性并且检查这些接口中是否定义了equals()、hashcode()方法。原创 2024-04-18 21:39:04 · 1083 阅读 · 0 评论 -
Spring配置类解析与Bean扫描过程源码分析
6、如果配置类上存在@ComponentScan注解,那么则解析该注解,进行扫描,扫描得到一系列的BeanDefinition对象,然后判断这些BeanDefinition是不是也是配置类BeanDefinition(只要存在@Component注解就是配置类,所以基本上扫描出来的都是配置类),如果是则继续解析该配置类,(也有递归),并且会生成对应的ConfigurationClass。4、如果配置类上存在@Component注解,那么解析配置类中的内部类(这里有递归,如果内部类也是配置类的话)原创 2024-04-15 20:58:55 · 835 阅读 · 0 评论 -
Spring中类解析神器:MetadataReader,熟悉ClassMetadata、AnnotationMetadata
*** 自定义过滤器,只扫描标注@MyAnnotation的类} });// 获取扫描结果,并并且会自动封装到BeanDefinition Set < BeanDefinition > candidateComponents = provider . findCandidateComponents("com.test");原创 2024-04-15 20:58:03 · 1498 阅读 · 0 评论 -
Springboot中ApplicationContextInitializer的使用及源码分析
ApplicationContextInitializer接口的执行时机:用于在刷新之前初始化Spring ConfigurableApplicationContext的回调接口。通常在需要对应用程序上下文进行一些中使用。例如,。ApplicationContextInitializer接口只有一个方法,实现该方法会获得一个ConfigurableApplicationContext的回调。3、ApplicationContextInitializer的常用用法(1)注册BeanFactoryPostP原创 2024-02-28 15:43:46 · 2188 阅读 · 0 评论 -
Springboot外部化配置详解与源码分析
如果有两者的配置文件.properties和YAML格式放在同一个位置,.properties优先考虑。Springboot配置属性加载顺序从上到下依次加载,后加载的同名配置会覆盖之前的。).如果您仍然希望使用构造函数注入其他bean,则配置属性bean必须用。默认情况下,当指定的配置数据位置不存在时,Spring Boot将引发。如果希望指定一个位置,但允许它不存在,可以使用。多文档属性文件通常与激活属性结合使用,例如。对应第十条,当应用程序启动时,任何。中,它是一个抽象类,有许多实现。原创 2024-02-28 15:43:10 · 1011 阅读 · 0 评论 -
Springboot应用执行器Actuator源码分析
通过各种方式定义的Endpoint,创建为WebMvcEndpointHandlerMapping,进行Web映射。Actuator是Springboot提供运行时数据交互的规范。它覆盖应用内心戏、环境配置、度量指标、敏感操作。交互方式为Http Web或者JMX。注册Endpoint为Mvc映射。原创 2024-02-26 22:19:55 · 1403 阅读 · 0 评论 -
@Transactional中使用线程锁(不管是什么锁)导致了锁失效,震惊我一整年
我们都知道,@Transactional是通过使用AOP,在目标方法执行前后进行事务的开启和提交。所以,Lock锁住的代码,其实并没有包含住一整个事务!线程B此时可以获取到锁并进行查询,查询出来的level还是线程A修改之前的100,所以出现了并发问题。执行结果:我们发现,level只扣减了86!执行结果:我们发现,level只扣减了26,说明存在并发问题!我们将在该表中,实现level数据递减的并发操作。执行结果:我们发现,将整个事务都锁住,就没问题了!执行结果:我们发现,使用锁是可以控制并发问题。原创 2023-12-12 16:22:39 · 1380 阅读 · 2 评论 -
Springboot项目实现简单的文件服务器,实现文件上传+图片及文件回显
平常工作中的项目,上传的文件一般都会传到对象存储云服务中。当接手一个小项目,如何自己动手搭建一个文件服务器,实现图片、文件的回显,可以通过http请求获取到呢?注!本文以Springboot为基础,在其web环境进行搭建的。原创 2023-12-06 14:11:39 · 872 阅读 · 0 评论 -
Spring-SpEL表达式超级详细使用全解
SpEL(Spring Expression Language)是Spring框架中用于表达式语言的一种方式。它类似于其他编程语言中的表达式语言,用于在运行时计算值或执行特定任务。SpEL提供了一种简单且强大的方式来访问和操作对象的属性、调用对象的方法,以及实现运算、条件判断等操作。它可以被用于XML和注解配置中,可以用于许多Spring框架中的特性,如依赖注入、AOP、配置文件等。SpEL表达式可以在字符串中进行定义,使用特殊的语法和符号来表示特定的操作。原创 2023-11-15 11:44:27 · 21717 阅读 · 3 评论 -
Nacos使用JavaSDK,Nacos 动态监听配置,Nacos动态发布配置,Nacos动态获取实例
Nacos提供了一些客户端内置的SDK,以供我们直接对nacos中部分数据的操作。获取配置;监听配置动态变化;删除监听;发布配置;删除配置;注册实例;注销实例;获取全部实例;获取健康或不健康实例列表;获取一个健康实例;监听服务。要想使用这些内置SDK,需要引入nacos-client包:原创 2023-09-13 04:00:00 · 1151 阅读 · 0 评论 -
Spring Cloud OpenFeign源码解析,代理的魅力一展无遗
SpringCloud-OpenFeign官方文档使用大全详解本文主要分析OpenFeign的源码。通过上面的分析,我们知道,Feign定义的FeignClient接口,使用@Autowire自动注入时,最终会调用FactoryBean的getObject方法,而getObject方法最终通过jdk动态代理生成一个代理类,调用目标方法时会调用FeignInvocationHandler的invoke方法。原创 2023-06-09 10:54:55 · 983 阅读 · 0 评论 -
Spring Cloud Ribbon源码解析,Ribbon为什么可以实现负载均衡,为什么可以用服务名调用
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。简单的说,Ribbon是Neflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。注!原创 2023-06-08 14:35:43 · 1264 阅读 · 0 评论 -
SpringCloud-OpenFeign官方文档使用大全详解
Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。原创 2023-03-31 14:20:17 · 4487 阅读 · 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 · 16756 阅读 · 4 评论 -
响应式编程详解,带你熟悉Reactor响应式编程
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。在开发应⽤程序代码时,我们可以编写两种⻛格的代码,即命令式和响应式。命令式(Imperative)的代码:它由⼀组任务组成,每次只运⾏⼀项任务,每项任务⼜都依赖于前⾯的任务。数据会按批次进⾏处理,在前⼀项任务还没有完成对当前数据批次的处理时,不能将这些数据递交给下⼀项处理任务。原创 2023-03-16 16:32:51 · 5038 阅读 · 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 · 817 阅读 · 0 评论 -
MyBatis源码分析(四、续)MyBatis分页插件拦截器设计与实现
2.不对使用场景作假设:不限制用户使用,如接口调用,还是回话调用,又或是对Executor以及StatementHandler的选择等,不能影响缓存业务。3.友好性:当不符合分页情况下,作出友好的用户提示。如在修改操作中传入分页参数,或用户本身已在查询语句中自带分页语句,这种情况应作出提示(抛异常)。对二级缓存不友好,并且如果XML中带有collection标签的话,会造成数据行数紊乱。1.易用性:不需要额外配置,参数中带上Page即可,Page尽可能简单。原创 2023-03-07 10:25:16 · 305 阅读 · 0 评论 -
MyBatis源码分析(六)MetaObject工具类的使用与源码分析
MyBatis的MetaObject反射工具类,可以说是MyBatis的底层类,几乎不与MyBatis有耦合,如果项目中也需要这样一个工具类,可以“拿来即用”,或者稍加修改就可以拿来使用。非常强大。(图片来自于鲁班大叔)原创 2023-03-06 16:44:35 · 903 阅读 · 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 · 1082 阅读 · 2 评论 -
MyBatis源码分析(五)一级缓存与二级缓存的原理
MyBatis二级缓存只适用于不常进行增、删、改的数据,比如国家行政区省市区街道数据。一但数据变更,MyBatis会清空缓存。因此二级缓存不适用于经常进行更新的数据。在二级缓存的设计上,MyBatis大量地运用了装饰者模式,如CachingExecutor, 以及各种Cache接口的装饰器。二级缓存的刷新:二级缓存实现了Sqlsession之间的缓存数据共享,属于namespace级别二级缓存具有丰富的缓存策略。二级缓存可由多个装饰器,与基础缓存组合而成。原创 2023-03-02 15:58:21 · 506 阅读 · 0 评论 -
MyBatis源码分析(四)插件拦截器的原理及使用
一般开源框架都会提供扩展点,让开发者自行扩展,从而完成逻辑的增强。基于插件机制可以实现了很多有用的功能,比如说分页,字段加密,监控等功能,这种通用的功能,就如同AOP一样,横切在数据操作上。而通过Mybatis插件可以实现对框架的扩展,来实现自定义功能,并且对于用户是无感知的。Mybatis插件本质上来说就是一个拦截器,它体现了 JDK动态代理和责任链设计模式的综合运用。原创 2023-03-02 12:47:45 · 1092 阅读 · 0 评论 -
MyBatis源码分析(三)SqlSession的执行主流程
PreparedStatementHandler:预编译语句处理器,继承 BaseStatementHandler 抽象类,对应 java.sql.PrepareStatement 对象的处理,相比上面的普通语句处理器,它支持可变参数 SQL 执行,由于 PrepareStatement 的特性,它会进行预编译,在缓存中一旦发现有预编译的命令,会直接解析执行,所以减少了再次编译环节,能够有效提高系统性能,并预防 SQL 注入攻击(所以是系统默认也是我们推荐的语句处理器)。处理存储过程执行后的输出参数;原创 2023-03-01 18:48:58 · 702 阅读 · 0 评论 -
MyBatis源码分析(二)SqlSessionFactory的构建及配置文件读取过程
当我们获取到SqlSessionFactory之后,相当于初始化工作已经全部处理完成了,DefaultSqlSessionFactory中包含着Configuration的引用,所有的配置(Mapper、TypeHandler等等)都加载在Configuration中了。原创 2023-03-01 16:37:58 · 2510 阅读 · 0 评论 -
MyBatis源码分析(一)MyBatis整体架构分析
所以,很多公司推出了MyBatis-Plus来对MyBatis进行了增强,由于MyBatis的扩展机制较差,MyBatis-Plus几乎所有的扩展点都是对MyBatis源码的复写,而不是通过接口来扩展。StatementHandler:封装了JDBC Statement操作,负责对Statement的操作,例如PrepareStatement参数的设置以及结果集的处理。MyBatis提供的可以自定义复杂sql的机制,可以完美的结合sql优化,应对当前环境数据多查询慢的情况。原创 2023-03-01 16:37:40 · 1389 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(一)熟悉动态代理
SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(一)SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(二)SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(三)SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(四)java是静态语言,一旦定义好结构不容易被修改,而且传统的扩展方式都是通过继承和组合的方式组织新的类结构,侵入性太强。所以aop的出现就是为了解决这个问题,就是让它方便的被修改从而对类的结构进行增强。Java的Class类一旦被Cla原创 2023-02-21 10:44:02 · 916 阅读 · 0 评论 -
SpringAOP从入门到源码分析大全(二)熟悉ProxyFactory
• 常见实现类:org.springframework.aop.framework.ProxyFactory;实现类: org.springframework.aop.aspectj.annotation.AspectJProxyFactory。原创 2023-02-21 10:45:03 · 703 阅读 · 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 · 1185 阅读 · 0 评论 -
@Autowire源码分析,@Autowire是怎么实现依赖注入的
我们经常用@Autowire,那@Autowire是怎么实现自动注入的呢?一起分析源码看看吧!原创 2023-02-13 09:41:26 · 2354 阅读 · 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 · 6073 阅读 · 2 评论