自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(236)
  • 收藏
  • 关注

原创 Spring Cloud 面试的 25 连环炮!

Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。

2025-08-29 15:30:43 509

原创 SpringBoot + ResponseBodyEmitter 实时异步流式推送

相较于 SSE 技术,更加简单易用。它主要用于处理异步的 HTTP 响应,其核心优势在于。这一特性使得它在需要长时间处理或进行流式传输的场景中表现出色。需要注意的是,本质上是一个接口。:服务器在有数据时会立即响应客户端请求,若暂无数据,则保持连接开放,等待数据到来。**服务器推送事件 (SSE)**:服务器能够持续不断地向客户端推送各类事件,实现实时交互。:可逐步发送大量数据,像文件下载或者实时数据流传输等场景都适用。:在处理耗时任务时,能逐步返回处理结果,避免客户端长时间等待,提升用户体验。

2025-08-29 15:02:59 536

原创 SpringBoot 插件化架构的4种实现方案

这种方案利用Spring提供的条件注解(如等)实现插件的动态加载。通过配置文件或环境变量控制哪些插件被激活,适合简单的插件化需求。SPI(Service Provider Interface)是Java提供的一种服务发现机制,允许第三方为系统提供实现。SpringBoot也提供了类似机制的扩展,可以利用它实现一种松耦合的插件化架构。SpringBoot的自动配置机制是实现插件化的另一种强大方式。通过创建独立的starter模块,每个插件可以自包含所有依赖和配置,实现"即插即用"。

2025-08-29 15:02:49 647

原创 Mybatis-Plus 自定义SQL注入器

我们在使用Mybatis-Plus时,dao层都会去继承BaseMapper接口,这样就可以用BaseMapper接口所有的方法,BaseMapper中每一个方法其实就是一个SQL注入器在Mybatis-Plus的核心(core)包下,提供的默认可注入方法有这些:那如果我们想自定义SQL注入器呢,我们该如何去做?比如在Mybatis-Plus中调用updateById方法进行数据更新默认情况下是不能更新空值字段的。而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况。

2025-08-29 15:02:40 236

原创 Spring Boot 一个接口实现任意表的 Excel 导入导出

Java的web开发需要excel的导入导出工具,所以需要一定的工具类实现,如果是使用easypoi、Hutool导入导出excel,会非常的损耗内存,因此可以尝试使用easyexcel解决大数据量的数据的导入导出,且可以通过Java8的函数式编程解决该问题。这种方式可以通过把表中的字段顺序存储起来,通过配置数据和字段的位置实现数据的新增,那么如果出现了导出数据模板/手写excel的时候顺序和导入的时候顺序不一样怎么办?那么这些问题都解决了,如果出现大数据量的情况,如果要极大的使用到cpu,该怎么做呢?

2025-08-29 15:02:26 191

原创 Spring Boot 多种生产打包方式详解

maven-assembly-plugin 允许你通过定义描述符文件(descriptor)来完全自定义打包的内容和格式。你可以选择包含或排除特定的文件和目录。

2025-08-29 15:02:13 550

原创 让 MySQL 索引失效的哪些场景~

前提 如果创建 b,c,d 联合索引面如果 我where 后面的条件是为什么不能走索引呢 如果没有b的话 你查询的值相当于*11我们都知道是所有的意思也就是我能匹配到所有的数据如果 我 where 后面是为什么会走索引呢?你等于查询的数据是1*1我可以通过前面 1 进行索引匹配 所以就可以走索引最左缀匹配原则的最重要的就是 第一个字段我们接着看下一个失效场景select * 会走索引范围查找有概率索引失效但是在特定的情况下会生效 范围小就会使用 也可以理解为 返回结果集小就会使用索引。

2025-08-28 16:30:46 1032

原创 Spring Boot 项目中用了这种模式,优雅且实用!

