自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 定时任务分布式锁SchedulerLock

SchedulerLock 作用:确保任务在同一时刻最多执行一次。如果一个任务正在一个节点上执行,则它将获得一个锁,该锁将阻止从另一个节点(或线程)执行同一任务。如果一个任务已经在一个节点上执行,则在其他节点上的执行不会等待,只需跳过它即可。SchedulerLock 主要通过分布式锁实现,可以使用:数据库锁(基于数据库行锁或唯一约束)Redis 分布式锁(利用 SET NX EX)Zookeeper 分布式锁(基于临时节点)基于 Quartz/ShedLock 的框架实现。

2025-05-08 15:22:45 948

原创 SpringBoot整合PDF导出功能

在实际开发中,我们经常需要将数据导出为PDF格式,以便于打印、分享或存档。SpringBoot提供了多种方式来实现PDF导出功能,下面我们将介绍其中的一些。通过模板引擎(如 Thymeleaf 或 Freemarker)生成 HTML,再转换为 PDF。2.接下来,我们需要把模板文件pdfTemplate.html放到资产文件夹中 src/main/resources/templates3.还需要把对应的字体放到resource中,这样防止中文在pdf中不显示,放在该路径下 src/main

2025-05-08 15:20:00 590

原创 SpringBoot与BookKeeper整合,实现金融级别的日志存储系统

分布式架构: Apache BookKeeper采用分布式的架构设计,能够支持高并发的写入和读取操作。批量写入: 支持批量写入日志条目,显著提高写入效率。异步I/O: 使用异步I/O操作,减少等待时间,提升整体性能。

2025-04-27 09:56:55 266

原创 SpringBoot与Jasypt整合,实现数据库字段自动加密解密功能

使用Jasypt可以显著提升应用程序的数据安全性,简化加密操作,并提供灵活的配置选项。不仅有助于满足各种法规要求,还能提高开发效率和系统的整体稳定性。

2025-04-27 09:52:08 707 1

原创 SpringBoot与Druid整合,实现主从数据库同步

通过引入主从数据库同步系统,可以显著提升平台的性能和稳定性,同时保证数据的一致性和安全性。Druid连接池也提供了强大的监控和安全防护功能,使得整个系统更加健壮和可靠。

2025-04-27 09:46:43 366

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

在当今数字化时代,实时数据处理对于企业的决策和运营至关重要。许多业务场景需要及时响应数据库中的数据变化,例如电商平台实时更新库存、金融系统实时监控交易数据等。本文将详细介绍如何通过Debezium捕获数据库变更事件,并利用将这些变更实时推送给前端应用。

2025-04-27 09:41:27 254

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

官网地址:文档地址:Minio是一款开源的对象存储服务器,它可以运行在多种操作系统上,包括Linux、Windows和MacOS等。它提供了一种简单、可扩展、高可用的对象存储解决方案,支持多种数据格式,包括对象、块和文件等。简单易用: Minio的安装和配置非常简单,只需要下载并运行相应的二进制文件即可。它提供了一个Web UI,可以通过界面管理存储桶和对象。可扩展性: Minio可以轻松地扩展到多个节点,以提供高可用性和容错能力。它支持多种部署模式,包括单节点、主从复制和集群等。

2025-04-09 14:42:21 606

原创 SpringBoot+MCP 让你的 CRUD 系统秒变AI助手

MCP作为AI与服务之间的桥梁,极大简化了集成工作。gRPC通过标准化的通信方式可以实现不同语言开发的服务之间进行通信,那么MCP专门为AI模型设计的"翻译官和接口管理器",让AI能以统一方式与各种应用或数据源交互。想象你有很多不同类型的服务和数据库,每个都有自己独特的"说话方式"。这里是根据用户输入的问题,大模型会判断我们开放的工具方法中是否有匹配的,如果有则进行调用并返回。我们的目的是将一个Spring服务改造成MCP服务,所以这里不需要进行客户端的配置,同理,在引入依赖的时候也不用引入客户端的依赖。

2025-04-09 14:31:04 1170

原创 SnailJob分布式任务调度平台

