惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
G
Google Developers Blog
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
F
Full Disclosure
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News
酷 壳 – CoolShell
酷 壳 – CoolShell
Recent Announcements
Recent Announcements
Help Net Security
Help Net Security
The Hacker News
The Hacker News
IT之家
IT之家
Y
Y Combinator Blog
Martin Fowler
Martin Fowler
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
V
Visual Studio Blog
博客园 - 聂微东
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
Security Archives - TechRepublic
Security Archives - TechRepublic
Simon Willison's Weblog
Simon Willison's Weblog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Last Week in AI
Last Week in AI
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
Google DeepMind News
Google DeepMind News
Cloudbric
Cloudbric
N
News | PayPal Newsroom
A
About on SuperTechFans
S
Schneier on Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Hugging Face - Blog
Hugging Face - Blog
M
MIT News - Artificial intelligence
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
雷峰网
雷峰网
T
The Exploit Database - CXSecurity.com
罗磊的独立博客
K
Kaspersky official blog
The Cloudflare Blog
I
Intezer

程序员

V2EX 看到讨论"跨域"的帖子,那个她好像回来了 codex 今天真的是不稳定呀。 火山方舟 Coding Plan 慎买 刚问了大家 openclaw 和 hermes 在什么机器上面玩,求推荐一个机器 GPT-image-2 生成 AI 图片防伪有感 codex pro 5 小时限制已经严重缩水 逆天 Antigravity 动态 JSON 序列化对强类型语言很难吗? 自建了 GPT Coding Plan,遇到了定价问题,请教大家 大家都是在什么设备上玩 openclaw 以及 hermes 的呀? 软考还有一个月就考试了,你们学习了吗? 大伙用 AI 会考虑在 user scope 的 CLAUDE.md/AGENTS.md 里交代 AI 说中文吗 我发现程序员这个群体很大部分其实挺抠的 最近使用 cc 总会莫名其妙的返工, codex 不会 目前体验最好的远程 vibe 工具 想知道大佬们抓包遇到 ssl pinning 都是咋优雅的 解决的? - V2EX 工业软件的大佬们是怎么 vibe coding 的 - V2EX 最近 chrome 是不是有 bug 啊,一搜索就卡住 - V2EX 分布式异步系统在 vibe coding 下的困境 PHP Native AOT 编译器,支持将 PHP 代码编译为可执行文件,运算性能提高 150 倍 没想到 2026 年,还要浪费大量时间在跨域问题上 - V2EX DeepSeek V4 这周会出吗? 中转站正式试营 欢迎试用 不掺不假 小米 mimo 升级 v2.5,并且重置了额度 Jenkins, SCM 轮询完全不工作是啥问题啊 赛博斗蛐蛐, AI 模型的简单对比(白嫖版) 使用中转站要擦亮眼睛!不说别的,倍率计算 充值好乱。 买了火山的 Coding Plan 测试得出计费模式 给我的 AI 生成了简历和状态卡, 大家帮忙看下 Ta 能找到啥样的 腾讯云太不要脸了, token plan 上 glm5.1 和 minimax-m2.7,但是 coding plan 不上 - V2EX 目前自建梯子最强的 anytls 协议不是不不更新了? 刚发现 WSL2 可以通过 virtiofs 访问 NTFS 分区, IO 速度明显提升 v2board 还是其它面板更适合小团伙使用? 现在 AI 来了,如果有天不需要程序员? gpt-image-2 太顶了 你们 vibe 会让模型先输出方案来审核吗? GLM Coding Plan 调整老套餐并停止自动续订,受影响用户获赠 2 个月新套餐权益 为了浏览在线文档的时候能自定义高亮, Vibe 了一个网页高亮标记的工具 从 2 月开始用 Opus 4.6,到这几天切到 4.7,一些感悟和困惑 Github Copilot 停售之后还能买什么 收集了一下市面上常见的 Token Plan,可以给到大家一点参考 这个生图太牛了 中国的算力缺口这么大嘛?看到 2025 华为昇腾出货 81 万块,又看到各家 coding plan 不是停售就是限流 做 OPC 太难了,天天焦虑 阿里云 Coding Plan 增加动态限流,频繁暂停无法使用 马斯克 600 亿美元收购 Cursor codex 开始灰度 GPT 5.5 了 大家是如何使用 codex gpt-image-2 生图确实很顶啊,附带几张生成效果。 codex 的风评似乎在超过 Claude code? 智谱 GLM 宣布停止续订无周限额的老套餐 如何实现自我进化的 AI 的 Skills? 智谱(GLM)果然学习了阿里, 强制关闭了老用户套餐的自动续费 各位公司有除了智能客服外真正落地的 AI 应用吗? 热烈欢迎火山 Coding Plan 加入 GLM5.1 Kimi2.6 MiniMax2.7 阵容 请教大佬: claude API token 太烧钱了, minmax 还要兑换码,有没有合适的中转方案 开发一个面向普通用户(非程序员)的 Agent 软件,支持 skills、定时任务、对话功能,主要客户群体使用 Windows。感觉像是一个带前端的 Hermes,但是 Hermes 在 Windows 下运行不太友好,不适合非开发人员。 grok XAI 开始限制免费用户访问次数了吗? openspec 怎么配合 superpowers 使用? 阿里云的 coding plan 莫名奇妙被冻结了 程序员如何学习 ui 审美 开源了一个 AI Agent 认证工具 sig —— 让 AI Agent 安全访问外部系统 Vibe Coding 时代,该如何快速搭建一个 CRUD 平台? 感觉大多数的 coding plan 都是被龙虾薅死的。 有没有一起拼中转站的呀,找到一个中转站用了段时间感觉比较靠谱 搭个 AI 中转玩玩 Zeabur + Neon 50 块以内跑通 Coinepay:一张不能用的卡,扣了我 5 个月月费 Gemini in Chrome 支持日本了,为什么我的不生效? 跳板机/内网穿透方案,如何降低远程访问校内服务器延时? 现在有没有什么好的 AI 图片生成 3D 模型的方案? 关于科研 ai 作图 为什么现在 AI SDK 默认不支持异步? 建议 V2EX 加入一个 Ai App 或者 Vibe Coding 模块,把一堆 Ai 生成的产品都丢进去。 如果没用 coding plan 套餐了,再继续自费上班是不是就太傻了 AI 太烧钱了,有什么好的大模型组合方案? 阿里云百炼这波开始割韭菜了,下架 coding plan,改头换面 token plan 最新,腾讯云和阿里云 coding plan 购买页面均已下架,换成了 token plan 阿里云 CodingPlan 彻底没了,新上了 TokenPlan 大家看到 antigravity 那个配额监视器的广告了没? 真心发问,想学后端需要学啥? AI-Powered Log Analysis Tool - Pangu RCA 想自己写一个 code agent 玩玩,有什么开源项目可以参考吗? 腾讯云 Coding Plan 下架了 现在还有哪一个国产 Coding Plan 能买到吗? 106 行业短信签名申请新规范出台, 5 月 1 日起生效 最近上线了一个开发了半年的 shopify SAAS AI 就像那渣男渣女,平时哄着你温柔小意,关键时刻就坑你一波大的 大家在开发智能体时,都是怎么写系统提示词的? 现在大模型国内外直连越来越难买或拼车了,想试试中转站,大家有没什么推荐呀 一个人写了大半年 Android App,聊聊过程中的一些取舍,第二篇 智谱 coding plan 的使用 token 限制是多少? cli-proxy-api + 中转站领的鸡蛋 = 大模型免费用是否可行? gpt coding plan 一天试用(GPT 5.3codex 和 gpt 5.4) 大家用 AI 是订阅制多还是 API 按量付费多? 我用 AI 写了一个游戏,我发现我不想看代码,也看不懂代码了 AI 代码后面怎么维护,心智负担太大了 中年人爱上 AI 编程,就像爱上钓鱼 每月 AI 支出都超过生活费了 1000 行 rust 实现一个类似于 pytorch 的轻量级自动微分库
支付中台系统,基于 jeepay 重构了 2 天,目标是做企业部署发行版遇到的问题分享
5wunian · 2026-05-22 · via 程序员