我们通过使用服务定位器模式实现了一种扩展 Spring 控制反转的绝妙方法。它帮助我们解决了依赖注入未提供最佳解决方案的用例。也就是说,依赖注入仍然是首选,并且在大多数情况下不应使用服务定位器来替代依赖注入。

2025-08-28 16:06:01 385

原创 SpringBoot 实现动态插拔的 AOP

本文实现热插拔AOP就在于对adviceadvisedadvisorpointcut概念的理解,这是实现热插拔AOP的前提,其次就是对自定义也需要有一定的了解,因为我们jar不一定从classpath底下加载,也有可能来源其他地方,比如远程链接啥的,最后就是把原先spring自动帮我们实现aop,我们利用相关的api,自己手动实现一遍,示例代码的api只是利用spring api其中一种实现方式,它还有多种实现方式,比如可以利用,感兴趣的朋友,也可以自己实现一把。

2025-08-28 16:05:08 987

原创 SpringBoot 在一次 http 请求中耗费了多少内存?

在实际工作中,经常会需要进行在全链路压测,优化 GC参数,优化 JVM 内存分配。当知道 1 次 RPC 请求和 Http 请求需要的堆内存大小后,你可以精确地计算:指定的并发量之下,系统需申请多少堆内存。同时结合 JVM 新生代堆大小,就能推算出 1 分钟发生多少次 GC,这个 GC频率是否过于频繁?从而针对性的优化。我们希望 1 次 Rpc、Http 请求申请堆内存足够少,这样可减少 GC 导致的系统停顿,提高系统性能,单机可以支撑更高的并发量。1次 Http 请求,申请多少堆内存?

2025-08-28 16:03:41 965

原创 Spring Boot性能提升的核武器,速度提升500%!

虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。它与传统的操作系统线程相比,具有显著的优势:轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上,你可以轻松创建数十万甚至更多的虚拟线程。高并发性:虚拟线程能处理更高并发的场景,特别是 I/O 密集型的应用,适合开发高并发、响应式的应用程序。自动管理:无需手动管理线程池,JVM 会根据负载自动调整虚拟线程的调度,简化了并发编程的复杂性。

2025-08-28 16:00:09 257

原创 Spring Boot+Groovy 魔法轻松实现动态编程!

最近,小年在项目中使用Groovy对业务能力进行了一些扩展,感觉比较有意思,而且效果也不错,所以来分享一下使用经验。先来简单概述一下小年的项目需求背景:有一个支付业务场景需要接入多个运营商的支付能力,每个运营商在支付后都会返回支付结果,但是每个运营商的支付结果报文格式各不相同。要实现起来并不难,只需要针对每个运营商的报文格式制定不同的解析规则,当然问题并没有这么 easy运营商的支付结果报文格式可能会变化后面可能还需要接入新的运营商。

2025-08-28 15:43:58 866

原创 特别精选Java虚拟机JVM面试题

浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。浅复制:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。

2025-08-27 16:23:40 970

原创 Spring Boot 服务监控机制是什么?线程、JVM堆信息怎么收集?

通过上面的介绍,可以看到 SpringBoot 提供的监控非常强大,但是就算再全面的监控也不可能满足所有人的需求,所以 SpringBoot 也支持自定义监控端点。@Endpoint:定义一个监控端点,同时支持 HTTP 和 JMX 两种方式。:定义一个监控端点,只支持 HTTP 方式。:定义一个监控端点,只支持 JMX 方式。:作用在方法上,可用来返回端点展示的信息(通过 Get 方法请求)。:作用在方法上,可用来修改端点展示的信息(通过 Post 方法请求)。

2025-08-27 16:16:03 623

原创 Spring Boot启动时如何对配置文件进行校验?

通过配置Spring Boot启动校验功能,可以快速的识别参数配置的错误,避免在使用组件的时候才发现问题,可以减少排查问题的工作量,并且在我们封装自定义starter时可以有更好的体验。试想一下,你们很多项目共用部门一个Redis集群,那不同项目之间肯定要进行key隔离,这时候你提供一个公共的redis starter,强制必须在使用时指定。Validation 支持如下几种校验,可以满足基本的业务逻辑,当然如果还是满足不了你的业务逻辑,可以选择定制校验规则。在使用配置文件校验时,必须使用。