本文将深入探讨 SnailJob 的架构设计、实现细节、应用场景及其与现有调度系统(如 Quartz 和 XXL-job)的区别,并通过示例展示如何基于 SnailJob 构建灵活的任务调度解决方案。当任务执行失败时,通过多种通知方式(如钉钉、邮箱、企业微信、飞书、Webhook)告知相关人员。相比传统调度系统,它具备更强的可扩展性和更丰富的功能支持,能够满足多种复杂的调度需求。:支持定义复杂的任务依赖关系,保证任务按顺序执行。通过组合多个任务,形成工作流,实现复杂的任务编排。

2024-11-13 14:30:35 1598

原创 Java Http 接口对接太繁琐?试试 UniHttp 框架吧

从企业级项目来说,如果你项目里还在用传统的编程式Http客户端比如HttpClient、Okhttp去直接对接第三方Http接口, 那么你项目一定充斥着大量的对接逻辑和代码,并且针对不同的对接渠道方需要每次封装一次调用的简化,一旦封装不好系统将会变得难以维护,难以阅读,甚至不同的开发同学会用自己的方式用不同的Http客户端用不同的封装逻辑去对接接口,这种情况一般发生于项目换了维护者,技术负责人也没把控代码质量和规范所导致。

2024-11-13 14:24:35 1251

原创 部署Prometheus+Grafana批量监控Linux服务器

在 Linux 服务器上使用 Docker 容器快速部署 Prometheus 和 Grafana 监控系统,同时通过 node_exporter 采集全面的系统性能数据。整个流程涵盖了从环境配置到搭建一个全面监控平台的每个步骤。

2024-09-13 09:53:03 2188

转载 XSS漏洞处理

XSS攻击,全称为跨站脚本攻击(Cross-Site Scripting),是一种常见的网络攻击手段。它主要利用了Web应用程序对用户输入验证的不足,允许攻击者将恶意脚本注入到其他用户浏览的网页中。XSS攻击是指攻击者在Web页面的输入数据中插入恶意脚本,当其他用户浏览该页面时,这些脚本就会在用户的浏览器上执行。由于脚本是在受害用户的上下文中执行的,因此它可以访问该用户的所有会话信息和权限,从而可能导致信息泄露、会话劫持、恶意操作等安全风险。

2024-09-13 09:25:18 1021

原创 提高接口响应

在现代的互联网应用中,用户对响应速度的要求越来越高,一个快速的响应可以大大提升用户体验和满意度。当接口查询耗时过长时,用户可能会面临等待时间过长、页面无响应等问题,这不仅影响了用户的正常使用,还可能导致用户流失。接下来通过异步的方式优化上面的代码。在上面的代码中通过join操作来获取最终执行的结果,它会阻塞当前主线程(Tomcat线程)直到所有任务完成。这样一来,tomcat整体的吞吐量将会明显的提高。上面代码中,如果有任何一个接口发生异常,那么将会导致该业务接口返回异常。接口查询成功,但是总耗时达到了。

2024-06-27 15:24:06 910

原创 Spring Cloud Alibaba AI

Spring AI是从著名的Python项目 LangChain 和 LlamaIndex 中汲取灵感,它不是这些项目的直接移植,它的成立信念是,「下一波生成式人工智能应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在」。我们可以从Spring AI的官网描述中,总结出Spring AI的几个核心的关键词:提供抽象能力简化AI应用的开发模型与向量支持AI集成与自动配置❝Spring AI简化了我们构建「大型复杂的AI应用」

2024-06-27 10:54:35 910

原创 SQL 中除了写 in 和 not in外,其他写法

如果id2只有1和2, 那么3<>1 且 3<>2 所以3输出了,但是 id2包含空值,那么 3也不等于NULL 所以它不会输出。单独查询 select id1 from test2 是一定会报错: 消息 207,级别 16,状态 1,第 11 行 列名 'id1' 无效。十几分钟,检查了一下 phone在两个表都建了索引,字段类型也是一样的。原来 not in 是不能命中索引的。我想要查询,在test2中不存在的 test1中的 id。我想要查询,在test2中存在的 test1中的id。

2024-04-07 10:21:40 950 1