Spring Boot 3.x 循环依赖实战:从 allow-circular-references 到纯 DAG ,一个支付系统的重构之旅

项目背景:Jeepay 计全支付,Spring Boot 3.3.7 + MyBatis-Plus + Vue 3 ,多模块 Maven 项目。

  1. 前端集成引发的连锁反应

原本前后端分离部署( Nginx + 独立前端容器),想把前端 dist 直接打进 JAR 简化部署。几个坑:

  • Vue SPA 路由 fallback:Spring Boot 3.x 默认用 PathPatternParser ,addViewControllers 不支持 {spring:\w+} 正则。最终用 @Order(HIGHEST_PRECEDENCE) 的 Filter 拦截无后缀路径 forward 到 index.html 。
  • Spring Security 6 ignoring() 不生效:日志明确警告 You are asking Spring Security to ignore... This is not recommended 。改为 authorizeHttpRequests().permitAll() 才生效。
  • 字体文件 401:Security 的静态资源豁免模式漏了 .woff/.woff2/.ttf/.eot 。
  • 前端构建 API baseURL 双层 /api/api/:VITE_API_BASE_URL=/api 拼接 url: '/api/xxx' → /api/api/xxx 。改为空值。
  1. 发行包瘦身:260MB → 120MB

三个模块的 fat JAR 共 288MB ,其中 130 个公共依赖(72MB) 重复存储 3 次。方案:

  • 去掉未用依赖:jaxb-api(零 import)、mysql-connector-j(纯配置模块不需要)、activemq(仅编译,运行时用 RabbitMQ)
  • 共享 lib:maven-dependency-plugin 收集所有传递依赖到 lib/(自动去重 182 个),antrun 解压 fat JAR 提取 BOOT-INF/classes/ 打包为 flat thin JAR(1.7-5MB)
  • 启动方式:从 java -jar fat.jar 改为 java -cp "lib/*:apps/app.jar" MainClass
  1. 循环依赖根治

