
原创随笔
文章平均质量分 85
风象南
公众号[ 风象南 ]
微信:yuboon2019
邮箱:yuboon@126.com
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SpringBoot 自研「轻量级 API 防火墙」:单机内嵌,支持在线配置
在做后端开发时,我们常常会遇到这样的困境:接口被恶意刷流量:比如某个查询接口被短时间大量调用,数据库连接数打满,最终拖垮整个服务。缺少细粒度防护能力:很多系统只有粗糙的全局限流,但某些高价值 API(比如下单、支付、导出)并没有单独保护,一旦被攻击,影响范围很大。风控策略难以落地:规则写死在代码里,每次调整都要改代码、打包、上线,运维成本高。黑白名单管理混乱:一些临时封禁规则放在 Nginx,一些写在数据库,开发、运维、测试之间没有统一入口。很多企业会引入 API 网关(如 Kong、Spring Clou原创 2025-08-21 08:03:02 · 350 阅读 · 0 评论 -
SpringBoot 自研运行时 SQL 调用树,3 分钟定位慢 SQL!
这个项目展示了如何结合Spring Boot生态和前端技术,构建一个实用的SQL监控工具,为日常开发和性能优化提供有力支持。原创 2025-08-18 15:15:22 · 654 阅读 · 0 评论 -
开发者必备工具:用 SpringBoot 构建轻量级日志查看器,省时又省力
生产环境出现问题,需要快速定位错误日志日志文件太大,下载耗时且占用带宽需要根据时间、关键字、日志级别等条件筛选日志多人协作时,都需要登录服务器查看日志虽然有 ELK、Splunk 等成熟方案,但对于中小型项目来说,部署成本高、资源消耗大。今天我们用 Spring Boot + 纯前端技术栈,打造一个轻量级、开箱即用的日志管理系统。1. 轻量级:无需复杂的部署,Spring Boot + 静态页面即可运行2. 功能完整:支持搜索、过滤、分页、下载等核心功能3. 用户友好。原创 2025-08-16 11:27:27 · 420 阅读 · 0 评论 -
SpringBoot 实现在线查看内存对象拓扑图 —— 给 JVM 装上“透视眼”
这套方案把“重流程”的内存排查,压缩成两步生成快照 → 在线出图。当前实现还比较粗糙,不适合大面积进行分析, 适合局部锁定小范围定向分析,可作为基础原型DEMO参考。它不是取代 MAT,而是提供了一种“嵌入式、轻交互、随手查”的轻量解决方案作为一种补充手段。原创 2025-08-14 13:07:24 · 869 阅读 · 0 评论 -
SpringBoot 实现网络流量抓包与实时分析
本文基于轻量级架构:基于 Spring Boot 的微服务架构,易于部署和扩展实时数据处理:使用 WebSocket 实现实时数据推送和监控多协议支持:支持 HTTP、TCP、UDP、DNS 等主流网络协议解析可视化界面:现代化的 Web 界面,支持数据可视化和实时监控:完整的 API 接口,便于系统集成通过本文的详细介绍,我们成功构建了一个基于的企业级网络流量监控系统。该系统不仅解决了传统网络监控工具的痛点,还提供了现代化的用户界面和强大的数据分析能力。能够显著提升网络问题排查效率和系统可观测性。原创 2025-08-12 08:02:59 · 631 阅读 · 0 评论 -
Spring Boot + SSH 客户端:在浏览器中执行远程命令
本文介绍了如何使用Spring Boot开发一个基础的Web SSH客户端。通过JSch库处理SSH连接,WebSocket实现实时通信,JdbcTemplate进行数据存储,我们构建了一个功能完整的Web SSH解决方案。这个项目适合作为学习WebSocket通信、SSH协议应用的实践案例。原创 2025-08-10 08:32:08 · 604 阅读 · 0 评论 -
告别YAML,在SpringBoot中用数据库配置替代配置文件
这种配置管理方式虽然增加了系统的复杂度,但在合适的场景下能够显著提升系统的运维效率和业务敏捷性。原创 2025-08-07 14:17:57 · 883 阅读 · 0 评论 -
前端渲染三国杀:SSR、SPA、SSG
SSR、SPA、SSG,没有绝对的优劣,只有场景的适配。SPA用交互颠覆体验,SSR以平衡征服内容,SSG凭静制动笑傲江湖。技术选型的本质,是在用户体验、开发成本、运维复杂度、业务需求四维空间中寻找最优解。下次启动项目时,别再盲从“网红技术”,先问自己:我的用户最需要什么?我的内容如何流动?我的团队能驾驭什么?答案自会浮现。毕竟,在技术的江湖里,适合的,才是最强的。原创 2025-08-01 23:25:24 · 521 阅读 · 0 评论 -
用 4 张图解释 CAP 到底在纠结什么
CAP的纠结本质上不是技术问题,而是业务问题。就像你不可能同时要求一个人既要马儿跑,又要马儿不吃草一样。你的业务最怕什么?是怕数据错乱,还是怕服务中断?不同的数据是否可以有不同的策略?能否在正常和异常情况下采用不同的处理方式?技术选择没有标准答案,只有最适合当前业务场景的方案。这就是架构师的价值所在——在各种约束条件下找到最优解。原创 2025-07-29 07:47:33 · 920 阅读 · 0 评论 -
SpringBoot实现Serverless:手撸一个本地函数计算引擎
*** Serverless函数接口* 所有用户函数都需要实现这个接口*//*** 函数执行入口* @param input 输入参数* @param context 执行上下文* @return 执行结果*/通过SpringBoot,我们成功实现了一个功能完整的Serverless执行引擎。原创 2025-07-27 12:32:20 · 269 阅读 · 0 评论 -
使用Claude Code从零到一打造一个现代化的GitHub Star项目管理器
在日常的开发工作中,我们经常会在GitHub上star一些有用的项目库。随着时间的推移,star的项目越来越多,如何有效管理这些项目成为了一个痛点。今天,分享我使用Claude Code从零构建的一个GitHub Star管理插件。原创 2025-07-24 23:09:37 · 975 阅读 · 0 评论 -
SpringBoot实现RPC调用的本地代理模式
/ RpcService.java - 服务提供者注解@ComponentClass<?// RpcReference.java - 服务消费者注解这个实现虽然相对简单,但完整展现了RPC框架的核心思想。在实际项目中,建议使用成熟的RPC框架如Dubbo或Spring Cloud,但理解底层原理对我们选择和优化技术方案很有价值。原创 2025-07-21 08:06:54 · 195 阅读 · 0 评论 -
SpringBoot配置属性热更新的轻量级实现
轻量级配置热更新方案的核心是“利用SpringBoot原生能力+最小化改造”,适合中小项目或需要快速集成的场景。零依赖:无需部署额外服务,代码量少低成本:对现有项目侵入小,改造成本低易维护:基于Spring原生API,无需学习新框架。原创 2025-07-19 08:10:39 · 351 阅读 · 0 评论 -
SpringBoot集成MyBatis的SQL拦截器实战
/ 作用在字段上// 运行时生效// 脱敏类型(手机号、身份证号等)// 脱敏类型枚举PHONE, // 手机号ID_CARD // 身份证号通过SQL拦截器,我们用极少的代码实现了SQL监控和数据脱敏,避免了修改大量业务代码。原创 2025-07-17 07:39:43 · 664 阅读 · 0 评论 -
SpringBoot自定义RestTemplate的拦截器链
通过自定义RestTemplate的拦截器链,我们可以将请求处理的通用逻辑(认证、日志、重试等)抽离成独立组件,实现代码复用和统一维护。原创 2025-07-15 07:52:53 · 268 阅读 · 0 评论 -
基于 SpringBoot 的 REST API 与 RPC 调用的统一封装
通过外观模式 + 适配器模式 + 策略模式的组合,实现了 REST API 与 RPC 调用的统一封装。原创 2025-07-13 12:02:57 · 574 阅读 · 0 评论 -
SpringBoot应用开机自启动与进程守护配置
简单说,systemd是现在Linux系统的"大管家",负责管理系统启动和服务进程。几乎所有主流Linux(CentOS 、Ubuntu 、Debian等)都支持使用systemd。为什么推荐它?原生集成:不需要额外安装软件功能强大:支持开机自启、进程监控、日志管理配置简单:一个服务文件搞定所有设置按照这些步骤配置后,你的SpringBoot应用将具备服务器重启或应用异常down掉后自动恢复的能力。原创 2025-07-11 07:39:58 · 295 阅读 · 0 评论 -
SpringBoot 与 HTMX:现代 Web 开发的高效组合
后端:Spring Boot REST API前端:纯 HTML + HTMX + doT.js + Tailwind CSS这种架构使得前后端可以独立开发、测试和部署,同时保持高效的通信和良好的用户体验。通过结合 Spring Boot 和 HTMX,我们实现了一个高效、简洁的前后端分离应用。这种架构既保留了 Spring Boot 强大的后端处理能力,又通过 HTMX 简化了前端开发,避免了复杂的前端框架和构建流程。对于中小型项目或者需要快速迭代的应用来说,这种组合是一个非常不错的选择。原创 2025-07-09 07:49:02 · 439 阅读 · 0 评论 -
SpringBoot敏感配置项加密与解密实战
如果Jasypt满足不了你的需求(比如要对接企业内部的密钥管理系统),可以自己实现加密解密逻辑。比如,某些时候项目需要用国密算法SM4,Jasypt不支持,就需要自定义个解密处理器。/*** 自定义加密配置源* 解密以"sm4:"开头的配置项*/> source;@Override// 解密以"sm4:"开头的配置密钥管理:密钥必须与配置文件分离,优先用环境变量或专用密钥管理服务(如阿里云KMS)算法选择。原创 2025-07-08 09:09:17 · 689 阅读 · 0 评论 -
SpringBoot 控制器的动态注册与卸载
在项目开发中,动态注册和卸载控制器可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,本文将介绍如何在 Spring Boot 中实现控制器的动态注册和卸载。原创 2025-07-06 11:28:43 · 271 阅读 · 0 评论 -
SpringBoot基于Java Agent的无侵入式监控实现
Java Agent是JDK 1.5引入的特性,它允许我们在JVM启动时或运行时动态地修改已加载的类字节码,从而实现对应用行为的增强或监控。Java Agent的核心优势在于能够在不修改源代码的情况下,对应用进行功能扩展。启动时加载(premain)运行时加载(agentmain)本文将主要关注启动时加载的方式。在实际使用中,我们可以根据具体需求,对Agent进行定制化开发,实现更加精细化的监控。同时,可以将Agent与现有的监控系统集成,构建完整的应用性能监控体系。原创 2025-07-04 08:06:07 · 1028 阅读 · 0 评论 -
Spring Shell命令行工具开发实战
Spring Shell是一个交互式shell框架,它提供了一种通过命令行与应用程序交互的方式。它支持自动补全、帮助文档生成、命令历史和各种交互式功能,使命令行工具更加用户友好。类似于Bash的交互体验Tab键自动补全功能内置帮助系统命令历史记录参数验证和转换命令分组和可扩展性在Spring Shell中,命令是通过在标有注解的类中创建标有注解的方法来定义的。您可以通过实现@Bean。原创 2025-07-03 07:44:45 · 461 阅读 · 0 评论 -
利用SpringBoot中的RestTemplate实现反向代理
反向代理是指以代理服务器接收客户端请求,然后将请求转发给内部服务器,并将内部服务器的响应返回给客户端。客户端只与反向代理服务器通信,不直接访问内部服务器。通过SpringBoot和RestTemplate,我们可以快速实现一个功能完备的反向代理。相比于专门的代理服务器如Nginx,这种方式更加灵活,可以与业务逻辑紧密结合,适合实现特定的代理需求。但对于大规模的代理场景,还是推荐使用专门的代理软件。原创 2025-07-02 08:16:14 · 298 阅读 · 0 评论 -
Spring Boot Filter、Interceptor、AOP 的使用场景与选型
选择合适的技术取决于具体需求、性能考虑和团队熟悉度。在实际应用中,合理组合使用这三种技术可以构建更加模块化、可维护的应用程序。对于 Spring Boot 应用程序,推荐遵循"责任分离"原则,根据横切关注点的性质选择最合适的实现方式,让代码结构更加清晰,逻辑更加分明。原创 2025-07-01 08:29:13 · 587 阅读 · 0 评论 -
Spring Boot 内置反向代理(Undertow Proxy)高可用配置
Undertow 是一个采用 Java 开发的灵活的高性能 Web 服务器,提供基于 NIO 的阻塞和非阻塞 API。轻量级:核心仅依赖于 JBoss Logging 和 xnio高性能:在多核系统上表现优异内置反向代理:支持 HTTP、HTTPS、HTTP/2 代理可扩展:通过 Handler 链模式支持灵活扩展Spring Boot 内置的 Undertow 反向代理功能为微服务架构提供了一种轻量级的代理解决方案。原创 2025-06-30 08:00:17 · 347 阅读 · 0 评论 -
SpringBoot 运行时修改定时任务 Cron 表达式
Scheduled 注解:最简单的方式,直接在方法上添加注解SchedulingConfigurer 接口:通过实现该接口,可以进行更灵活的配置TaskScheduler 接口:最底层的 API,提供最大的灵活性传统的@Scheduled@Component") // 每5分钟执行一次System.out.println("定时任务执行,时间:" + new Date());原创 2025-06-29 08:56:29 · 584 阅读 · 0 评论 -
SpringBoot多版本API共存--通过注解路由新旧版本接口实现灰度发布
*** API版本注解,用于标记接口的版本*//*** 版本号,默认为1.0*//*** 版本描述*//*** 是否废弃*//*** 废弃说明,建议使用的新版本等信息*//*** 灰度发布注解,用于定义灰度发布规则*//*** 开始时间,格式:yyyy-MM-dd HH:mm:ss*//*** 结束时间,格式:yyyy-MM-dd HH:mm:ss*//*** 用户ID白名单,多个ID用逗号分隔*//**原创 2025-06-28 07:50:08 · 750 阅读 · 0 评论 -
SpringBoot实现本地远程方法调用的无缝切换
首先,我们需要定义服务接口。这些接口将同时作为本地实现和远程调用的契约。// 用户服务接口在实际应用中,可以根据自身业务特点和技术栈,对本文提出的方案进行适当的调整和扩展,以满足特定场景的需求。原创 2025-06-27 08:02:33 · 665 阅读 · 0 评论 -
SpringBoot+WebSocket实现直播连麦
随着互联网技术的发展,直播已成为一种主流的内容传播形式。其中,连麦功能作为直播互动的重要手段,能够有效提升用户参与感和观看体验。本文将介绍如何使用SpringBoot和WebSocket技术构建一个直播连麦系统,实现主播与观众之间的实时音视频交流和文字聊天功能。为了方便DEMO的运行,本系统基于纯内存操作实现核心业务逻辑,不依赖外部数据库或者缓存组件。原创 2025-06-26 07:46:07 · 532 阅读 · 0 评论 -
SpringBoot内存泄漏的11个排查方法
内存泄漏问题是Java应用尤其是长期运行的SpringBoot应用面临的常见挑战。在实际应用中,通常需要结合多种方法进行综合分析,才能准确找出问题根源。同时,完善的监控体系也能帮助我们及早发现并解决潜在问题,确保应用的长期稳定运行。原创 2025-06-25 07:43:49 · 1134 阅读 · 0 评论 -
历史项目依赖库Bugfix技巧-类覆盖
首先,优先推荐前两种方式进行问题修复,但是某些时候受制于时间、成本、风险等因素需要快速解决问题,这时,可以考虑第三种方案类覆盖。需要特别注意的是,修改的方法可能会被多处调用,修改时需要充分考虑兼容性。原创 2025-06-23 20:01:56 · 339 阅读 · 0 评论 -
SpringBoot实现面对面建群(基于Redis)
面对面建群是一种基于位置的社交应用场景,允许用户在物理位置相近的情况下快速创建和加入临时群组。本文将介绍如何使用SpringBoot和Redis实现面对面建群,本示例基于Redis的各种数据结构存储应用数据。原创 2025-06-22 10:09:35 · 1305 阅读 · 0 评论 -
SpringBoot的3种六边形架构应用方式
六边形架构的核心价值在于将业务逻辑与技术细节分离,提高系统的可维护性、可测试性和灵活性。无论选择哪种实现方式,都应该坚持这一核心原则,保持领域模型的纯粹性和边界的清晰性。需要特别说明的是,架构应该服务于业务,而非相反。选择合适的架构方式,应以提高开发效率、系统质量和业务适应性为目标。原创 2025-06-20 07:28:22 · 579 阅读 · 0 评论 -
SpringBoot的6种数据库垂直分片实现策略
垂直分片是数据库分库分表的一种方式,它按照业务功能或数据表将原本在同一个数据库的数据拆分到不同的数据库实例中。与水平分片(将同一张表的数据按照某种规则分散到不同库或表中)不同,垂直分片主要解决的是业务模块的解耦和单库的资源瓶颈问题。原创 2025-06-19 07:49:04 · 886 阅读 · 0 评论 -
Spring Boot 的 3 种二级缓存落地方式
一级缓存(本地缓存):直接在应用服务器内存中,访问速度极快,但容量有限且在分布式环境下无法共享二级缓存(分布式缓存):独立的缓存服务,如Redis或Memcached,可被多个应用实例共享,容量更大二级缓存的工作流程通常是:先查询本地缓存,若未命中则查询分布式缓存,仍未命中才访问数据库,并将结果回填到各级缓存中。该方案通过自定义缓存框架,精确控制缓存的读写流程、失效策略和同步机制,实现更加贴合业务需求的二级缓存。这种方式虽然实现复杂度高,但提供了最大的灵活性和控制力。原创 2025-06-18 07:26:59 · 706 阅读 · 0 评论 -
Spring Boot 的 3 种动态 Bean 注入技巧
/ 自定义条件判断逻辑@Override// 获取注解属性// 获取当前环境// 检查是否匹配// 自定义条件注解@Bean@Bean通过合理选择和组合这些技巧,我们可以构建更加灵活、模块化和可扩展的 Spring Boot 应用。关键是根据实际需求选择合适的技术,保持代码的简洁和可维护性。原创 2025-06-17 07:40:55 · 923 阅读 · 0 评论 -
SpringBoot实现6种JWT令牌失效方案
每种方案都有其优缺点和适用场景,选择合适的方案取决于应用的安全需求、性能要求和架构设计。在实际应用中,常常需要组合使用多种策略,构建多层次的安全防护。原创 2025-06-16 07:35:28 · 984 阅读 · 0 评论 -
SpringBoot的4种Bean注入冲突解决方案
Bean注入冲突指的是当Spring容器中存在多个相同类型的Bean实例时,在进行依赖注入时,Spring不知道应该注入哪一个实例的情况。多个类实现了同一个接口配置了多个相同类型的Bean引入的第三方库中含有相同类型的Bean定义@Qualifier@Qualifier@Service@Alipay// 实现略@Service@Wechat// 实现略@Service@Autowired@Wechat// 方法略@Override// 获取注解属性。原创 2025-06-15 09:03:35 · 695 阅读 · 0 评论 -
SpringBoot防重放攻击的5种实现方案
重放攻击是一种网络攻击手段,攻击者截获一个有效的数据传输,然后在稍后的时间重新发送相同的数据,以实现欺骗系统的目的。重复提交订单付款请求重复使用过期的访问令牌重复提交表单数据重新发送包含认证信息的请求在实际应用中,往往需要组合使用多种防重放策略,实施分层防护,并与业务逻辑紧密结合,才能构建出既安全又易用的系统。防重放攻击只是Web安全的一个方面,还应关注其他安全威胁,如XSS、CSRF、SQL注入等,综合提升系统的安全性。原创 2025-06-14 07:27:27 · 893 阅读 · 0 评论 -
Spring Boot Fat Jar 的三种打包方式
对于更复杂的打包需求,可以创建自定义的Assembly描述符文件:创建<formats></formats><fileSets>-- 应用jar文件 --><fileSet><includes></fileSet>-- 配置文件 --><fileSet><includes></fileSet>-- 启动脚本 --><fileSet><includes></fileSet>-- 所有依赖 --><excludes><plugin><goals></goals>原创 2025-06-13 07:26:27 · 1029 阅读 · 0 评论