原创 Elasticsearch 分享

Metric(指标):分类并对一组文档进行sum、avg等数学运算Bucketing(桶):桶聚合,常规的分类然后计算每个分类的文档数量Pipeline(管道):对聚合的结果再次聚合Matrix(矩阵):可在多个字段上计算,生成矩阵结果。

2024-03-07 14:50:24 1135

原创 【Git】 取消上一次commit或push

提醒:使用git push --force命令可能会导致远程仓库、其他成员的仓库和历史版本产生不可逆的影响,因此操作时需要谨慎。在命令行中输入该命令后,你需要编辑撤消的提交信息,以便 Git 创建一个新的提交。如果你需要取消上一次的 Git 提交,有几个不同的方法可以实现。无论你使用的是哪种方法,请确保在撤消提交之前首先备份你的工作。这会将工作树恢复到上一次提交的状态,也就是你上一次提交之前的状态。该命令会列出整个Git仓库的提交历史记录,包括HEAD指针所指向的提交和已经被废弃的提交。

2024-01-17 15:30:40 4961

原创 Docker 项目如何使用 Dockerfile 构建镜像

假设我们有一个简单的 Node.js Express 应用,它提供一个基础的 web 服务。app.js:Express 应用的主文件。:定义项目依赖。views/:存放视图文件的目录。public/:存放静态文件的目录。1.1、保持镜像尽可能小:选择合适的基础镜像,例如 Alpine Linux,因为它非常小巧。在构建过程中,只安装必要的包和依赖。1.2、使用多阶段构建:多阶段构建可以帮助减小最终镜像的大小,通过在一个阶段构建应用,然后在另一个阶段只复制必要的文件。1.3、避免安装不必要的软件包。

2024-01-16 17:11:35 1300 1

原创 SpringBoot-Starter 自动锁组件

一个锁需要有的信息有,key,加锁的时间,时间单位,是否尝试加锁,加锁等待时间 等等。(如果还有其他的业务需要,可以添加一个扩展内容,自己去解析处理) 那么这个注解的属性就可以知道有哪些了/*** 锁的基本信息*//*** 锁前缀*//*** 加锁时间*//*** 是否尝试加锁*//*** 等待时间,-1 不等待*//*** 锁时间类型*/重点就在这个切面里面,我们需要在这里完成key的合成,锁的获取与释放。整个过程可以分为以下几步。

2024-01-16 17:07:15 1110

原创 SpringBoot+MyBatis 天猫商城,超级漂亮,接私活必备【附源码】

一个基于SpringBoot的天猫商城项目,快速部署运行,所用技术:MySQL,Druid,Log4j2,Maven,Echarts,Bootstrap ...前台演示后台演示源码地址:https://gitee.com/dont-dance-lightly/tmall_demo.git

2024-01-05 10:26:17 450

原创 项目使用PowerJob

使用简单:提供前端Web界面,允许开发者可视化地完成调度任务的管理(增、删、改、查)、任务运行状态监控和运行日志查看等功能。定时策略完善:支持 CRON 表达式、固定频率、固定延迟和API四种定时调度策略。执行模式丰富:支持单机、广播、Map、MapReduce 四种执行模式,其中 Map/MapReduce 处理器能使开发者寥寥数行代码便获得集群分布式计算的能力。工作流支持。

2024-01-05 10:04:18 1519

原创 SpringCloud微服务架构,适合接私(附源码)

仅允许免费用于学习、毕设、公司项目、私活等。

2024-01-03 16:08:31 1054 1

原创 在SpringBoot中重试调用第三方API

Spring Retry是Spring框架提供的一个模块,它通过提供注解或编程方式的方式,帮助我们实现方法级别的重试机制。在Spring Boot中,可以很方便地集成并使用Spring Retry。在Spring Boot项目中,通过集成Spring Retry模块,我们可以优雅地实现对第三方API调用的重试机制。通过@Retryable注解,我们能够很方便地在方法级别上添加重试策略。同时,异步方法和异常类型的支持使得我们能够更灵活地应对不同的业务场景。

2024-01-02 09:57:34 1338 1

原创 SpringBoot 项目部署方案

