- 博客(55)
- 收藏
- 关注
原创 若依微服务集成Flowable仿钉钉工作流
流程设计器• 节点新增、删除、修改 :用户可以随时对审批节点进行调整,以适应新的业务需求。• 流程保存和发布 :设计完成后,用户可以将流程保存并发布,使其生效。审批人配置审批人节点的配置非常灵活,目前支持选择指定人员、角色、部门、发起人自选等等。这种设计使得审批流程的管理更加高效且有针对性。集成能力此项目可轻松基础到现有项目中,因为工作流本身就可以作为一个单独的应用部署,集成的话只需要将项目的RBAC这套关系接口提供给工作流使用即可。
2025-04-10 15:49:50
2899
10
原创 使用Docker-Compose部署若依微服务项目详细教程
这里就不赘述怎么拉取代码问题。执行命令构建服务容器。注意:如果是多次构建,会存在换成可以使用该命令,忽略缓存,并且重新下载和构建所有镜像。
2024-04-25 18:37:11
2180
1
原创 Docker + K8s 部署若依微服务 | 从 0 到 1 实战指南(Dockerfile + Harbor + Helm)
若依微服务想上生产环境?Docker 容器化是第一步,K8s 编排才是终极目标。本文从传统部署的痛点出发,详细讲解 Docker 核心概念与若依微服务 Dockerfile 编写、Docker Compose 本地开发环境一键启动,再到 Kubernetes 生产环境部署完整流程。涵盖 Harbor 私有镜像仓库搭建、微服务 Deployment/Service/Ingress YAML 配置、Helm 包管理一键部署与回滚、滚动更新策略、健康检查、资源限制、POD 自动扩缩容(HPA)等生产级核心技能。配
2026-04-02 07:30:00
450
原创 LangChain4j 集成若依单体应用 | 5 大 AI 功能实战:多轮对话、流式输出、RAG 知识库
还在手写 HTTP 调用 OpenAI?LangChain4j 让 Java 开发 AI 应用像写普通业务代码一样简单。本文从 LangChain4j 核心架构出发,详解 ChatModel、ChatMemory、EmbeddingStore、ContentRetriever、Tools 等核心组件,并手把手完成若依单体应用集成,实现 5 大核心功能:基础对话(@AiService 声明式接口)、多轮对话(@MemoryId 用户隔离记忆)、流式输出(SSE 打字机效果)、RAG 知识库问答(向量检索增强生
2026-04-01 07:30:00
357
原创 synchronized vs ReentrantLock 深度对比 | 8大区别 + 锁升级 + AQS原理 + 10道面试精讲
synchronized 和 ReentrantLock 是 Java 并发编程中最核心的锁机制,也是面试高频考察点。本文从并发问题的根源出发,详细讲解 synchronized 的底层原理——Monitor 监视器机制、对象头 Mark Word 存储结构、锁升级过程(无锁→偏向锁→轻量级锁→重量级锁),以及 ReentrantLock 的底层核心——AQS 抽象队列同步器、CLH 等待队列、FairSync 与 NonfairSync。对比两者 8 大核心区别:来源、用法、公平性、可中断性、定时锁、条件
2026-03-31 07:30:00
165
原创 RocketMQ 消息队列实现最终一致性 + 若依微服务集成完整指南
微服务架构下,如何在保证高性能的同时实现分布式事务一致性?本文深入对比强一致性(Seata AT)与最终一致性(消息队列)的适用场景,详细讲解 RocketMQ 事务消息的核心原理——半消息(Half Message)机制与事务回查,并提供从零开始的完整实战指南:包括 RocketMQ 单机/Docker 部署、NameServer + Broker 启动配置、可视化控制台,以及若依微服务集成完整代码——订单服务事务消息监听器、库存/通知服务消费者实现、消息幂等性处理(唯一键 + 状态表)、顺序消息保证机制
2026-03-30 08:00:00
700
原创 ThreadLocal 原理 + 内存泄漏 | 高频面试题详解
ThreadLocal 是 Java 并发编程中最重要的知识点之一,也是面试高频考察点。本文从实际业务场景出发,详解 ThreadLocal 如何实现线程隔离,深入剖析核心数据结构——ThreadLocalMap 与 Entry,配套大量手绘原理图和完整源码解析(set/get/remove/线性探测/扩容机制)。重点讲解面试必问的内存泄漏问题:为什么弱引用 key 仍会导致 value 泄漏?Entry 内存泄漏的完整链路分析,以及 ThreadLocalMap 的防护机制为何不能完全避免泄漏。最后给出企
2026-03-29 08:00:00
187
原创 Seata 分布式事务实战 + 若依微服务集成完整指南
微服务架构下,跨服务的数据一致性如何保证?本文从分布式事务的痛点出发,深入讲解 Seata 的核心架构(TC/TM/RM)和 AT 模式工作原理,并提供从零开始的完整实战指南:包括 Seata Server 安装部署(含 Docker 方式)、Nacos 配置中心集成、各业务数据库 undo_log 表创建、若依微服务各服务接入配置、数据源代理配置,以及下单场景(订单+库存+账户)的完整分布式事务代码实现。附 Feign 调用 XID 传递、事务不回滚等常见问题解决方案,开箱即用。
2026-03-28 07:30:00
380
原创 为什么 Netty 性能这么强?从 BIO 到 NIO 再到 Netty,彻底搞懂高性能网络编程
同样是网络通信,为什么 Netty 能支撑百万并发连接,而传统 BIO 几百个连接就卡死?本文从 BIO → NIO → Netty 的演进历史出发,深入剖析 Netty 高性能的六大核心原因:主从 Reactor 线程模型、零拷贝机制、ByteBuf 内存池、Pipeline 责任链、高效序列化、无锁化设计,并配有大量架构图和原理图辅助理解。同时提供从零开始的实战代码,包括 Echo 服务器完整实现、粘包拆包解决方案、心跳检测机制,以及生产环境性能调优参数配置,适合有一定 Java 基础的开发者深入学习。
2026-03-27 07:30:00
354
原创 若依微服务集成 SkyWalking 链路追踪实战:从 0 到 1 完整指南
微服务架构下,一个请求经过十几个服务,出了问题如何快速定位?本文从 0 到 1 手把手带你在若依微服务项目中集成 SkyWalking 链路追踪,涵盖 Elasticsearch 安装、SkyWalking OAP + UI 部署、各微服务 Agent 接入(含 IDEA/Docker/Docker Compose 三种方式)、Logback 日志与 TraceId 关联、自定义埋点追踪、告警规则配置与钉钉通知对接,以及 SkyWalking UI 实战使用技巧。无需修改业务代码,一个 JVM 参数即可接入
2026-03-26 07:30:00
352
原创 本地部署 Ollama + DeepSeek 完整指南:免费跑大模型,数据不出本地
还在为 AI 工具收费贵、数据不安全、需要科学上网而烦恼?本文手把手教你在本地免费部署 DeepSeek 大模型,数据完全不出本地。文章涵盖 Ollama 工具介绍、Windows/Mac/Linux 三平台安装教程、DeepSeek 模型选型建议(1.5B~70B)、硬件配置参考、API 调用方式(含 Java/Spring Boot 完整代码)、Open WebUI 可视化界面安装,以及自定义模型、GPU 加速、局域网访问等实用技巧。8GB 内存即可上手,30 分钟完成部署,完全免费,离线可用。
2026-03-25 07:30:00
1234
原创 Java 调用 OpenAI / Claude API 完整实战指南
本文手把手教你用 Java 接入 OpenAI 和 Claude 两大主流 AI 接口,从基础封装到 Spring Boot 完整集成,涵盖普通对话、多轮上下文管理、流式输出(打字机效果)、SSE 推送等核心功能,附完整可运行代码。同时对比了 OpenAI 与 Claude 接口的关键差异(认证方式、响应格式、流式事件),并提供 API Key 安全存储、限流重试、费用控制等实用技巧,开箱即用,适合快速集成到自己的项目中。
2026-03-24 14:54:20
437
原创 JVM调优实战:从参数配置到性能优化,这一篇就够了
本文是一篇JVM调优实战指南,分享了从参数配置到性能优化的完整经验。文章首先通过一个真实案例展示了JVM调优的价值,随后详细解析了JVM内存结构、GC算法选择策略和核心调优参数。重点内容包括:堆内存设置、元空间配置、G1 GC专属参数、GC日志记录以及OOM处理方案。最后通过电商高并发场景的调优案例,展示了如何将理论应用于实践,解决实际问题。文章强调GC日志记录的重要性,并提供了针对不同应用场景的调优建议,适合Java开发者系统学习JVM性能优化。
2026-03-24 10:36:01
677
原创 线上OOM问题排查全过程实战指南
线上OOM问题排查实战指南 摘要 本文记录了一次线上OOM问题的完整排查过程。通过监控告警发现JVM堆内存使用率超过90%,立即采取以下措施: 紧急响应:使用jmap导出堆快照,jstat分析GC情况,发现老年代几乎全满且Full GC频繁 问题定位:通过MAT工具分析堆快照,发现45,123个SysUser对象被静态HashMap缓存且无过期机制 解决方案: 短期修复:改用WeakHashMap或带过期时间的缓存 长期方案:迁移到Spring Cache + Redis 工具清单:提供jps/jstat/
2026-03-23 08:00:00
344
原创 若依分离版手把手教你用Sa-Token改造成单点登录
本文介绍如何将若依前后端分离项目改造为SSO单点登录系统,使用Sa-Token框架实现。主要内容包括:1)单点登录(SSO)概念及其优势;2)Sa-Token框架特点及与其他方案的比较;3)系统架构设计,包含认证中心(SSO-Server)和多个客户端(SSO-Client);4)详细认证流程说明;5)环境准备要求和技术栈;6)具体改造步骤,包括添加Sa-Token依赖。Sa-Token因其简单易用、功能丰富且与若依天然适配而成为首选方案,通过本教程可快速实现多系统统一登录。
2026-03-21 08:00:00
368
原创 2026 Agent 元年:OpenClaw 引领的 AI 自动化新时代
2026 年,是 Agent 元年,也是开发者转型的一年。AI 不会取代开发者,但会用 AI 的开发者会取代不会用 AI 的开发者。这不是危言耸听,而是正在发生的现实。OpenClaw 为我们提供了一个很好的起点。它开源、模块化、易扩展,让我们能够快速进入 Agent 开发的世界。2026 年已经开局,你准备好了吗?参考资源OpenClaw 官网:https://docs.openclaw.ai社区交流:https://discord.com/invite/clawd。
2026-03-20 15:03:44
1025
原创 2026最强AI编程助手 Claude Code 入门到实战 —— 安装配置篇
Claude Code确实很强,但最好的工具也要会用才行。先在个人项目中使用熟悉掌握本文的5个技巧尝试MCP扩展形成自己的使用模式📎 相关资源官方文档:https://docs.anthropic.com/en/docs/claude-code价格说明:https://www.anthropic.com/pricing💡写在最后AI工具最终只是辅助,真正的核心能力还是你对业务的理解和架构设计。用好Claude Code,节省下来的时间去学习更深层的东西,它不香吗?
2026-03-20 08:00:00
459
原创 若依前后端分离项目文件断点续传实现方案
本文介绍了在若依(RuoYi)前后端分离项目中实现文件断点续传功能的方案。通过将大文件分割成多个小块上传,解决了传统上传方式的问题。核心流程包括文件选择、切片、MD5计算、检查已上传切片、上传剩余切片和合并等步骤。后端实现主要包含配置文件上传路径、创建文件切片服务类,提供检查切片状态、获取已上传切片、上传单个切片和合并切片等功能接口。该方案显著提升了大文件上传的效率和可靠性。
2026-03-19 14:29:21
521
原创 Ubuntu安装OpenClaw及接入企业微信保姆级安装教程
本文详细介绍了在Ubuntu系统上安装OpenClaw的全过程。首先通过nvm安装Node.js 22环境,然后使用npm全局安装OpenClaw。通过交互式向导配置大模型供应商(以Qwen为例),跳过扩展功能配置完成基础搭建。最后启动网关服务并通过SSH隧道访问可视化界面。安装完成后即可通过本地端口18789访问OpenClaw控制台。整个过程涵盖了从环境准备到最终使用的完整步骤,适合初学者快速部署OpenClaw。
2026-03-16 14:11:56
523
原创 告别轮询!WebSocket 实战宝典:构建高效实时应用的完整解决方案
WebSocket概述与应用 WebSocket是一种在Web应用程序和服务器之间建立实时、双向通信的协议,通过单一TCP连接实现持久化数据传输。它具有实时性强、双向通信和减少网络负载等优势,但需要浏览器和服务器的共同支持,并存在额外开销和安全问题。 WebSocket协议基于TCP,包含连接建立、开放、关闭和关闭完成四个生命周期阶段。消息格式由消息头和消息体组成,支持文本和二进制数据。WebSocket API提供了一系列接口,包括构造函数、发送方法以及各种事件监听器。 在Java中,可以使用javax.
2025-09-25 18:00:46
1004
原创 MySQL 8.0 SQL优化黑科技,面试官都不一定知道
MySQL 8.0优化黑科技盘点摘要:MySQL 8.0引入多项革命性特性,突破传统优化思维。文章重点介绍7个实用黑科技:1)窗口函数优化复杂查询,取代多次子查询;2)降序索引提升混合排序性能;3)Generated Column实现JSON字段高效查询;4)Invisible Index实现无风险索引测试;5)Hint强制执行计划避免优化器误判;6)Resource Group隔离不同类型查询资源;7)LATERAL JOIN简化复杂关联查询。这些技术不仅能显著提升SQL性能,在面试中展示更能体现技术深
2025-06-12 12:19:47
1194
原创 MySQL虚拟列:一个被低估的MySQL特性
MySQL虚拟列(Generated Columns)是MySQL 5.7引入的特性,通过在表定义中添加基于其他列的表达式自动计算值。文章介绍了虚拟列的两类(VIRTUAL和STORED)及其适用场景,如简化查询、保证数据一致性、JSON字段提取和使用索引优化性能等。同时也指出了不适用场景,如复杂计算、频繁更新表等。作者结合订单系统的实践经验,建议根据业务场景合理使用虚拟列,既能简化应用层代码,又能保证数据一致性,但对复杂业务逻辑仍推荐在应用层处理。该特性为数据计算提供了新的解决方案,值得开发者在合适场景中
2025-06-11 14:57:04
719
原创 若依-Vue2(前后端分离)集成阿里云短信服务并实现手机验证码登录
本文介绍了如何在项目中集成阿里云短信服务实现验证码发送功能。主要内容包括:1) 注册阿里云账号并获取短信服务所需的ACCESS_KEY凭证;2) 在Maven项目中引入阿里云短信服务SDK依赖;3) 编写SmsUtil工具类封装短信发送逻辑,通过环境变量获取安全凭证;4) 结合Spring Security框架,说明需要自定义SmsCodeAuthenticationToken实现短信验证码认证。文章提供了完整的代码示例,重点强调了凭证安全获取和短信发送的具体实现方法。
2025-06-11 12:13:15
1657
原创 工作五年年总结:这 7 种设计模式,解决 99% 的 Java 开发场景
本文介绍了Java开发中最常用的七大设计模式及其应用场景,重点解析了单例模式、工厂模式、策略模式和观察者模式。单例模式用于创建全局唯一实例,工厂模式封装对象创建过程,策略模式实现算法灵活切换,观察者模式处理对象间的一对多依赖关系。每种模式均附有典型应用场景和Java代码实现示例,帮助开发者理解并掌握这些核心设计模式在实际项目中的运用。掌握这些模式能有效提升代码质量、可维护性和可扩展性。
2025-06-09 16:33:34
726
原创 DeepSeek+SpringAI实现流式对话
摘要: 本文介绍了如何实现大模型的流式输出,通过Spring Boot的SseEmitter技术实现后端数据分块推送,前端使用EventSource接收并实时展示。后端代码示例展示了如何创建SSE连接并分次发送数据,前端通过监听消息事件逐步渲染结果。最终方案结合OpenAI模型,实现了问答内容的流式传输,有效提升用户体验。关键点包括:SSE技术选择、后端分块发送逻辑、前端实时渲染机制,以及异常处理和连接关闭的控制。
2025-06-04 20:08:55
1659
原创 URL地址末尾加不加”/“有什么区别
URL 形式作用影响目录通常返回 folder/ 下的默认文件,如 index.html,相对路径解析基于 folder/资源(或重定向)可能被解析为文件,或者服务器重定向到 folder/,相对路径解析可能错误API 路径可能与 https://api.example.com/data 表现不同,具体由 API 设计决定统一 URL 规则,例如所有目录都加 / 或者所有请求都不加 /,然后用 301 重定向 确保一致性。测试 API 的行为,确认带 / 和不带 / 是否影响请求结果。
2025-04-25 14:30:57
899
原创 Docker+Jenkins+Gitee自动化项目部署
解压需要解压到这个目录下面 /opt/develop_resource/apache-maven-3.6.3,因为后面再启动jenkins的时候需要挂载在他容器的目录里面。改完之后通过git命令上传到gitee上面后,jenkins会自动的进行构建。注意:首次进入需要获取管理员密码,可以进入Jenkins容器查看。Jenkins启动完整后进入容器查看maven是否配置正确。进入后可以新建一个账号,插件可选择性安装,这里略。这里配置的地址与前面配置的保持一致即可。进入gitee代码仓库,将密码填入,
2025-04-08 17:53:07
2132
原创 Vue-TreeSelect组件最下级隐藏No sub-options
整个树形结构数据都是由后端构造好返回给前端的。默认子类没数据的话,children是一个空数组。也就是因为这最下级的空数组,导致最下级显示这段文字提示。
2024-11-26 10:08:58
1075
原创 报错:Entering emergency mode. Exit the shell to continueTupe “iournaletl‘ to view sustem logs 解决
L 选项指定强制日志清零,强制xfs_repair将日志归零,即使它包含脏数据(元数据更改)。执行完后,重启虚拟机,大功告成!
2024-07-10 08:55:02
1411
3
原创 MySQL索引B+树
本篇文章从二叉查找树,详细说明了为什么 MySQL 用 B+ 树作为数据的索引,以及在 InnoDB 中数据库如何通过 B+ 树索引来存储数据以及查找数据相关资料MyISAM和Innodb(非聚集索引和聚集索引)、B+树的存储、MySQL的几种索引。
2024-06-06 09:48:22
954
原创 ConcurrentHashMap原理详解
做插入操作时,首先进入乐观锁然后,在乐观锁中判断容器是否初始化,如果没初始化则初始化容器,如果已经初始化,则判断该hash位置的节点是否为空,如果为空,则通过CAS操作进行插入。如果该节点不为空,再判断容器是否在扩容中,如果在扩容,则帮助其扩容。如果没有扩容,则进行最后一步,先加锁,然后找到hash值相同的那个节点(hash冲突)循环判断这个节点上的链表,决定做覆盖操作还是插入操作。循环结束,插入完毕。
2024-06-06 09:47:22
1908
原创 微服务项目将Nacos地址、命名空间、环境等配置信息,统一放在pom.xml管理教程
在Maven项目中,src/main/resources目录下的文件通常被视为资源文件,这些资源文件在构建项目时会被复制到输出目录(如target/classes),以便在运行时被访问。通过这样的配置,你可以灵活地控制哪些文件会被视为项目的资源文件,并在构建过程中将它们复制到合适的位置。这些文件也会被视为资源文件,并在构建过程中被复制到输出目录。第一个 元素指定了src/main/resources目录,它包含了true的配置,表示对该目录下的资源文件执行过滤操作。元素用于定义一个资源目录及其配置。
2024-04-20 17:26:31
1040
原创 Xshell连接不上VMware虚拟机,以及设置固定虚拟机IP教程
点击DHCP设置,查看ip网段范围,下面配置设置虚拟机ip,网段要在该范围内。5、保存并退出:wq,不保存退出:q!配置完成后重启虚拟机,查看虚拟机ip。进入该文件后在最后添加一段配置。2、键入i 进入编辑模式。1、首先输入法切到英文。3、esc退出编辑模式。这里记录下vim操作。
2024-01-25 10:29:20
3097
原创 Docker学习笔记
docker容器基础学习,从docker安装、到学习docker基础命令、数据卷使用、docker网络模式、dockerfile编写、镜像仓库介绍及使用、容器编排、分布式编排Swarm使用、单体服务、分布式服务使用docker部署等
2024-01-12 17:28:43
706
1
原创 JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is
远程接口调用参数过大,超过当前设置的最大参数长度,部分参数被截掉,导致json字符串不完整,也就解析出问题了。查阅资料,定位到该异常是由于Spring Cloud Feign 请求其他微服务时json数据被压缩导致的。也就是说只有当请求的参数大于8192,及8kb,才会将参数进行压缩。附上application-dev.yml中feign的配置。1、减小参数的长度(这种方案看具体场景)3、设置请求压缩的最小请求大小。当然这个参数大小自定义。2、关闭请求数据压缩。
2024-01-11 16:56:26
6579
1
原创 若依微服务版本JSON.parse: unexpected character错误排查
,若依这里是采用在配置文件当中填写具体信息的方式,来配置是否启用xss,是否是白名单,是否是匹配链接。按照后台填写的数据处理请求,如果是不启用或者是该请求为白名单,就直接将请求放过如果不通过就交给XssFilter来处理。若依框架在网关采用配置拦截器的方式来处理XSS攻击,一旦请求被过滤器拦截,就会转入到自定义的拦截器XssFilter当中,首先解决的就是判断是否启用XSS拦截器和是否需要拦截(在网关配置Xss过滤白名单接口。
2024-01-09 10:38:54
1742
原创 Spring Cloud Gateway网关转发websocket服务配置
客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。
2023-10-24 10:14:21
4830
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