自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(166)
  • 收藏
  • 关注

原创 这个maven插件贼好用,SpringBoot无缝集成

这个maven插件贼好用,SpringBoot无缝集成

2024-07-22 21:26:09 143

原创 认证流程分析及多方式登录认证实践

认证流程分析及多方式登录认证实践

2024-07-21 22:16:12 444

原创 Git 你只会 pull 和 push?这 5 条命令可以提高效率的!

Git 你只会 pull 和 push?这 5 条命令可以提高效率的!

2024-07-17 22:05:32 658 1

原创 高性能必杀技:Java中的池化技术

作为一名Java开发人员,池化技术或多或少在业务代码中使用。常见的包括线程池、连接池等。也是因为Java语言超级丰富的基建,基本上这些池化能力都有着相对成熟的“工具”。比如,需要使用线程池的时候常常会选择Spring提供的,工具内部替我们维护了线程的生命周期与任务的状态变化。

2024-07-15 20:57:47 319

原创 教你java中如何判断代码中异步操作是否完成

教你java中如何判断代码中异步操作是否完成

2024-07-14 08:25:27 235

原创 定时任务+分布式环境,这些坑你一定得注意!!!

定时任务+分布式环境,这些坑你一定得注意!!!

2024-07-13 08:43:16 577

原创 BeanUtils.copyProperties到底坑了多少人?

今儿我们就来梳理一下BeanUtils.copyProperties的坑点!!

2024-07-10 22:03:53 349

原创 实时消息推送系统,写得太好了!

websocket 协议是在 http 协议上的一种补充协议,是 html5 的新特性,是一种持久化的协议。其实 websocket 和 http 关系并不是很大,不过都是属于应用层的协议。关于更多概念大家可以参考下面文章讲述的很详细,接下来我们就开始实战。

2024-07-09 20:06:59 552

原创 接口不能对外暴露怎么办?

在业务开发的时候,经常会遇到某一个接口不能对外暴露,只能内网服务间调用的实际需求。面对这样的情况,我们该如何实现呢?将对外暴露的接口和对内暴露的接口分别放到两个微服务上,一个服务里所有的接口均对外暴露,另一个服务的接口只能内网服务间调用。该方案需要额外编写一个只对内部暴露接口的微服务,将所有只能对内暴露的业务接口聚合到这个微服务里,通过这个聚合的微服务,分别去各个业务侧获取资源。该方案,新增一个微服务做请求转发,增加了系统的复杂性,增大了调用耗时以及后期的维护成本。

2024-07-08 22:08:59 848

原创 Stream流真的很好,但答应我别用toMap()

Stream流真的很好,但答应我别用toMap()

2024-07-07 10:52:13 400

原创 Spring Boot + liteflow 居然这么好用!实战

在我们的日常开发中,经常会遇到一些需要串行或并行处理的复杂业务流程。那我们该如何利用结合liteflow规则引擎来简化我们的业务流程先看一个实战案例!!在电商场景下,当订单完成后,我们需要同时进行积分发放和消息发送。这时候,我们可以利用liteflow进行规则编排,处理这些并行任务。

2024-07-06 09:37:39 394

原创 SpringBoot 整合 Minio 实现文件切片极速上传技术

SpringBoot 整合 Minio 实现文件切片极速上传技术

2024-07-03 22:13:05 975

原创 想要打造超高性能的接口API?试试这12条小技巧。

提供了一种优雅而强大的方式来处理并发请求和任务。然而,正如在处理高并发时使用过多的线程会导致资源浪费和效率下降一样,使用过多的也会导致同样的问题。这种现象被称为 "线程调度问题",它会导致性能下降和吞吐量下降(P99 值较高)。因此,我们需要在使用时考虑实际场景和负载情况,并根据需要使用恰当的技术来优化性能。

2024-07-02 21:50:19 942

原创 如何优雅的将设计模式运用到实际项目中去?

*** 支付*/@OverrideSystem.out.println("支付宝支付...");@OverrideSystem.out.println("微信支付...");@OverrideSystem.out.println("银联支付...");/*** 支付策略枚举*/@Getter设计模式(Design pattern) 代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。

2024-07-01 19:54:29 652

原创 SpringBoot 实现热插拔 AOP解决日志开关需求!!

