- 博客(189)
- 收藏
- 关注
原创 别再让 AI 瞎写代码了!装上它,你的 Cursor/Claude 直接封神
Superpowers是一个开源的插件系统,核心目标只有一个:把你的AI编码助手,从一个急于交差的“初级开发”,改造成一个严守开发纪律的资深软件工程师。它由Jesse Vincent开发,完美兼容Claude Code、Cursor AI、Codex、Gemini CLI这些主流AI编码平台,一套开发规范,能跨工具通用。它的核心逻辑特别朴素:优秀开发者和普通开发者的核心差距,从来不是智商,而是职业纪律。Superpowers做的,就是把资深工程师刻进骨子里的开发习惯,变成AI不可跳过的强制流程。
2026-06-02 09:56:46
193
原创 不设终局,专注当下:Harness 与 AI 工程化演进
Prompt 解决“可用”,Context 解决“有序”,Harness 解决“可靠”。AI 工程化的本质,不是不断追求更强的模型,而是不断提升系统的可控性、稳定性、可治理性。Harness Engineering 是当下最务实、最体系化的答案。它不是终点,而是下一个时代的起点。不设终局,持续演进,这才是技术最真实的样子。
2026-05-19 11:30:53
352
原创 OpenSpec定制化全攻略:让AI开发工作流精准适配你的团队
如果项目配置满足不了需求,比如你的团队有专属的开发流程(如先调研再提案、必须加评审环节),就可以用自定义模式,打造完全贴合团队的工作流。自定义模式的文件都放在项目的目录下,和代码一起版本控制,团队成员能同步使用,不怕规则不一致。如果想打造全新的工作流,比如极简的“快速迭代模式”,可以用,跟着引导设置工作流名称、描述、包含的文档;非交互式创建:直接指定参数,一步到位,示例如下:openspec schema init rapid \--default自定义模式的核心是version: 1。
2026-05-12 11:09:26
418
原创 OpenSpec的核心理念:四大原则+一套流程,让开发告别混乱
除了默认的“规范驱动”工作流,OpenSpec还支持自定义schema(流程架构),你可以根据团队的工作习惯,创建专属的开发流程。比如你的团队习惯先做调研再提提案,就可以基于默认流程,新增一个“调研”制品,让流程变成“调研→提案→任务”;如果是小需求,也可以跳过设计环节,直接从提案到任务,彻底拒绝繁文缛节。这种灵活性,让OpenSpec不仅能适配个人开发,还能从创业团队扩展到企业级项目,真正做到“框架适配团队,而非团队适配框架”。好的规范,应该是开发的“助力”。
2026-04-28 09:11:35
398
原创 OpenSpec Commands 全解析:让 AI 编码工作流更规范高效
OpenSpec的命令体系核心是**“场景化、规范化、可追踪”**,通过这套命令,将AI编码的“随性”转化为可管理的工作流,既保留了AI编码的高效,又解决了代码质量、协作、可维护性等问题。命令选择原则新手/简单需求/快速开发:用默认快速工作流为核心);复杂需求/团队协作/精细化控制:用扩展工作流/opsx:new为入口,配合/opsx:ff需求模糊:先执行调研,再启动变更;批量完成变更:用高效归档并处理冲突;首次使用:先执行完成交互式教程。
2026-04-14 09:08:39
475
1
原创 OpenSpec工作流全解析:选对模式,开发效率翻倍
适合复杂开发、团队协作场景,包含脚手架、校验、批量操作等专属命令。开启方式:执行/opsx:new/opsx:ff等,支持更精细化的开发管控。OpenSpec的工作流核心价值,在于将「固化的开发阶段」转化为「灵活的可执行动作」,让开发过程适配真实的工作场景——需求不会永远清晰,任务不会永远单一,变更也不会永远单向。选对工作流模式,本质上是让工具适配开发需求,而非让开发迁就工具。希望这篇文章能让你吃透OpenSpec的工作流逻辑,在实际开发中精准选择模式、灵活使用命令,真正实现开发效率的提升。
2026-03-24 09:14:27
524
原创 别再让 AI 编程瞎猜!OpenSpec 让你和 AI 助手高效协作不返工
OpenSpec的出现,让AI编程从「模糊的对话式开发」变成了「精确的规范式开发」,它没有改变AI编程助手的使用方式,而是给AI编程加了一套「规矩」,让AI的能力能更高效、更稳定地发挥出来。不管你是单兵作战的个人开发者,还是需要团队协作的技术负责人,亦或是开源项目维护者,OpenSpec都能帮你提升AI编程的效率,减少返工,降低开发成本。项目地址。
2026-03-10 14:12:39
466
原创 SpringBoot日志隔离实战:3步搞定多环境日志配置,开发/测试/生产各得其所
开发时想看到DEBUG级别的详细日志排查问题,测试环境却需要INFO级别过滤冗余信息,生产环境更是要严格限制日志输出量——不同环境对日志的需求天差地别,但很多项目还在用一套配置"走天下"。要么开发时日志太简略查不出问题,要么生产环境日志刷屏占满磁盘,甚至因为日志级别过低泄露敏感信息。本文就带你用SpringBoot的原生能力,零代码侵入实现多环境日志隔离,让开发、测试、生产环境的日志配置各得其所。环境配置完全隔离,修改某个环境的日志配置不会影响其他环境。
2026-02-03 09:28:39
581
原创 告别 OpenFeign!Spring 6 原生 HttpExchange 微服务调用实战指南
在 Spring Cloud 微服务架构的早期实践中,OpenFeign几乎是服务间远程调用的事实标准。它凭借简洁的注解和强大的功能,成为了无数开发者的首选。然而,技术的车轮永不停歇!随着的横空出世,一个全新的特性 ——应运而生。作为 Spring 原生的 HTTP 服务调用抽象,它无需额外依赖、配置更简洁、性能更优异,正在迅速成为微服务调用的新宠。如果你还在为 OpenFeign 的繁重依赖和复杂配置而烦恼,如果你想紧跟 Spring 官方的技术路线,那么本文绝对不容错过!我们将基于和,以。
2026-01-13 09:11:36
683
原创 用Nginx代理总404?换个网关就好?罪魁祸首竟是这个Host头!
前几天帮业务排查问题,差点没被一个Nginx代理的404搞破防。场景很简单:前端用Nginx代理到Tomcat,访问直接404;但跳过Nginx,直接访问,接口稳稳返回"hello hi"。更诡异的是,把代理地址换成Spring Cloud Gateway,同样的路径居然秒通了!同样的Nginx配置,换个后端就好使?这到底是Nginx抽风了,还是Tomcat和Gateway有仇?。变量本质带不带端口给后端的信息$http_host客户端原始Host可能带“客户端认为你是这个地址”
2025-12-23 09:13:29
528
原创 告别繁琐!MapStruct-Plus 让对象映射效率飙升,这波操作太香了!
只需在源对象上添加@AutoMapper(target = 目标类.class),无需手动写 Mapper 接口!// 源对象:UserInfo@Data@Builder@AutoMapper(target = UserInfoDTO.class) // 指定转换目标// 目标对象:UserInfoDTO@Data@Builder遇到特殊转换(如密码加解密),可自定义转换规则。@Component// 明文 → 密文(UserInfo → UserInfoDTO 时用)
2025-12-09 09:10:26
705
原创 告别硬编码!Spring Boot 配置绑定原来可以这么玩,优雅到飞起!
Data如果需要对配置项添加描述、默认值或校验规则,可以手动创建文件(放在"description": "短信服务的AccessKeyId",},"description": "短信服务的地域ID",这个文件会与自动生成的元数据合并,优先级更高,适合添加业务相关的说明。从遗留项目的手动Properties绑定,到Spring Boot的,看似只是换了一种写法,实则是从"面向过程"到"面向框架"的思维转变。改造的工作量很小,但带来的收益却很明显:更少的bug、更高的效率、更清晰的代码。
2025-11-25 09:14:47
730
原创 Kafka 租户隔离全攻略:五种生产级方案实战与选型指南
最近公司业务线面临一个棘手问题:核心消息队列Kafka需要支持多租户数据隔离,但Kafka原生并未提供开箱即用的租户机制。想象一下:多个业务线数据混杂在同一个集群中,既可能导致资源抢占,又存在数据泄露风险。“我们在落地方案三时,曾遇到消费端过滤性能瓶颈,最终通过引入本地缓存+批量过滤优化,将单节点TPS提升了3倍。在消息头中添加租户标签,消费端根据标签过滤数据,我们团队最终落地的正是此方案!通过Kafka自带的ACL机制为每个租户分配独立认证信息,实现"逻辑隔离"。),本质靠规范而非技术隔离。
2025-11-04 09:24:03
933
原创 Spring Boot Map 依赖注入血坑实录:为什么我的 Map 总是少了一半数据?
当时以为是Bean加载顺序问题,折腾了两天debug,甚至被AI误导走了弯路,最后才发现——始终无法获取完整的实例,明明配置了多个模板,打印出来却只有默认的一个!开发中总有一些「反直觉」的框架设计,让你debug到怀疑人生。:彻底掌握控制权,适合复杂场景下的精准调用。优先按名称匹配,不再触发「类型收集」机制。难道Spring会「偷」我的Map数据?按类型注入,但需排除默认收集逻辑。
2025-10-24 09:22:27
621
原创 熬夜三天!SpringCloud Gateway 动态路由失效,背后黑手竟是它……
在微服务体系里,SpringCloud Gateway 作为流量调度的核心组件,其路由配置的稳定性,直接关系到整个系统能否正常运转。之前,我们团队负责的项目借助 Apollo 配置中心,构建起一套动态路由机制。代码源自官方范例(),长期稳定运行,为业务发展筑牢了技术根基。然而,平静的工作节奏被一次突发状况打破。新配置到 Apollo 的路由,仿佛被施了魔法,完全无法生效。系统报错信息不断,业务流程陷入混乱,线上服务随时可能崩溃。团队成员紧急集结,一场与时间赛跑的 “排雷” 行动迅速打响。
2025-09-23 09:27:13
440
原创 SonarQube 升级 2025.1 后,JDK8 项目扫描翻车?看这篇就稳了!
这篇主要讲了 SonarQube 和项目 JDK 版本不兼容,导致扫描失败的修复办法。其实官网也给了个解法,大概意思是:在某些情况下,要是分析的项目构建用的 Java 版本和执行分析时的 Java 版本不一样,像用 Java 17 运行分析,项目构建用 Java 11 或更早版本,就得手动设置sonar.java.jdkHome属性,指向合适的 JDK。
2025-09-09 09:28:18
595
原创 搞不定 Docker 部署 SeaTunnel?这些坑与解法你得知道!
SeaTunnel 作为国人主导的 Apache 开源项目,其文档和代码相对易于理解。然而,在实际部署过程中,确实会遇到各种复杂问题。上述提及的诸多坑点,其实在官方文档中均能找到解决思路,只是目前官方文档的组织可能稍显繁杂,需要读者仔细研读、深度挖掘。为方便大家参考,这里附上完整的 docker-compose 配置,希望能助力各位在 SeaTunnel 的部署征程中一帆风顺。services:master:volumes:# 挂载日志配置文件。
2025-08-26 09:03:17
1140
原创 从 “JSON 字段适配噩梦” 到 “Spring Boot 优雅解决方案”,你只差这一篇
通过@JsonDeserialize和@JsonSerialize注解结合自定义序列化和反序列化类,实现更灵活的处理,就像是为你的数据处理量身定制一套专属的 “战甲”,无往而不利。@Override// 获取JSON对象中未被User类中属性映射的字段@Override@Data@Test@DisplayName("测试-通过自定义反序列化+@JsonDeserialize处理JSON对象中未被Java类中属性映射的字段")"age": 18"""
2025-08-12 09:14:53
749
原创 干货来袭!5 分钟学会快速实现责任链,效率直接拉满!
commons-chain 就像是一位贴心的开发伙伴,在实现责任链的道路上,它能够为我们节省大量的时间和精力,让我们的开发工作变得更加轻松高效。尽管它已经进入维护期,但其中蕴含的设计思想和编程技巧依然值得我们深入学习和借鉴。
2025-07-29 09:27:58
963
原创 高效解析 Swagger,轻松优化接口平台发布流程,你还不知道?
使用 swagger-parse 解析 Swagger 确实能够让我们的工作事半功倍,但在实际操作中,仍然会遇到一些繁琐的细节。
2025-07-08 09:26:15
1106
原创 一文吃透!Spring Boot 项目请求日志记录,这几招你绝对不能错过!
本文详细介绍了 Spring Boot 内置的三种记录请求日志的方式,这些方法不仅简单易用,而且功能强大,大大提高了我们的开发效率。如果想要将日志记录到存储介质,个人比较推荐使用 ServletRequestHandledEvent 这种方式,它的配置相对简单,并且能够满足大多数场景的需求。当然,如果有定制化的需求,比如需要记录响应体,那么开头介绍的那三种传统方式也是不错的选择,它们能够提供更灵活的扩展能力。但无论如何,利用好 Spring Boot 提供的这些内置功能,能够让我们的开发工作事半功倍。
2025-06-24 09:06:40
907
原创 深度揭秘!Java Class 文件加密终极指南,有效保护你的核心代码
在某次聚餐中,朋友聊起他接了一个私单,他不想把他的核心代码开放出去,但又想项目能正常运行。翻译成技术术语就是他想对源码进行混淆或者加密。之前我写过一篇文章聊聊如何进行代码混淆。今天我们来聊另一个的话题,聊聊如何利用ClassFinal对代码进行加密。本文介绍了如何利用ClassFinal对代码进行加密。这个工具类在使用上可以说非常简单,不过有点可惜,这个项目目前已经不再维护,有其他网友基于ClassFinal进行改造,开源了class-winter,感兴趣的朋友可以查看如下网址。
2025-06-10 09:10:15
1033
原创 超详细!Spring Boot 项目借助 PF4J 实现插件动态加载,打造灵活可扩展架构
本文详细讲解了 PF4J 的常用功能以及如何与 Spring Boot 进行整合,帮助开发者实现插件的动态加载和灵活扩展。虽然 PF4J 已经是一个非常强大的插件框架,但它仍有一些优化点,比如与 Spring 集成时,如果用到 AOP,它可能不会生效,因为它注入 Spring 的方式没有走 Spring 的完整生命周期。此外,它的插件查找是基于文件的,如果需要基于 URL 查找,还需要进行扩展。而这些扩展在文末链接的 demo 中都有进行实现,感兴趣的朋友可以深入研究。
2025-05-27 09:49:53
1700
原创 超详细!Spring Boot 项目与 Togglz 深度整合实现特性开关全攻略
通过上述详细的步骤,我们成功地在 Spring Boot 项目中与 Togglz 进行了整合,实现了特性开关的功能。Togglz 为我们提供了一种灵活、高效的功能管理方式,能够帮助我们更好地应对软件开发过程中的各种挑战。本文只是对 Togglz 的一个入门介绍,如果大家对 Togglz 的源码感兴趣,还可以深入研究,其中的一些实现思路和技巧可以为我们的日常开发带来很多启发。
2025-05-13 09:14:40
789
原创 AI 爆火背后,Spring Boot SSE 推送该怎么学?
本文基于 WebFlux,详细介绍了 Spring Boot 实现 SSE 推送的多种方法。若想基于 WebMVC 实现,可使用org.springframework.web.servlet.mvc.method.annotation.SseEmitter。
2025-04-29 09:20:13
1259
原创 深度揭秘!硬件负载均衡配置业务健康检测 400 状态码问题的惊险排查之旅
回顾整个排查过程,其实我们一开始就注意到云厂商 ELB 的日志中,抓到的请求是 “http:///actuator/health/ping”,当时我们也曾怀疑过请求头是否缺失。但由于 springcloud gateway 在同样的配置下没有出现问题,这一现象成功转移了我们的排查方向。现在看来,这是因为 springcloud gateway 底层使用的是 netty 容器,与 springboot 默认的 tomcat 容器对 host 的处理方式存在差异。
2025-04-15 09:11:26
737
原创 必看!Spring Boot 项目新老版本 Controller 低侵入式切换实战秘籍
该项目在进行迁移重构时,考虑到大部分业务逻辑雷同,为了降低系统复杂度和维护成本,并没有新开服务,而是在原来的项目中添加新的 Controller。这就意味着所有的操作都要在同一个 JVM 进程项目的前提下进行,如何在不影响现有系统正常运行的情况下,实现新老版本 Controller 的低侵入式切换,成为了摆在开发团队面前的一道难题。这是业务部门研发团队最初采用的实现方案,通过自定义注解和 AOP(面向切面编程)的方式,实现了新老版本 Controller 的切换。1、自定义注解。
2025-04-01 09:05:21
760
原创 踩坑实录!Spring AOP切点表达式失效之谜及高效修复攻略
本次问题的解决过程源于团队成员的一次求助,起初我也一时摸不着头脑,直到留意到注解是添加在类上而非方法上,才恍然大悟。这次小小的 “坑” 让我们深刻认识到了切点表达式的细节和作用域的重要性。希望通过分享这次经历,能帮助更多的开发者在使用 Spring AOP 时少走弯路,避免陷入同样的困境。如果你对切点表达式的详细使用和更多高级特性感兴趣,不妨参考这篇优质博文,相信你能从中获取更多有价值的信息。
2025-03-25 09:27:48
852
原创 超详细!Spring Boot项目结合Maven Profile实现多环境切换,轻松搞定开发部署难题
Spring Boot Profile 是一种配置机制,它允许我们在同一个应用程序中针对不同的环境(如开发、测试和生产环境)设置不同的配置。这意味着我们可以根据环境的需求,灵活地加载特定的配置,让应用程序在不同环境下都能完美运行。这些配置通常存储在以application-{profile}.yml或application-{profile}.properties命名的文件中,比如application-dev.yml就是专门用于开发环境的配置文件。
2025-03-04 09:36:09
1367
原创 深度揭秘:Java 应用程序中实现数据库读写分离的高效策略与实战
这种方式通过自定义数据源路由和 mybatis 拦截器,实现根据 SQL 语句类型自动切换主从数据源,从而达到读写分离的效果。1、引入依赖</</</</配置数据源3、定义数据源枚举MASTER,SLAVE线程级数据源上下文管理动态路由数据源@Slf4j@Overridelog.info("DynamicRoutingDataSource 切换数据源到从库");log.info("DynamicRoutingDataSource 切换数据源到主库");
2025-02-18 09:29:07
969
原创 如何以低侵入方式获取业务系统使用的二方包版本号
获取业务系统使用的二方包版本号这个需求,在大多数业务开发场景中可能并不常见,但在开发基础组件或进行依赖管理时却非常重要。通过本文介绍的埋点上报方式,我们可以以较低的侵入性获取到业务方使用的二方包及其版本号。在实施过程中,需要注意以下几点:首先,上报操作一定要使用异步方式,避免对业务造成堵塞;其次,如果使用自定义 Maven 插件进行上报,要注意类加载器的问题,因为 Maven 插件的类加载器是自定义类加载器;
2025-02-11 09:16:29
670
原创 记一次springcloud gateway记录日志响应结果乱码问题
最近团队的网关日志发现有不少响应结果记录,出现形如下的乱码��(�钍/�,}�����]O7L|���ŲƧ�MϦnP�Q*K�)*�+���QJ-*�/r�O���{�@8� ��一开始感觉是不是中文乱码,但是后面发现有些日志不是中文,也是乱码,而有些记录的日志又能正常显示。于是搜索了一圈,在在这篇文章找到的思路以及解决答案。综上解决因Accept-Encoding引起的乱码方式有2种,一种是直接移除Accept-Encoding,告诉服务端不要对响应数据进行压缩,直接返回未压缩数据。
2025-01-14 10:22:04
903
原创 聊聊springboot项目如何优雅进行数据校验
在我们日常开发中,数据校验是我们绕不开的一环,而用Spring Validation进行校验,基本上成为我们进行数据校验的首选组件,今天的话题就来聊下如何利用Spring Validation进行优雅校验Spring框架的验证功能主要基于JSR 303/JSR 349 Bean Validation规范,这是一套标准的Java注解驱动的数据验证API。Spring提供了对Bean Validation的深度集成,使得在Web应用中进行数据校验变得既强大又简便。
2024-12-31 10:19:03
1099
原创 聊聊在应用层面实现内网穿透功能是否可行
最近接手了供方开发的网关项目,交接文档里面有个内网穿透的功能,一下子就吸引的我的目光。实现这个内网穿透的背景是业务部门有些业务是部署在公网,这些公网的业务想访问内网的业务,但因为公网和内网没打通,导致无法访问,为了解决这个问题,供方在网关上做了一个内网穿透功能不管是通过消息队列还是通过反向代理来实现内网穿透,本质上就是多加一层来解决,就是应了一句话,没有什么是加一层中间层不能解决的,如果有,那就再加一层。
2024-12-10 09:32:27
418
原创 聊聊如何利用kafka实现请求-响应模式
在大多数场景中,我们经常使用kafka来做发布-订阅,在发布-订阅模型中,消息一旦发送就不再追踪后续处理,但在某些业务场景下,我们希望在发送消息后等待一个响应,然后根据这个响应来做我们后续的操作。在这种请求-响应模式,我们就可以利用spring kafka的ReplyingKafkaTemplate来实现ReplyingKafkaTemplate 是 Spring Kafka 中的一个高级特性,专门用于处理 Kafka 中的请求/响应模式。它允许你发送一个消息到 Kafka,并等待一个响应。
2024-12-03 10:35:56
910
原创 聊聊springboot项目中使用jackson的一些小技巧
在我们前后端联调时,很经常以json作为数据的交互格式,今天我们就来聊聊在开发springboot项目中,使用jackson进行数据渲染一些小技巧本文介绍枚举和json转换、long精度问题、数据脱敏三种我们日常开发比较常用的场景,但不知道大家发现没,这三种场景本质上都是通过json的序列化和反序列化实现,因此我们可以通过定制全局json序列化、反序列化器来实现。核心代码如下@Bean。
2024-11-19 10:30:43
996
原创 聊聊我们那些年用过的表达式引擎组件
我们在设计一些表单或者流程引擎时,可能我们会设计各种各样的表达式或者规则,我们通过各种表达式或者规则来实现我们的业务流转。今天就来盘点一下我们经常会使用到的表达式引擎本文介绍了市面比较常用的表达式引擎组件,而这些引擎基本上都可以用hutool提供的表达式门面实现,hutool确实在工具类这方面做得很好,基本上我们日常会用到的工具,它大部分都涵盖到。最后文末demo链接,也提供了跟spring整合的表达引擎聚合实现,大家感兴趣也可以看看。
2024-11-12 10:41:56
1156
原创 聊聊spring项目如何根据事件条件进行事件分发
spring的事件驱动模型,想必大家都比较熟,今天就来水一期,如何使用事件条件来进行事件触发。直接上示例看完也许有朋友会说,我直接在监听类方法里,写if-else也可以达到效果啊,为啥那么麻烦。如果业务没那么复杂的话,可以这么做,但是我们本身使用事件就是为了解耦,如果在事件监听里面写一堆if-else,一来职责不够单一,二来我们更提倡对修改关闭,对扩展开放。
2024-10-29 10:16:51
482
原创 聊聊如何优雅替换第三方提供的spring bean
前阵子业务部门接手供方的项目过来运维,在这个项目中,供方提供了一个springboot starter,但这个starter不满足业务部门需求的,业务部门的研发本想基于这个starter进行扩展,但发现其中有个核心类,用了 @Primary注解,示例形如下@Bean@Primary这样导致他们无法使用他们自定义的类,于是业务部门就找上了我们部门,看我们这边有没有什么法子,今天就来聊聊这个话题,如何优雅的替换第三方提供的spring bean。
2024-10-22 10:13:20
823
原创 聊聊如何实现一个特别的责任链
什么是责任链责任链是一种设计模式,它让多个对象有机会处理同一个请求,这些对象形成一个链。请求从链的一端开始,逐个传递给链上的对象,直到某个对象处理它或者请求未被处理。这样,发送请求者无需知道哪个对象会处理,实现了发送者与接收者的解耦,增加了系统的灵活性责任链的常用场景权限与认证系统:在登录认证、权限验证流程中,不同的处理者可以检查用户名密码、验证权限级别、处理单点登录等。请求(如访问资源)沿着责任链传递,直到找到合适的处理器来授权或拒绝访问。日志记录与错误处理。
2024-10-15 09:24:44
730
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