2025-08-27 16:14:26 455

原创 Spring Boot 如何解决多个定时任务阻塞问题?

本篇文章介绍了Spring Boot 中 实现多线程定时任务的三种方案,你喜欢哪一种?

2025-08-27 16:13:46 161

原创 SpringBoot巧用 @Async 提升API接口并发能力

异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是“异步调用”?“异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。

2025-08-27 16:10:18 269

原创 SpringBoot集成Sentinel实现接口流量控制

官网提供的demo/*** 项目入口*/// 配置规则.// 1.5.0 版本开始可以直接利用 try-with-resources 特性// 被保护的逻辑// 处理被流控的逻辑");@Service@Autowired注解用来标识资源是否被限流、降级。上述例子上该注解的属性sayHello表示资源名。

2025-08-27 16:00:13 543

原创 Mybatis中SQL注入攻击的3种方式

SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少。新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手,希望通过Mybatis框架使用不当导致的SQL注入问题为例,能够抛砖引玉给新手一些思路。

2025-08-27 15:56:43 242

原创 如何让Spring Boot 的配置 “动” 起来?

对于微服务而言配置本地化是个很大的鸡肋,不可能每次需要改个配置都要重新把服务重新启动一遍,因此最终的解决方案都是将配置外部化,托管在一个平台上达到不用重启服务即可一次修改多处生效的目的。但是对于单体应用的Spring Boot项目而言,动态刷新显然是有点多余,反正就一个服务,改下重启不就行了?添加数据源:对接某个第三方平台的时候,你不可能每次添加一个数据源都要重启下服务固化的对接:大量的固定对接方式,只是其中的某个固定的代码段不同,比如提供视图中的字段不同,接口服务中字段不同等情况。

2025-08-27 15:53:30 443

原创 Spring-boot中实现通用Auth认证,有哪几种方式?

最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大,代码方面不明显,但感觉自己抹掉了 java、Tomcat、Spring 一直挡在我眼前的一层纱。对它们的理解上了一个新的层次。好久没输出了,于是挑一个方面总结一下,希望在梳理过程中再了解一些其他的东西。由于 Java 繁荣的生态,下面每一个模块都有大量的文章专门讲述。所以我选了另外一个角度,从实际问题出发,将这些分散的知识串联起来,各位可以作为一个综述来看。

2025-08-27 15:50:16 410

原创 Spring事务方法与非事务方法执行相互调用不回滚

写这篇文章的初衷呢就是最近遇到了一个spring事务的大坑。与其说是坑,还不如说是自己事务这块儿太薄弱导致的(自嘲下)。

2025-08-27 15:49:14 652

原创 SpringBoot+JWT整合实现单点登录SSO