去掉 allow-circular-references: true 后直接启动,Spring Boot 3.x 严格检测报出完整依赖链:

┌─────┐ │ SysConfigService 自引用 (删 @Autowired self ,直接用 this) ↑ ↓ │ IsvInfoService 自引用 (同上)

修复策略:

  • 自引用:删字段,改用 this.xxx()
  • 三角循环( PayInterfaceConfigService ↔ MchAppService/MchInfoService ):PayInterfaceConfigService.selectAllPayIfConfigListByAppId() 内部反向调用了 mchAppService.getById() 和 mchInfoService.getById()——这些只是 MyBatis-Plus 的简单 CRUD 委托。将这两个查询上移到 Controller 层,Service 方法改为接收 MchInfo 参数,依赖方向恢复。
  • 两两循环:MchInfoService 注入 IsvInfoService 只是为了 getById(),IsvInfoService 注入 MchInfoService 只是为了 count()。直接替换为对应的 Mapper 注入,因为 MyBatis-Plus 的 ServiceImpl.getById() 底层就是 BaseMapper.selectById()。

关键认知:

  1. 依赖只能单向流动。找到"谁在反向调用"就是断环点。

  2. 大多数循环依赖是 CRUD 委托导致的。ServiceImpl 包装 BaseMapper ,循环往往是因为 A 需要 B 的 getById(),B 需要 A 的 count()——直接用 Mapper 替代 Service 注入,不改任何业务逻辑。

  3. 不要用 @Lazy 、不要用 allow-circular-references ,这些都是掩耳盗铃。Spring Boot 3.x 默认禁止循环是为了逼你写出正确的分层。

  4. 最终效果

┌───────────────────────────┬────────┬───────────────┐ │ 指标 │ 修复前 │ 修复后 │ ├───────────────────────────┼────────┼───────────────┤ │ 发行包大小 │ 260 MB │ 120 MB (-54%) │ ├───────────────────────────┼────────┼───────────────┤ │ 循环依赖 │ 5 个 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ allow-circular-references │ true │ 已移除 │ ├───────────────────────────┼────────┼───────────────┤ │ @Lazy │ 2 处 │ 0 │ ├───────────────────────────┼────────┼───────────────┤ │ 启动时间 │ ~8s │ ~4s │ └───────────────────────────┴────────┴───────────────┘

  • 重构
  • 依赖
  • 优化

    9 条回复    2026-05-23 11:14:12 +08:00

    5wunian

    1

    5wunian  

    OP

       4 天前

    还增加了 openlist 的 s3 存储支持。

    5wunian

    3

    5wunian  

    OP

       4 天前

    从开源建立的 jeepay ,到商业片的发行包,中间有一大堆需要配置配置的东西。为此做了大量的自动化部署工具脚本。

    5wunian

    4

    5wunian  

    OP

       4 天前

    目前已经完成了一个应用接入支付。有需要接入支付的,可以联系,提供技术支持。

    5wunian

    5

    5wunian  

    OP

       4 天前

    已经完成了支付备案,网站备案,可以完成全链路的动作。

    Mandyer

    6

    Mandyer      4 天前

    YW9odW4yMDE4QGdtYWlsLmNvbQ==
    楼主来一份,谢谢

    5wunian

    9

    5wunian  

    OP

       3 天前

    将生产环境配置和 local 环境打包方案更新了一下。毕竟 java 上部署方案动不动就是几百兆。一个包动不动就是几十兆。这就是源头上 java 的差距离。没有把未使用的代码干掉。目前只是 lib 包共享,就直接降了一倍的分发包体积。