分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作;profiles指定不同环境的配置maven-assembly-plugin打发布压缩包分享 shenniu_publish.sh程序启动工具linux上使用 shenniu_publish.sh启动程序。

2024-01-02 09:53:48 1119

原创 SpringBoot 集成支付宝支付

通过AlipayClient执行request调用SDK生成表单,用HttpServletResponse(浏览器响应的一个流)写表单的内容,创建一个html的网页)--------------------------->执行请求,拿到响应的结果,返回给浏览器;创建AlipayTradePagePayRequest,设置Request参数(参数包含支付宝回调的订单流水号、总金额、我的订单编号)(格式:JSON格式)---------------------------->创建Request,设置参数;

2024-01-02 09:48:50 1287

原创 Spring 在多线程环境下如何确保事务一致性

一次事务的完成通常都是默认在当前线程内完成的,又因为一次事务的执行过程中,涉及到对当前数据库连接Connection的操作,因此为了避免将Connection在事务执行过程中来回传递,我们可以将Connextion绑定到当前事务执行线程对应的ThreadLocalMap内部,顺便还可以将一些其他属性也放入其中进行保存,在Spring中,负责保存这些ThreadLocal属性的实现类由。(这里其实就是责任链模式的应用)事务的结束分为两种情况: 需要进行事务回滚或者事务正常提交,如果是事务回滚,还需要判断。

2023-10-09 15:57:07 1024

原创 Java实现添加文字水印、图片水印功能实战

java实现给图片添加水印实现步骤:获取原图片对象信息(本地图片或网络图片)添加水印(设置水印颜色、字体、坐标等)处理输出目标图片。

2023-10-09 15:53:36 2188

原创 项目接口请求合并

请求合并到底有什么意义呢?我们来看下图。假设我们3个用户(用户id分别是1、2、3),现在他们都要查询自己的基本信息,请求到服务器,服务器端请求数据库,发出3次请求。我们都知道数据库连接资源是相当宝贵的,那么我们怎么尽可能节省连接资源呢?这里把数据库换成被调用的远程服务,也是同样的道理。我们改变下思路,如下图所示。我们在服务器端把请求合并,只发出一条SQL查询数据库,数据库返回后,服务器端处理返回数据,根据一个唯一请求ID,把数据分组,返回给对应用户。

2023-10-09 15:50:35 392

原创 忽视日志吃大亏,玩转 SpringBoot 日志

学习完本文,你应当对现在这几个常用框架的有所了解,并能基础应用了。此次我们没有讲源码,也没有深入的讲其配置及进阶使用,这些我们会在后面慢慢学习,可前往[日志专栏][Link2]查看。但现在我希望你能知道的是。一定要写好日志,一定要写好日志,一定要写好日志。重要的事情说三遍!这是区别新人和老鸟的一个重要依据,也是让自己排查问题更轻松的不二法门!另外,现在很多中间件都自己引用了日志插件,我们作为一个整体工程在使用中间件时,要及时发现并解决插件冲突,避免我们自己的日志配置失效,这也是一个程序员该注意的点。

2023-10-09 15:45:18 217

原创 SpringBoot+Redis BitMap 实现签到与统计功能

采用BitMap实现签到功能实现签到接口,将当前用户当天签到信息保存到Redis中我们可以把年和月 作为BitMap的key,然后保存到一个BitMap中,每次签到就到对应的位上把数字从0 变为1,只要是1,就代表是这一天签到了,反之咋没有签到。实现签到接口,将当前用户当天签到信息保存至Redis中说明请求方式POST请求路径/user/sign请求参数无返回值无因为BitMap 底层是基于String数据结构,因此其操作都封装在字符串操作中了。

2023-10-09 15:39:05 394

原创 Post为什么会发送两次请求?

同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。如果两个 URL 的协议、主机和端口都相同,我们就称这两个 URL 同源。协议:协议是定义了数据如何在计算机内和之间进行交换的规则的系统,例如 HTTP、HTTPS。主机:是已连接到一个计算机网络的一台电子计算机或其他设备。网络主机可以向网络上的用户或其他节点提供信息资源、服务和应用。使用 TCP/IP 协议族参与网络的计算机也可称为 IP 主机。端口。