包括 “around”, “before” and “after 等 Advice,大体上分为了三类:BeforeAdvice、MethodInterceptor、AfterAdvice。“通知者”,它持有 Advice,是 Spring AOP 的一个基础接口。本文实现热插拔AOP就在于对advice、advised、advisor、pointcut概念的理解,这是实现热插拔AOP的前提。,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

2024-06-30 17:16:37 360

原创 多级校验、工作流,这样写代码才足够优雅!

表示处理器抽象类,负责抽象处理器行为。其有3个子类,分别是:NullValueCheckHandler:空值校验处理器PriceCheckHandler:价格校验处理StockCheckHandler:库存校验处理器AbstractCheckHandler 抽象类中,

2024-06-26 19:38:14 688

原创 巧用 MyBatis Plus 实现数据权限控制

21

2024-06-25 21:48:36 429

原创 写了一个责任链模式,bug 无数...

既然每个关卡中都有下一关的成员变量并且是不一样的,那么我们可以在关卡上抽象出一个父类或者接口,然后每个具体的关卡去继承或者实现。如何解决这个问题,我们可以通过链表将每一关连接起来,形成责任链的方式,第一关通过后是第二关,第二关通过后是第三关....这种代码不仅冗余,并且当我们要将某两关进行调整时会对代码非常大的改动,这种操作的风险是很高的,因此,该写法非常糟糕。设计模式确实是一门艺术,仍需努力呀!实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。

2024-06-24 20:42:57 363

原创 SpringBoot + 虚拟线程,鸟枪换大炮!

SpringBoot + 虚拟线程,鸟枪换大炮!

2024-06-23 11:51:24 557

原创 微服务改造启动多个 SpringBoot 的陷阱与解决方案

在系统运行了一段时间后,业务量上升后,生产上发现java应用内存占用过高,服务器总共64G,发现每个SpringBoot占用近12G的内存,我们项目采用微服务架构,有多个springboot应用。一下子内存就不够用了,springboot出现假死了。可以看到内存基本被使用完了,为什么Java程序会占用这么大内存呢?

2024-06-22 11:10:11 656

原创 别再手动拼接 SQL 了,MyBatis 动态 SQL 写法应有尽有,建议收藏!

别再手动拼接 SQL 了,MyBatis 动态 SQL 写法应有尽有,建议收藏!

2024-06-20 20:24:54 739

原创 三次输错密码后,系统是怎么做到不让我继续尝试的?

三次输错密码后,系统是怎么做到不让我继续尝试的?

2024-06-19 21:50:36 847

原创 封装一个工具类,拒绝重复代码!

为了简化开发过程并提高代码的可维护性,我们可以创建一个统一的工具类来处理这些需求。在本文中,我将介绍如何使用SpringBoot创建一个返回多级菜单、多级评论、多级部门、多级分类的统一工具类。数据库设计「主要是介绍是否需要tree_path字段。多级节点的数据库大家都知道,一般会有id,parentId字段,但是对于tree_path字段,这个需要根据设计者来定。优点:如果你对数据的读取操作比较频繁,而且需要快速查询某个节点的所有子节点或父节点,那么使用tree_path字段可以提高查询效率。

2024-06-18 20:50:23 292

原创 再也不怕离职同事泄露配置文件的密码了

