自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

原创 优雅使用 Enum 提升 SpringBoot 配置管理效率

ADMIN("管理员"),USER("普通用户"),GUEST("游客"),VIP("VIP用户"),MODERATOR("版主");

2025-01-19 19:15:35 353

原创 SpringBoot一键提取身份证与营业执照信息

点击上方“程序员蜗牛g”,选择“设为星标”跟蜗牛哥一起,每天进步一点点为了提高识别的准确性,首先对图片进行预处理,如调整大小、对比度、亮度等。使用图像处理算法或框架来定位图像中的文字区域。将检测到的文字区域输入到OCR(,光学字符识别)引擎进行文字识别。根据识别出的文字内容,使用正则表达式等方法提取身份证号、营业执照等信息。

2025-01-09 21:12:09 483

原创 SpringBoot前后端加密技巧全攻略!

*** @Description : 响应数据加密开启注解*/

2024-12-23 20:35:56 1054

原创 告别空指针,Optional的最佳使用姿势!

很久以前 Google Guava 项目引入了Optional作为解决空指针异常的一种方式,不赞成写过多的代码来显式检查null,以期望程序员写出整洁同时可读性更高的代码。这还是最普通的三层判断,假如有很大一段业务逻辑处理的时候,你会发现代码不光看起来很臃肿,并且难以阅读,可读性很差!如果调整为使用Optional来编写的话,可以转换成如下写法:采用Optional来编程之后,整个代码的可读性和整洁度,是不是要干净很多!这也是为什么推荐大家使用Optional的原因啦!

2024-12-19 20:41:15 694

原创 一个注解完美实现分布式锁

对于耗时业务和核心数据,不能让重复的请求同时操作数据,避免数据的不正确,所以要使用分布式锁来对它们进行保护。再来梳理一下设计流程:新建注解@interface,在注解里设定入参标志增加 AOP 切点,扫描特定注解建立@Aspect切面任务,注册 bean 和拦截特定方法特定方法参数,对方法前后进行拦截切点前进行加锁,任务执行后进行删除 key本次学习是通过 Review 小伙伴的代码设计,从中了解分布式锁的具体实现,仿照他的设计,重新写了一份简化版的业务处理。

2024-12-18 21:54:42 979

原创 实现一套完整的业务流程?SpringBoot 集成 Camunda 流程引擎就够了

项目中需要用到工作流引擎来设计部分业务流程,框架选型最终选择了 Camunda7,关于 Camunda以及 Activity 等其他工作流引擎的介绍及对比不再介绍,这里只介绍与现有Springboot项目的集成以及具体使用及配置。官方文档下面是官网的一些文档,有时间可以看看,下面说一些核心的东西。

2024-12-17 22:09:24 1231

原创 谈一谈三方接口调用方案设计,非常优雅!

Token是什么?token即 访问令牌access token,用于接口中标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个appSecret(appSecret用于参数签名使用)注意appSecret保存到客户端,需要做一些安全处理,防止泄露。

2024-12-15 21:59:06 776

原创 SpringCloud 微服务如何实现优雅下线?

我们也可以自定义端点来实现一些自定义逻辑,自定义端点通过标记,接着可以使用或者标记方法,通过get/post请求访问/actuator/myshutdown。接着可以使用通知注册中心下线,然后等一段时间(缓存过期后)后再通过shutdown或者kill关闭服务。如下,自定义端点的缺点是绑定了,如果有一天注册中心换了这里就不能用了,而使用actuator提供的端点,一般注册中心都会实现spring cloud的标准,所以可以屏蔽具体的实现。@Autowired。

2024-12-07 09:31:09 582

原创 打造灵活高效的业务逻辑流,玩转 Spring 状态机!

是由Spring团队提供的一个轻量级状态机框架。它为开发者提供了一种简便且强大的方式来管理复杂的状态流转逻辑,尤其适用于订单处理、工作流引擎等需要状态管理的场景。通过Java配置或外部配置文件定义状态和状态转换。可以管理复杂的状态图。易于与Spring Boot、Spring Security等集成。接下来,我们定义订单状态和事件。在Spring Boot中使用,可以帮助我们高效地管理订单等业务流程中的状态流转逻辑。通过简单的配置和灵活的状态转换定义,我们可以实现复杂的状态控制。

2024-11-27 23:26:19 703

原创 让数据传输更优雅:SpringBoot前后端加密技巧全攻略

*** @Description : 响应数据加密开启注解*/

2024-11-25 23:33:58 689

原创 一个注解,优雅的实现接口幂等性!