2023-10-09 15:34:37 179

原创 SpringBoot 调用外部接口的三种方式

SpringBoot不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如在apaas开发过程中需要封装接口在接口中调用apaas提供的接口(像发起流程接口submit等等)下面也是提供了三种方式(不使用**dubbo**的方式)供我们选择。

2023-10-09 15:32:37 939

原创 MyBatis-Plus 内置雪花算法主键重复问题

这个时候我们先看一下我们设置参数有没有生效,为了比较明显看到效果,我们直接设置worker-id为一个固定值20,再断点看一下,我们找到com.baomidou.mybatisplus.core.toolkit.IdWorker这个核心类,获取id的核心方法是com.baomidou.mybatisplus.core.toolkit.IdWorker#getId,那我们就在这里加一个断点看下。先检查了一下服务器时间,都是一样的,然后再看一下workId的生成,我们先看一下源码。那我们就修改配置一下。

2023-10-09 15:30:09 1340

原创 ELK 处理 SpringCloud 日志

举个例子,一个 Indexer 在持续读取 Redis 中的记录,现在想加入第二个 Indexer,如果使用 list ,就会出现上一条记录被第一个 Indexer 取走,而下一条记录被第二个 Indexer 取走的情况,两个 Indexer 之间产生了竞争,导致任何一方都没有读到完整的日志。我的Nginx 与 Spring Boot 项目部署在同一台机器上,所以还需修改 Shipper 类型的 Logstash 的配置以支持两种类型的日志输入和输出,其配置文件的内容可 点击这里获取。

2023-10-09 15:27:02 697

原创 SSO单点登录和OAuth2.0区别

SSO是Single Sign On的缩写,OAuth是Open Authority的缩写,这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似,但概念上又十分不同。SSO大家应该比较熟悉,它将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。OAuth2.0原理可能比较陌生,但平时用的却很多,比如访问某网站想留言又不想注册时使用了微信授权。

2023-10-09 15:23:11 197

原创 45 个 Git 经典操作场景

如果你需要删除推了的提交(),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。这只能在没有推送之前有用. 如果你已经推了, 唯一安全能做的是, 那会创建一个新的提交(commit)用于撤消前一个提交的所有变化(changes);或者, 如果你推的这个分支是rebase-safe的 (例如:其它开发者不会从这个分支拉), 只需要使用。

2023-10-09 15:19:10 331

原创 网关 GateWay 的使用详解、路由、过滤器、跨域配置

有时候SpringCloudGateWay提供的过滤器工厂不能满足自己的要求。可能有时候需要在过滤时做一些其它的逻辑操作。那么这时候可以选择使用java代码自定义全局过滤器。@Component@Override// 1.获取请求参数//1.这里的request并不是servlet中的request//2.返回值是一个多键的map集合、也就是说这个map集合的键可以重复// 2.获取userName参数// 3.校验// 放行// 4.拦截// 4.1.禁止访问,设置状态码。

2023-09-19 10:25:51 2307

原创 WebSocket 的 6 种集成方式

实现一个库【Spring Cloud】一个配置注解实现 WebSocket 集群方案3种方式(Javax,WebMVC,WebFlux)在Spring Boot中的服务端和客户端配置。

2023-09-19 10:21:57 576

原创 注解实现接口幂等性

简单来说,就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的,听起来非常容易理解,但要真正的在系统中要始终保持这个目标,是需要很严谨的设计的,在实际的生产环境下,我们应该保证任何接口都是幂等的,而如何正确的实现幂等,就是本文要讨论的内容。/*** 参数名,表示将从哪个参数中获取属性值。* 获取到的属性值将作为KEY。* @return*//*** 属性,表示将获取哪个属性的值。* @return*//*** 参数类型* @return*/

2023-09-19 10:17:57 172

原创 MyBatis-Plus 使用拦截器实现数据权限控制

例如我们名称简单的sql语句 直接在Service层用mybatisPluse自带的方法。

2023-09-19 10:14:01 964

空空如也

空空如也

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

TA关注的人

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