用法其实很简单,不得不说这个工具很实用。最后说一句(求关注!别白嫖!woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

2024-06-17 20:33:43 229

原创 用Stream代码丑爆了?那是姿势不对,别瞎喷

stream和parallelStream的简单区分:stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。

2024-06-16 22:13:04 773

原创 如何实现一个合格的分布式锁?

如何实现一个合格的分布式锁?

2024-06-15 09:09:42 980

原创 Spring Boot结合Netty,WebSocket消息推送轻松搞定

Component/*** 一旦连接,第一个被执行*/@Overridelog.info("有新的客户端链接:[{}]", ctx.channel().id().asLongText());// 添加到channelGroup 通道组/*** 读取数据*/@Overridelog.info("服务器收到消息:{}", msg.text());// 获取用户ID,关联channel// 将用户ID作为自定义属性加入到channel中,方便随时channel中获取用户ID。

2024-06-13 22:10:31 213

原创 争议不断:金额到底是用Long还是BigDecimal?

先问个问题,在开发过程中你是选择用Long还是BigDecimal来处理金额?

2024-06-12 19:50:55 303

原创 Redis项目中竟然有这么多种使用场景!!

Redis项目中竟然有这么多种使用场景!!

2024-06-11 21:28:50 945

原创 快速测试 Mybatis 复杂SQL,无需启动 Spring

快速测试 Mybatis 复杂SQL,无需启动 Spring

2024-06-10 08:11:32 322

原创 40个小细节,轻松告别“辣鸡“代码,性能起飞~

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。

2024-06-09 10:31:33 693

原创 一万八千条线程,线程为啥释放不了?

其实这个算比较低级的错误,很简单的并发问题,但是一不注意就容易写出来。但是排查难度挺高的,因为大量的线程都是没有我们一点业务代码堆栈,根本不知道线程是从哪里创建出来的,和以往的排查方法算是完全不同。这次是属于运气爆棚然后找到的代码,排查完问题我也想过,有没有其他的方法来定位这么多相同的线程是从哪里创建出来的呢?我试着用内存快照去定位,确实有一点线索,但是这属于是马后炮了,是我先读过源码才知道内存快照可以定位到问题,有点从结果来推过程的意思,没啥好说的。

2024-06-08 10:09:24 794

原创 使用 MDC 实现日志链路跟踪,包教包会!

使用 MDC 实现日志链路跟踪,包教包会!

2024-06-05 22:26:38 1172

原创 在多支付渠道中这个设计模式无敌好用!

PS:我们通过定义支付策略接口及其实现类、创建支付上下文类、订单类以及订单服务类,实现了对不同支付方式的灵活管理和调用。,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!除了基本的支付逻辑,还展示了如何通过Spring框架自动加载和管理支付策略,进一步增强了灵活性和可扩展性。通过策略模式来实现,管理不同的支付方式,并根据需求快速添加新的支付方式。最后说一句(求关注!

2024-06-04 22:51:22 262

原创 Spring Boot API 编写的十个最佳实践,你知道几个?

这些最佳实践其实很简单,但很多人平时并不太注意。最后说一句(求关注!别白嫖!woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

2024-06-03 22:16:16 888

原创 Spring 定时任务与 XXL-JOB 灵活切换方案

在使用XXL—JOB的实现定时任务过程中,有时候可能由于部署环境的要求,就只能用Spring自带的实现方式。所以为了通用性和灵活性,突发奇想地看看能不能实现在不修改原本Spring定时任务代码的前提下,通过配置灵活控制定时任务具体的实现,同时任务的日志的管理也要同步进行切换。

2024-06-02 22:11:36 664

原创 SpringBoot + 虚拟线程,性能炸裂!

虚拟线程是Java19开始增加的一个特性,和Golang的携程类似,一个其它语言早就提供的、且如此实用且好用的功能,作为一个Java开发者,早就已经望眼欲穿了。从上面的性能对比来看,虚拟线程在性能方面有明显的优势,但是要注意的是,我们上面的测试都是让线程等待了50ms,这是模拟什么场景?没错,是IO密集型场景,即线程大部分时间是在等待IO,这样虚拟线程才可以发挥出它的优势,如果是CPU密集型场景,那么可能效果并不大。

2024-05-30 23:37:36 915

原创 请求合并的3种技巧,性能起飞!

工作中,我们常见的请求模型都是”请求-应答”式,即一次请求中,服务给请求分配一个独立的线程,一块独立的内存空间,所有的操作都是独立的,包括资源和系统运算。我们也知道,在请求中处理一次系统 I/O 的消耗是非常大的,如果有非常多的请求都进行同一类 I/O 操作,那么是否可以将这些 I/O 操作都合并到一起,进行一次 I/O 操作,是否可以大大降低下游资源服务器的负担呢?最近我工作之余的大部分时间都花在这个问题的探究上了,对比了几个现有类库,为了解决一个小问题把。

2024-05-29 22:08:31 570

原创 SpringBoot配置文件密码加密与解密

SpringBoot配置文件密码加密与解密

2024-05-28 21:53:39 816

原创 自定义参数解析器真的很强大!减少10%的代码!

自定义参数解析器真的很强大!减少10%的代码!

2024-05-27 22:14:43 456

空空如也

空空如也

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

TA关注的人

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