- 博客(101)
- 资源 (1)
- 收藏
- 关注
原创 Arthas使用
通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用 IDE 远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦 JVM 重新启动,它可能无法复现,如上文所述。
2025-12-19 17:53:53
326
原创 SpringCloud OpenFeign 全功能配置详解
在调用方微服务中创建一个 UserClient 接口。// Feign 客户端接口@FeignClient(name = "user-service") // name 属性指向目标微服务的服务名。
2025-11-20 10:19:13
757
原创 SpringBoot切片上传+断点续传
分片上传就是把一个大的文件分成若干块,一块一块的传输。这样做的好处可以减少重新上传的开销。比如:如果我们上传的文件是一个很大的文件,那么上传的时间应该会比较久,再加上网络不稳定各种因素的影响,很容易导致传输中断,用户除了重新上传文件外没有其他的办法,但是我们可以使用分片上传来解决这个问题。通过分片上传技术,如果网络传输中断,我们重新选择文件只需要传剩余的分片。而不需要重传整个文件,大大减少了重传的开销。但是我们要如何选择一个合适的分片呢?
2025-07-18 09:59:28
430
原创 SpringBoot封装自己的SDK
在使用Maven构建项目时,会在pom.xml文件中引入各种各样的依赖,那么我们如何将自己常用的一些工具类库进行封装成starter或者SDK供其他项目使用呢,本博客就会带着大家一步一步创建自定义的SDK依赖。
2025-07-10 10:17:18
936
原创 Redis缓存穿透、缓存击穿、缓存雪崩的原因及解决方案
客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会访问数据库。导致DB的压力瞬间变大而卡死或者宕机。
2025-07-04 11:53:26
672
原创 @Async注解使用方法及注解失效解决办法
首先在application.yml文件中自定义一些键值对。mytask:execution:pool:然后编写一个集成了AsyncConfig的配置类// 如果没有在启动类上加注解,在异步任务配置类中加也是可以的@Overridetry {});@Override// 自定义异常处理逻辑System.err.println("异步方法执行异常: " + method.getName());这样在启动上述任务,就会打印出修改后的线程名称。
2025-07-02 14:15:05
938
原创 SpringBoot全局异常详解
这次博客的主角就是这个注解,这个一个组合注解由和组成,会帮助我们把信息转成json格式返回。在全局异常处理类只需要在类上标注,并在处理相应异常的方法上使用注解,写明处理哪个异常即可。注:异常的拦截有顺序,子类异常会优先匹配子类异常处理器。
2025-07-01 17:14:09
262
原创 SpringBoot实现自定义拦截器Interceptor
拦截器是一种用于拦截和处理HTTP请求的组件。它可以在请求到达目标Controller之前或之后进行处理,从而实现一些额外的功能。拦截器通常用于实现权限验证、日志记录、事务管理等。创建一个实现HandlerInterceptor接口的类,用于实现自定义拦截器。@Component// 请求处理前执行@OverrideSystem.out.println("PreHandle: 请求路径=" + request.getRequestURI());
2025-07-01 16:17:11
665
原创 SpringBoot过滤器Filte详解
Filter,过滤器,属于Servlet规范,并不是Spring独有的。Filter在web服务器中,位于浏览器与Servlet之间。其作用是拦截一个请求,做一些业务逻辑操作,比如:登录校验、统一编码处理、敏感字符处理等。Filter在web服务器中,位于浏览器与Servlet之间,当请求进入web服务器时进行预处理,然后交Servlet,Servlet处理完成后,将响应传递给Filter进行后处理,之后才到达客户端的浏览器。
2025-07-01 14:51:57
1127
原创 Vue3中父子组件传值
上传前请先按Excel模板中的格式编辑内容</div>下载Excel模板</div></div><el-uploaddragaction="#":limit="1"</el-icon><div class="el-upload__text"><em>点击上传</em>,或将文件拖拽到此处</div>
2025-06-30 17:52:30
1042
原创 Spring Boot 监听器(Listeners)详细教程
Spring Boot 监听器(Listeners)基于 Spring Framework 的事件机制(ApplicationEvent 和 ApplicationListener),用于在应用生命周期或自定义事件触发时执行特定逻辑。它们提供了一种松耦合的方式响应应用状态变化,常用于初始化资源、监控应用状态、执行异步任务等。接口实现: 实现ApplicationListener注解驱动: 使用@EventListener注解方法SmartApplicationListener: 支持事件类型过滤和顺序控
2025-05-20 17:46:54
1352
1
原创 SpringBoot+ELK 搭建日志监控平台
从多个文件中读取 debug.log 和 error.log,并根据文件路径设置不同的类型 (debug 和 error)。
2025-05-19 15:21:49
1402
原创 SpringbBoot nginx代理获取用户真实IP
为了演示多级代理场景,我们分配了以下服务器资源:以下是各级代理的基本配置示例(仅展示关键部分):一级代理(10.0.3.137)配置二级代理(10.0.4.105)配置与一级代理类似,只是转发目标改为三级代理:三级代理(10.0.4.129)配置三级代理直接转发请求到服务器端:服务器端(10.0.4.120)配置服务器端记录客户端的真实IP地址:在以上配置下,当客户端10.1.9.98发起请求时,X-Forwarded-For头信息包含了客户端10.1.9.98、一级代理10.0.3.137和
2025-05-14 17:09:03
439
原创 Spring AOP的注解实现(自定义注解实现日志管理)
AOP: Aspect Oriented Programming(⾯向方⾯编程)。是一种对某一类事情集中处理的思想。Spring AOP: 就是对AOP思想的一种实现。引入依赖:写AOP实现:三、详解Spring AOP3.1 Spring AOP 核心概念Spring AOP 核心概念:切点,连接点,通知,切面。我们以上面的代码来介绍。切点:就是告诉程序哪些方法需要使用到接下来的功能。上面的@Around注解的参数就是切点表达式。连接点:满⾜切点表达式规则的⽅法,就是连接点。也就是可以AOP
2025-05-14 14:01:19
1261
原创 SpringBoot使用定时线程池ScheduledThreadPoolExecutor
定时线程池是一种专门用于执行定时任务的线程池,它结合了线程池的优势和定时任务的功能,能够高效地管理和调度任务。定时线程池是一种特殊的线程池,它不仅可以执行普通任务,还可以安排任务在未来某个时间点执行,或者以固定的速率重复执行。
2025-05-08 18:04:06
459
原创 springBoot使用ThreadPoolTaskExecutor线程池管理
ThreadPoolTaskExecutor是Spring框架提供的线程池管理器,它继承自ThreadPoolExecutor类,并对其进行了一些扩展和封装。1、 AbortPolicy:直接抛出RejectedExecutionException异常,默认策略。2、CallerRunsPolicy:在调用者的线程中执行该任务。3、 DiscardPolicy:丢弃任务,不抛出异常。4、DiscardOldestPolicy:丢弃队列中最旧的任务,然后重新尝试执行新的任务。
2025-05-08 15:46:30
1362
原创 【事务与锁】当Transactional遇上synchronized
只有两个线程都能形成两个相同的code,仔细分析一下,假设synchronized锁是锁住的,那为什么会出现这样的问题呢?这里是因为事务的先后提交导致,可以使用Transactional注解的配置来解决,使用@Transactional(propagation = Propagation.REQUIRES_NEW),每次都会启动一个新的事务,是Spring事务传播机制的一种级别,表示当前方法必须在自己的事务中运行,如果当前已经存在一个事务,则会挂起该事务,创建一个新的事务用于执行当前方法。
2025-05-08 10:17:58
1114
原创 springboot3 配置多数据源
可以将自定义数据源注解添加到方法上(添加到方法只对方法有效)或者类上(添加到类上对当前类里的所有方法有效),然后通过枚举类指定数据源。aop切面会去判断是否有该注解,有的话进行数据源的切换处理(见后面AOP的逻辑)。枚举类 这里指定你所拥有的数据源/*** 数据源/*** 主库* 从库*/ SLAVE }自定义注解,标记哪些方法需要数据源动态切换。/*** 自定义多数据源切换注解* 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准*/
2025-05-07 15:42:22
1011
原创 Spring Boot 中的 Redis 分布式锁
在分布式系统中,多个进程同时访问共享资源时,很容易出现并发问题。为了避免这些问题,我们可以使用分布式锁来保证共享资源的独占性。Redis 是一款非常流行的分布式缓存,它也提供了分布式锁的功能。在 Spring Boot 中,我们可以很容易地使用 Redis 分布式锁来管理并发访问。Redis 分布式锁的概念和原理Redis 分布式锁是一种基于 Redis 的分布式锁解决方案。它的原理是利用 Redis 的原子性操作实现锁的获取和释放,从而保证共享资源的独占性。
2025-05-06 14:04:00
953
原创 SpringBoot集成RabbitMQ使用过期时间+死信队列实现延迟队列
有的时候呢,我们需要使用到延迟队列,RabbitMQ不像RocketMQ一样默认就支持延迟队列,RabbitMQ是不支持延迟队列的,但是呢?我们可以通过正常的队列加上消息的过期时间,配置死信队列,来模拟实现延迟队列。
2025-04-24 14:12:48
297
原创 rabbitmq数据持久化
/创建一个名为TestDirectExchange的Direct类型的交换机@Bean// name: 交换机名称// durable:是否持久化,默认是false,持久化交换机。// autoDelete:是否自动删除,交换机先有队列或者其他交换机绑定的时候,然后当该交换机没有队列或其他交换机绑定的时候,会自动删除。// arguments:交换机设置的参数,比如设置交换机的备用交换机(Alternate Exchange),当消息不能被路由到该交换机绑定的队列上时,会自动路由到备用交换机。
2025-04-24 10:42:57
871
原创 Springboot整合RabbitMQ
首先,我们先了解一下RabbitMQ的含义。RabbitMQ是一个开源的消息中间件,它实现了高级消息队列协议(AMQP)用于进行异步通信。这里简单的介绍一下异步通信:异步通信是一种通信模式,其中发送方和接收方的操作不是同步进行的。在异步通信中,发送方向接收方发送消息,然后继续执行其他操作,而不必等待接收方的响应。接收方在接收到消息后,可以处理消息,并在处理完成后向发送方发送响应。
2025-04-22 17:17:56
652
原创 windows安装RocketMQ
RocketMQ默认的虚拟机内存较大,启动Broker如果因为内存不足失败,需要编辑如下两个配置文件,修改JVM内存大小。
2025-04-17 15:42:46
477
原创 Elasticsearch的Java客户端库QueryBuilders查询方法大全
使用方法:创建一个查询,匹配所有文档。示例:QueryBuilders.matchAllQuery()注意事项:这种查询不加任何条件,会返回索引中的所有文档,可能会影响性能,特别是文档数量很多时。使用方法:对指定字段执行全文搜索查询。示例:QueryBuilders.matchQuery(“fieldName”, “text to search”)注意事项:默认会对文本进行分词处理,然后进行搜索。使用方法:允许你在多个字段上执行匹配查询。
2025-04-17 11:34:12
1445
原创 [ElasticSearch]Suggest查询建议(自动补全&纠错)
搜索一般都会要求具有“搜索推荐”或者叫“搜索补全”的功能,即在用户输入搜索的过程中,进行自动补全或者纠错。以此来提高搜索文档的匹配精准度,进而提升用户的搜索体验,这就是Suggest。
2025-04-16 11:42:59
652
原创 windows 安装 Elasticsearch
Elasticsearch高版本内置jdk,无需使用系统安装的java,无需修改配置文件。
2025-03-19 14:24:58
9130
3
原创 mysql 索引的使用
数据库正在反向扫描索引(从索引末尾向开头扫描),通常用于优化 ORDER BY DESC 或逆序范围查询。在反向扫描索引后,仍需在服务器层对数据进行过滤(索引未完全覆盖查询条件)。含义:使用索引条件下推(Index Condition Pushdown, ICP),在存储引擎层过滤数据。优化建议:为排序字段添加索引,或减少排序数据量(如加 LIMIT)。含义:查询已被优化,无需访问表(如使用聚合函数访问索引的最小值)。匹配的分区(若表已分区)。优化建议:简化查询,或为 GROUP BY 字段添加索引。
2025-03-19 09:57:05
833
原创 Java泛型的全面使用场景详解
通过泛型参数定义类,使其支持多种数据类型。示例:通用容器类// 使用示例// 直接返回String// 自动拆箱为int。
2025-03-17 14:20:50
1354
原创 临时数据容器——匿名内部类(new Object)、HashMap、Record(不可变数据载体)
record 是 Java 16+ 引入的特性,用于快速定义不可变数据载体类。其核心特点:自动生成:字段、构造方法、equals()、hashCode()、toString()不可变性:所有字段默认 final类型安全:字段类型明确,无反射或类型转换风险// 定义一个名为 CarData 的 record// 自定义构造方法,添加验证逻辑if (speed < 0) throw new IllegalArgumentException("车速不能为负");
2025-03-17 10:43:00
824
原创 JDK1.8新特性
作为参数传递 Lambda 表达式:为了将 Lambda 表达式作为参数传递,接 收Lambda 表达式的参数类型必须是与该 Lambda 表达式兼容的函数式接口 的类型。流(Stream) 到底是什么呢?是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,流讲的是计算!注意:①Stream 自己不会存储元素。②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。③Stream 操作是延迟执行的。
2025-03-13 09:31:30
621
原创 Sharding-JDBC分库分表
随着业务的快速发展,数据库中的数据量猛增,访问性能也变慢,优化必不可少。究其原因是关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据容量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引性能仍下降严重。
2024-11-13 11:12:46
1691
原创 Java Stream流
1. 概述Java Stream API 是 Java 8 及以上版本中提供的一种新特性,它支持对集合(Collections)进行声明式的操作。Stream API 可以用于执行复杂的数据转换操作,并支持并行处理。2. Steam操作中间操作(Intermediate operations)中间操作返回的是一个新的 Stream,可以继续进行链式调用。以下是一些常见的中间操作:(1)filterfilter(Predicate<? super T> predicate): 过滤元素
2024-11-07 13:04:05
924
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