当发起一次RPC请求时,难免会因为网络不稳定而导致请求失败,一般遇到这样的问题我们希望能够重新请求一次,正常情况下没有问题,但有时请求实际上已经发出去了,只是在请求响应时网络异常或者超时,此时,请求方如果再重新发起一次请求,那被请求方就需要保证幂等了。比如,先请求了一次删除A的操作,但由于响应超时,又自动请求了一次删除A的操作,如果在两次请求之间,又插入了一次A,而实际上新插入的这一次A,是不应该被删除的,这就是ABA问题,不过,在大多数业务场景中,ABA问题都是可以忽略的。最后说一句(求关注!

2024-11-19 22:14:17 886

原创 多租户项目后端代码重构,你掌握了优化技巧了吗?

分享一次代码优化的案例,一个多租户项目,基于数据库字段进行租户隔离,多租户之间用的同一个后端服务,使用MVC架构,在经过数次迭代之后,逐渐发现该项目已存在严重问题:租户之间业务代码耦合度太高。虽然租户之间大多业务场景类似,但也有不同,用if-else判断租户进行不同的业务逻辑处理。增加测试成本,某一租户的业务逻辑需要修改,同时使用到这一段代码的所有租户都需要进行测试。service臃肿,一个service 1000多行代码,包含了所有租户的业务逻辑,不利于后续维护和扩展。

2024-11-17 21:19:03 356

原创 Spring Boot + Nacos 实现了一个动态化线程池,非常实用!

Spring Boot + Nacos 实现了一个动态化线程池,非常实用!

2024-11-10 09:37:49 756

原创 Git提交错了,看我如何巧妙把锅甩给了新来的baby

又是一遭悲惨的遭遇,git提交了一连串代码之后,发现提交错了。其实是把给老婆发的消息打到了comment里,然后还提交上去了。怎么办,这被看到岂不是要社死了。一连串的研究之后,找到了几个解决方案。接下来我们一起搞搞这种错误提交的弥补方案。其中最离谱的是第三个方案。哈哈。

2024-11-06 22:16:54 813

原创 SpringBoot 打造图片阅后即焚功能

本文仅以Demo展示的方式介绍了如何使用Spring Boot和MySQL实现图片阅后即焚功能。通过分析需求、设计系统架构、实现功能、进行优化和测试,最终构建出一个安全、易用的图片分享平台。最后说一句(求关注!别白嫖!woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

2024-11-05 21:50:28 1055

原创 详解Java操作PDF:一键生成文件,插入文字、选项、签名及公章

在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!我这里使用福昕pdf编辑器,其他pdf编辑器(如Adobe Acrobat)也可以用但是大多要钱。注意:外观这里的边框和填充都选无色,否则图片会被填充色盖住;导出值不要忘记填写,与代码对应上。注意:选项这里我们选择只显示标签。最后说一句(求关注!右键文字域,填入字段与属性。

2024-10-31 22:09:43 300

原创 一行代码,实现请假审批流程(Java版)

img。

2024-10-28 21:56:09 1349

原创 SpringBoot 多租户架构,轻松驾驭复杂业务场景!

多租户架构是指在一个应用中支持多个租户(Tenant)同时访问,每个租户拥有独立的资源和数据,并且彼此之间完全隔离。通俗来说,多租户就是把一个应用按照客户的需求“分割”成多个独立的实例,每个实例互不干扰。

2024-10-27 13:27:49 867

原创 泛型 + 函数式编程,让你的代码看着高级多了!

泛型和函数式编程只是 Java 中的语法糖,它算不上编程的内功心法,只是一种展现形式而已。我们更多应该关注的是如何对一系列具体的场景进行抽象,然后再通过工具去实现它们。就像如何去定义一个泛型,如何去抽象一个函数一样。最后说一句(求关注!别白嫖!woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

2024-10-21 21:15:20 1003

原创 公司新来一个同事,把枚举运用得炉火纯青...

returntrue;本文我们讨论了Java枚举类型,从基础知识到高级应用以及实际应用场景,让我们感受到枚举的强大功能。

2024-10-16 21:30:43 1015

原创 从3s到25ms!看看人家的接口优化技巧!

批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次 IO。

2024-10-13 10:16:10 842

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

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

2024-10-11 22:31:46 924

原创 业务开发时,API 不能对外暴露怎么办?

在业务开发的时候,经常会遇到某一个接口不能对外暴露,只能内网服务间调用的实际需求。面对这样的情况,我们该如何实现呢?今天,我们就来理一理这个问题,从几个可行的方案中,挑选一个来实现。

2024-10-08 21:34:15 637

原创 不想被恶意访问?SpringBoot 的 IP 白名单限制了解一下!

创建表实现IP查询对比接口自定义拦截器获取请求IP对比IP是否在白名单中请求返回在自定义过滤中,重写preHandle方法,在preHandle/*** @Description 白名单 处理器拦截器**/@Resource@Overrideif (!

2024-10-06 09:58:08 1076

原创 SpringBoot + ITextPdf:高效生成 PDF 预览文件

SpringBoot + ITextPdf:高效生成 PDF 预览文件

2024-10-01 09:41:21 739

原创 代码写得是真优雅呀!

工作多年后,越发觉得代码整洁真的是太重要了!尤其是在团队开发中,写出优雅工整的代码,能让同事更乐于跟你合作。下面,将通过命名、类、函数、测试这四个章节,使我们的代码变得整洁。

2024-09-28 09:22:10 680

原创 MapStruct 超神进阶用法,让你的代码效率提升十倍!

MapStruct 超神进阶用法,让你的代码效率提升十倍!

2024-09-24 21:24:29 458

原创 SpringBoot 整合 apache fileupload 轻松实现文件上传与下载(通用版)

SpringBoot 整合 apache fileupload 轻松实现文件上传与下载(通用版)

2024-09-23 21:43:41 394

原创 1024个线程居然不够用?RPC 线程池被打满!

公司的监控系统分服务端监控和调用端监控,服务端的耗时监控不包含 处理连接的时间,不包含 RPC线程池排队的时间。代码非常复杂,分支非常多,嵌套层次非常深,方法又臭又长,堪称代码屎山的珠穆朗玛峰,多看一眼就能吐。他们认为之所以平均耗时这么高,是因为RPC 请求在排队,增加了处理耗时,所以监控平均耗时大幅增长。按照我的经验来看,只要接口的耗时在 100ms 以内,不可能需要如此多的线程,太蹊跷了。前面提到,故障接口是一个聚合接口,我不清楚具体哪个分支出现了问题,但是异常 Trace 中指明了具体的分支。

2024-09-21 09:43:00 861

原创 使用回调机制Callback和函数式编程码出优雅结构化代码!拒绝一直写CRUD!!!

使用回调机制Callback和函数式编程码出优雅结构化代码!拒绝一直写CRUD!!!

2024-09-18 20:31:44 477

原创 那些依赖于`!=null`的日子已经结束了

那些依赖于`!=null`的日子已经结束了

2024-09-09 20:22:19 553

原创 我司使用了两年的高效日志打印工具,非常牛逼!

使用时,要求输入userId属性的路径。例如UserOrder中包含userId和orderId属性,则像如下方式声明。log.warn("订单履约完成");@Data声明注解的Aop切面,在方法执行前,将UserId从入参中取出来,放到MDC中。全部代码如下@Aspect@Component//无参方法不处理//获取注解//使用工具类获取userId。// 放到MDC中try {throw e;//清理MDC。

2024-09-07 12:16:53 363

原创 将泛型和函数式编程结合,竟然会让代码这么优雅!

将泛型和函数式编程结合,竟然会让代码这么优雅!

2024-09-03 21:34:35 898

原创 如何优雅的使用Optional类?

如何优雅的使用Optional类?

2024-09-02 21:15:06 496

原创 使用 RestTemplate 发送http请求的正确姿势原来是这样的!

使用 RestTemplate 发送http请求的正确姿势原来是这样的!

2024-09-01 22:11:59 324

原创 发现 XSS 漏洞?别急,用这招 SpringBoot 技巧轻松搞定!

本文深入探讨了在Spring Boot应用程序中如何有效地防御XSS攻击。我们介绍了两种主要的防御手段:使用注解和使用过滤器。通过这两种方式,开发者可以轻松地在Spring Boot应用中实现XSS攻击的防御,从而保障用户的数据安全和应用的稳定运行,希望对大家有所帮助。最后说一句(求关注!别白嫖!woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!

2024-08-31 16:24:16 1399

原创 我用这5种策略消灭if else!

1 策略模式支付方式有:微信,支付宝,银联等。定义策略接口 public interface PaymentStrategy {voidpay(doubleamount) ;}实现不同支付方式 // 微信支付@Componentpublic class WeiXinPayment implements PaymentStrategy { @Overridepu

2024-08-29 23:19:08 231

原创 记一次事务里发普通消息的线上问题排查过程

对于有经验的工程师来说,可能一眼就知道了问题在哪里,比如我们架构的同事们,但是对于没经验,或者没有考虑到这个点上的工程师来说,可能就比较难发现原因,属于典型但不复杂的场景。大家可以想一想,这个问题中,哪些环节有问题,可能带来当前的数据不一致结果。数据不一致,有两个大方向的原因:a.数据冗余导致;b. 并发控制不好导致。这个问题,这两个都有一定的关联,对于cost字段,系统A里已经有一份原始数据,是否有必要在系统B的业务订单表中再存一份,值得思考。对于并发控制,系统B消费系统A同topic,不同。

2024-08-28 22:21:23 747

原创 300万数据如何快速实现导出?

300万数据如何快速实现导出?

2024-08-26 21:19:58 1108

原创 一个注解轻松搞定审计日志服务!

,简单的说就是系统需要记录谁,在什么时间,对什么数据,做了什么样的更改!,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!整个程序的实现过程,主要使用了 Spring AOP 特性,对特定方法进行前、后拦截,从而实现业务方的需求。】这个需求,我们有一个很好的技术解决方案,就是使用 Spring 的切面编程。最后,只需要在对应的接口或者方法上添加审计日志注解即可。

2024-08-21 21:56:16 254 1

空空如也

空空如也

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

TA关注的人

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