*** @author: 波波烤鸭*/try {try {resultMap.put("msg", "用户名或密码错误!");try {resultMap.put("msg", "认证通过!");/*** @author: 波波烤鸭*///如果携带错误的token,则给用户提示请登录!

2025-08-27 15:38:57 583

原创 史上最全的Spring面试题总结,几乎包括所有会问的点

Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。

2025-08-26 16:25:24 1260

原创 Spring Boot+Groovy 魔法轻松实现动态编程!

Groovy 是一种基于 Java 平台的动态编程语言。它结合了静态类型语言和动态类型语言的特性,是一种面向对象的脚本语言,设计目标是提供更简洁、更具表达力的语法,以及更易于使用的 API。动态脚本语言,它允许在运行时动态添加、修改和删除类和方法;与 Java 兼容,语法甚至更加简单;原理并不复杂,JVM 类加载器动态将 Groovy 代码编译成 Java Class,然后生成 Java 对象在 JVM 上执行。

2025-08-26 16:07:49 263

原创 SpringBoot 实现 RAS+AES 自动接口解密

非对称加密非对称加密算法是一种密钥的保密方法。非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。对称加密加密秘钥和解密秘钥是一样,当你的密钥被别人知道后,就没有秘密可言了AES 是对称加密算法,优点:加密速度快;缺点:如果秘钥丢失,就容易解密密文,安全性相对比较差;关注公众号:码猿技术专栏,回复关键词:11

2025-08-26 16:07:08 698

原创 SpringBoot+Docker:高效容器化的最佳实践

您可能知道 Docker 中的所有镜像都有 Linux 内核的基础层,因此我们不需要将这部分添加到我们的镜像中,因为我们的基础镜像提供了您的应用程序所需的底层内核和依赖项。在此示例中,我们使用多阶段构建,首先在单独的层中构建 Spring Boot 应用程序,然后将构建的 jar 文件复制到最终镜像中。通过这种方式使用多阶段构建,我们可以创建一个精简的 Docker 映像,其中仅包含运行 Spring Boot 应用程序所需的依赖项和文件。通过这样做,我们可以减小图像的大小并提高应用程序的性能。

2025-08-26 16:05:12 257

原创 SpringBoot:一个注解就能帮你下载任意对象

如果我说现在只需要一个注解就能帮你下载任意的对象,是不是觉得非常的方便感觉差别不大?那就听听我遇到的一个下载需求我们有一个平台是管理设备的,然后每个设备都会有一个二维码图片,用一个字段存储的 http 地址现在需要导出所有设备二维码图片的压缩包,图片名称需要用设备名称加 .png 后缀,需求上来说并不难,但是着实有点麻烦首先我需要将设备列表查出来然后使用二维码地址下载图片并写到本地缓存文件在下载之前需要先判断是否已经存在缓存下载时需要并发下载提升性能等所有图片下载结束后再生成一个压缩文件。

2025-08-26 16:04:25 566

原创 Spring Boot 实现 热插拔 AOP,非常实用!

Advice:“通知”,表示 Aspect 在特定的 Join point 采取的操作。包括 “around”, “before” and “after 等 Advice,大体上分为了三类:BeforeAdvice、MethodInterceptor、AfterAdviceAdvisor:“通知者”,它持有 Advice,是 Spring AOP 的一个基础接口。它的子接口 PointcutAdvisor 是一个功能完善接口,它涵盖了绝大部分的 Advisor。Advised:AOP 代理工厂配置类接口。提

2025-08-26 16:01:31 394

原创 Spring Boot 插件化开发模式

插件化开发模式正在很多编程语言或技术框架中得以广泛的应用实践,比如大家熟悉的jenkins,docker可视化管理平台rancher,以及日常编码使用的编辑器idea,vscode等,随处可见的带有热插拔功能的插件,让系统像插了翅膀一样,大大提升了系统的扩展性和伸缩性,也拓展了系统整体的使用价值,那么为什么要使用插件呢?

2025-08-26 15:59:22 661

原创 Nacos 的 长轮询 定时机制,太好用了!

为方便理解与表达,这里把 Nacos 控制台和 Nacos 注册中心称为 Nacos 服务器(就是 web 界面那个),我们编写的业务服务称为 Nacso 客户端;Nacos 动态监听的长轮询机制原理图,本篇将围绕这张图剖析长轮询定时机制的原理:ConfigService 是 Nacos 客户端提供的用于访问实现配置中心基本操作的类,我们将从 ConfigService 的实例化开始长轮询定时机制的源码之旅;

2025-08-26 15:59:00 295

原创 Spring Cloud微服务,如何保证对外接口的安全?

通常来说,要将暴露在外网的 API 接口视为安全接口,需要实现防篡改和防重放的功能。由于 HTTP 是一种无状态协议,服务端无法确定客户端发送的请求是否合法,也不了解请求中的参数是否正确。如果非法用户通过抓包获取接口参数并修改 user_id 或 amount 的值,就能为任意账户添加余额。防重放也叫防复用。简单来说就是我获取到这个请求的信息之后什么也不改,,直接拿着接口的参数去重复请求这个充值的接口。此时我的请求是合法的, 因为所有参数都是跟合法请求一模一样的。

2025-08-26 15:58:06 555

原创 Feign第一次调用为什么会很慢?

其实这种饥饿加载模式,类似于“客户端负载预热”的一个操作,项目启动的时候进行加载,防止服务之间调用可以因为数据量、业务逻辑处理复杂性导致接口超时,如果你的服务之间调用业务处理比较复杂、且慢,不妨可以试试这种解决方式。

2025-08-26 15:49:30 694

原创 Spring Boot 整合分布式消息平台 Pulsar

从 SpringBoot 整合 Java 客户端使用来看,Pulsar 的 api 是非常友好的,使用起来方便简洁。Consumer 的使用需要考虑多一些,需要考虑到批量、异步以及订阅类型。

2025-08-26 15:43:06 619

原创 Nacos+@RefreshScope 为什么配置能动态刷新?

上面是这个RefreshScope实现动态刷新大致的原理,其中里面还有很多细节,可能需要留给大家自己debug去深入理解。

2025-08-22 11:20:59 670

原创 SpringBoot 多数据源及事务解决方案

通过继承即可实现。为了方便对数据源进行操作,我们定义一个接口,为业务提供操作数据源的统一接口。该接口主要是对数据表中定义的数据源,提供基础管理功能。的实现如下图所示:根据前面的分析,是在容器启动的时候,执行注入数据源对象,完成之后无法对数据源进行修改。则实现接口,可以将数据表中的数据源加载到dataSources。为了保证在多个数据源中事务的一致性,我们可以手动管理Connetion的事务提交和回滚。考虑到不同ORM框架的事务管理实现差异,要求实现自定义事务管理不影响框架层的事务。

2025-08-22 11:18:34 734

原创 Spring Boot 可以同时处理多少请求?

我们都知道,SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的。所以与其说SpringBoot可以处理多少请求,倒不如说Tomcat可以处理多少请求。关于Tomcat的默认配置,都在文件中,对应的配置类则是。和处理请求数量相关的参数有四个:server.tomcat.threads.min-spare:最少的工作线程数,默认大小是10。该参数相当于长期工,如果并发请求的数量达不到10,就会依次使用这几个线程去处理请求。

2025-08-22 11:14:23 426

原创 使用Spring Cache优雅的实现分布式二级缓存!

Spring Cache是Spring-context包中提供的基于注解方式使用的缓存组件,定义了一些标准接口,通过实现这些接口,就可以通过在方法上增加注解来实现缓存。这样就能够避免缓存代码与业务处理耦合在一起的问题。Cache和Caffeine,一个用于Java的高性能缓存库。缓存和Map之间的一个根本区别是缓存会清理存储的项目。

2025-08-22 11:11:41 753

原创 Spring Boot 中一行代码搞定Http请求!

在Java的世界中,Http客户端之前一直是Apache家的HttpClient占据主导,但是由于此包较为庞大,API又比较难用,因此并不使用很多场景。而新兴的OkHttp、Jodd-http固然好用,但是面对一些场景时,学习成本还是有一些的。很多时候,我们想追求轻量级的Http客户端,并且追求简单易用。而OKHttp是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。

2025-08-22 11:10:20 265

原创 Spring Boot 如何快速过滤出一次请求的所有日志?

本文讲述了如何使用MDC工具来快速过滤一次请求的所有日志,并通过装饰器模式使得MDC工具在异步线程里也能生效。有了MDC,再通过AOP技术对所有的切面植入requestId,就可以将整个系统的任意流程的日志过滤出来。使用MDC工具,在开发自测阶段,可以极大地节省定位问题的时间,提升开发效率;在运维维护阶段,可以快速地收集相关日志信息,加快分析速度。

2025-08-22 11:09:10 374

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除