- 博客(64)
- 收藏
- 关注
原创 实现一个线程池管理器
平时我们在开发中,创建了不少线程池,这些线程池都处于游离状态,不方便管理和监控,我们是无法知道目前系统中有哪些线程池、以及每个线程池当前的一个状态,负载情况等,所以我们可以开发一个线程池管理器来解决这个问题。中拷贝过来的,然后添加了一个可以修改容量capacity的方法,如下,然后创建线程池的时候,我们使用自定义的这个阻塞队列便可以实现线程池的动态扩容。,他里面的capacity是final的,不支持修改,为了是队列容量能够支持调整,我们创建了一个可扩容的阻塞队列。包含线程池的创建,查询,扩容。
2025-09-01 16:50:54
364
原创 SpringBoot中,接口加解密
对称加密加密与解密使用同一密钥,效率高但需安全分发密钥。分组密码将明文分割为固定128位(16字节)的块独立处理。密钥长度灵活支持128位、192位、256位三种长度,安全性依次递增(AES-128/192/256)利用RequestBodyAdviceAdapter,继承这个类重写其beforeBodyRead方法,完成请求在进入方法前对参数解密RequestBodyAdviceAdapter 是 Spring Framework 中用于拦截和处理 **
2025-08-17 14:03:40
696
原创 springBoot责任链模式实现数据校验
基于责任链模式改造复杂业务流程将多步骤逻辑按职责拆分为链式调避免大量 if/else 嵌套,逻辑更清晰,维护更加方便。
2025-08-12 09:57:56
223
原创 Redis实现排行榜
使用spring的事件监听机制+Redis Zset 实现次活跃度排行,后续如有需求日度、月度可将key加上时间,设置好过期时间即可,也可使用aop切面对接口地址切入来实现活跃度的增减,做成可配置的形式。zset中可以存储不重复的元素集合,并为每个元素关联一个浮点数分数(score),Redis 会根据这个分数自动对集合中的元素进行排序。是有序集合的名称,100、300、200 是每个用户的积分,user1、user2、user3 是用户的id。
2025-08-11 18:34:00
469
原创 一个注解轻松搞定Redis分布式锁
就像很多底层sdk,都是有接口调用的方法来实现核心功能,然后再加个注解让使用更加简便。我们可以抽出一个DistributeLock工具类,把锁的模板写在方法里,调用的时候只需要指定key,把锁内的代码块用。来想一想场景,我们的分布式锁很多时候都是加在最外层,也就是controller上,或者是service某个方法上。很多时候我们的锁都是针对方法的,要锁同一处地方,调用同一个方法就好了,这样前缀可以直接默认根据。约定大于配置的思想,我们的大多数参数都是可以默认的。,既然是模板,那为何不把他抽出来呢?
2025-08-05 10:10:06
436
原创 Redis分布式锁简单实现
像synchronized、ReentrantLock这些都是Jvm锁,可以确保在单个jvm中,多线程访问共享资源安全性,当多个线程访问共享资源的时候,用 synchronized、ReentrantLock 将共享资源包裹起来,可确保共享资源只能被串行访问。
2025-08-04 18:26:26
274
原创 Spring DeferredResult 实现长轮询
使用了DeferredResult 的方式,设置超时时间,当流程执行完了没有超过指定时间就可以直接返回结果,如果超过了指定时间就给前端先返回超时结果,并且指定一个唯一标志放到结果中返回,前端后续可以拿着这个唯一标志来轮询,知道返回执行完成。在项目开发中,有一个流程性的方法执行,这个方法会调用各种方法,可能会导致时间比较长 ,如果一直等待响应结果的话,可能会造成超时,如果直接使用异步的方式的话,前端无法知道整体流程什么时候会结束,,而是将请求存放在一边,等后面有结果了再把之前的请求拿来,把值响应给。
2025-07-23 18:40:52
543
原创 评论设计开发
目前表中没有添加索引,所以上面这个sql查询比较慢,我们可以添加一个组合索引,4个字段:(doc_id, root_comment_id, create_time)不管是发表一级评论,还是对一级评论进行回复,还是对二级评论进行回复,还是对回复进行回复,可以共用一个接口。3 userC 在线 2025-07-12 10:02:00 userB。根评论id,如果是一级评论,则为0,如果是二级评论,则为一级评论的id。被回复的评论id,如果是一级评论,则为0。
2025-07-14 16:42:30
399
原创 Nginx使用
如果是alias,会把请求url的ip/域名+port+匹配到的路径替换为alias指定的目录,访问资源。如果是root,会把请求url的 ip/域名+port替换为root指定的目录,访问资源。Nginx配置文件(root和alias。
2025-07-03 16:46:33
267
原创 将jar引入到Maven
1.将jar放到项目目录下,比如我放到资源目录的lib目录下。2.添加依赖,指定路径,刷新即可引入jar中的类方法。3.打包时候将jar也打包在服务jar内,编写代码时候,已经可以引入。
2025-06-23 09:08:21
217
原创 OpenFegin使用
OpenFeign就利用SpringMVC的相关注解,基于动态代理帮我们生成远程调用的代码,让远程调用像本地方法调用一样简单。
2025-05-27 09:22:08
596
原创 Transaction rolled back because it has been marked as rollback-only 异常
由于捕获没有抛出异常,代码继续执行,最后当外层方法准备提交事务的时候,发现此时rollback-only已经是true了,所以就会提交失败,抛出Transaction rolled back because it has been marked as rollback-only异常信息。多个事务方法嵌套调用的时候,其中有些事务方法可能把异常信息给try...catch捕获了,没有抛出到最外层方法,而内层事务方法发送异常之后,会将rollback-only设置成true。或者 捕获B方法时候抛出异常。
2025-05-19 14:45:40
281
原创 记录使用lombok的@Data第一个小写,第二个大写,会造成空数据
解决办法:使用@JsonAlias("xCoordinateIndex") 起别名形式。
2025-05-13 18:36:22
156
原创 SpringBoot下载文件的几种方式
小文件:直接将文件一次性读取到内存中,文件大可能会导致OOM。也可以使用ResponseEntity<Resource>通用大小文件:边读边输出。
2025-01-05 11:16:09
608
原创 springBoot使用groovy脚本
Apache Groovy是一种强大的、可选的类型和动态语言,具有静态类型和静态编译功能,用于Java平台,旨在通过简洁、熟悉和易于学习的语法提高开发人员的生产力。它可以与任何Java程序顺利集成,并立即为您的应用程序提供强大的功能,包括脚本功能、领域特定语言创作、运行时和编译时元编程以及函数式编程。
2024-12-29 12:09:44
757
原创 BigDecimal解决精度问题
BigDecimal对象中的值相加,返回BigDecimal对象。BigDecimal对象中的值相减,返回BigDecimal对象。BigDecimal对象中的值相乘,返回BigDecimal对象。BigDecimal对象中的值相除,返回BigDecimal对象。将BigDecimal对象中的值转换成双精度数。将BigDecimal对象中的值转换成单精度数。将BigDecimal对象中的值转换成字符串。将BigDecimal对象中的值转换成整数。比较大小:-1小于;使用BigDeciaml。
2024-12-28 15:33:25
584
原创 使用DelayQueue,手写延时任务工具类
可以看到:存放任务到开始处理延迟时间大约5s,并且我们开启了定时任务定时扫描队列是否是无任务处理,如果没有会关闭队列,再次使用会重新开启。
2024-12-14 16:37:41
441
原创 DelayQueue延时队列
DelayQueue 也是 Java并发包()中的一个特殊队列,用于在指定的延迟时间之后处理元素。我们可以看到它的继承体系,实现了BlockingQueue接口和Delayed接口,说明是线程安全的,在,
2024-12-14 14:26:11
513
原创 使用队列集合完成排队操作
可以看到当第一个请求1过来时候会加到队列,然后直接执行操作,当第4个请求进来时候·,队列已经满了,需要等待队列空位置。1执行完后,可以看到第4个请求入队,现在有3个在队列中。接着2执行,3执行....直到队列是空。后续有进来两个请求排队。
2024-12-08 10:50:35
304
原创 分布式事务Seata
在微服务远程调用的过程中,还存在几个问题需要解决。首先是问题:整个业务中,各个本地事务是有关联的。因此每个微服务的本地事务,也可以称为。多个有关联的分支事务一起就组成了。我们必须保证整个全局事务同时成功或失败。我们知道每一个分支事务就是传统的,都可以满足ACID特性,但全局事务跨越多个服务、多个数据库,是否还能满足呢?可想而知:事务并不会遵循ACID的原则,归其原因就是参与事务的多个子业务在不同的微服务,跨越了不同的数据库。
2024-12-01 15:09:54
832
原创 Nacos部署和使用(服务注册与发现、配置中心)
微服务共享的配置可以统一交给Nacos保存和管理,在Nacos控制台修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。我们可以把微服务共享的配置抽取到Nacos中统一管理,这样就不需要每个微服务都重复配置了。)初始化时处理的,发生在项目的引导阶段。文件尚未读取,根本不知道nacos 地址,该如何去加载nacos中的配置文件呢?在大型微服务项目中,服务提供者的数量会非常多,为了管理这些服务就引入了。中,那么在项目引导阶段就可以读取nacos中的配置了。
2024-11-30 20:25:44
3558
原创 Spring boot 自定义@EnableXXX注解,实现bean的注入
在继承ImportSelector 类中,这个类其主要作用是收集需要导入的配置类,注册到容器,其中 String[] selectImports(AnnotationMetadata var1);方法的返回值就是注册bean的名字;我们在看springboot源码时候会发现许多@EnableXXX的注解,比如:@EnableAutoConfiguration 开启自动配置,@EnableAsync:开启异步等等。我们点开注解会看到,上边大部分都有 @Import注解,这个注解是控制bean的注入。
2024-11-24 11:20:05
598
原创 正则表达式
正则表达式(Regular Expression),通常简称为“正则”或“Regex”,是⼀种⽤于描述字符串模式 的表达式。它是由字符和运算符组成的⽂本模式,⽤于匹配、查找或替换⽂本中的字符序列。主要功能 :匹配⽂本模式;查找和替换;数据提取;表单验证;⽂本处理⼯具。
2024-11-17 10:58:20
1035
原创 一文理解ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal
ThreadLocal:在当前线程中共享数据的,JUC 中提供的InheritableThreadLocal:也是JUC中的一个工具类,解决 ThreadLocal 难以解决的问题TransmittableThreadLocal:阿里开源的一个工具类,解决上面2个ThreadLocal 难以搞定的问题。
2024-11-16 16:37:36
917
原创 父子线程间传值问题以及在子线程或者异步情况下使用RequestContextHolder.getRequestAttributes()的注意事项和解决办法
使用RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(), true);1.拦截器拦截将请求头中信息放到TransmittableThreadLocal中。TransmittableThreadLocal上下文工具类。
2024-11-10 16:48:18
604
原创 springBoot动态加载jar,将类注册到IOC
建立一个公共接口,放在公共模块,以供加载jar时候,可以获取接口方法。然后 cleam-install打成jar。
2024-11-03 17:07:51
496
原创 多线程+CompletableFuture+List分段完美解决更新插入数据太慢
【代码】多线程+CompletableFuture+List分段完美解决更新插入数据太慢。
2024-10-27 17:26:20
459
原创 ES推荐搜索、自动补全,并且springBoot集成
在搜索过程中,因为单词的拼写错误,没有得到任何的结果,希望ES能够给我们一个推荐搜索。ES采取了不同的数据结构来实现,并不是通过倒排索引来实现的;completion;所以在将数据索引进ES之前需要先定义 mapping 信息。自动补全的功能对性能的要求极高,用户每发送输入一个字符就要发送一个请求去查找匹配项。自动补全应该是我们在日常的开发过程中最常见的搜索方式了,如百度搜索和京东商品搜索。2. missing 是当没有要搜索的结果的时候才推荐。1. popular 是推荐词频更高的一些搜索。
2024-10-17 16:22:09
610
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人