自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Boot 插件化架构探索:如何实现可插拔的业务模块?

Spring Boot 的插件化架构,不仅仅是技术炫技,而是一种应对复杂业务系统演化的必然选择。在小型项目中,模块化就足够;在中大型系统中,PF4J 等框架能带来真正的“即插即用”体验;而在超大型多租户系统中,插件化甚至成为产品核心竞争力。插件化的本质,不是“分拆代码”,而是“分离变化”—— 让可变的部分独立、稳定的部分持久,从而让系统在复杂中依然保持优雅。

2025-10-06 08:00:00 1079

原创 Spring Boot 与 ElasticSearch 集成:索引管理、分页与查询优化

ElasticSearch 是一把双刃剑:性能强大,但稍不注意就可能掉坑。理解它的底层机制(分片、倒排索引、缓存)后,才能真正写出稳定、可维护的搜索服务。Spring Boot + ES 的组合不只是“能用”,更要“好用”。而当你掌握了索引管理、分页策略与查询优化后,就能让搜索功能既快又准,轻松应对生产环境的高并发挑战。

2025-10-05 22:45:05 684

原创 Spring Boot 与 WebSocket:长连接掉线、心跳与消息广播的问题

问题原因解决方案长连接掉线反向代理超时、无心跳定时心跳 + Nginx假死连接客户端断网未检测定期ping/pong集群广播失败Session 不共享内存泄漏Session 未清理定期检测 + 主动关闭兼容性差浏览器/代理不支持使用 SockJS/STOMPWebSocket 并不是“配置一下就能用”的黑盒技术。一旦连接长期存在,它就和数据库连接池一样,需要监控、清理、心跳、限流。在 Spring Boot 项目中,

2025-10-04 20:45:00 1367

原创 Spring Boot 原生镜像踩坑:GraalVM 构建 Native Image 的经验分享

是由 GraalVM 提供的一种技术,可以将 Java 应用直接编译为机器码的可执行文件(而不是 .jar)。这意味着运行时不需要 JVM,也不会有 JIT 编译延迟。在 Spring Boot 3.x 中,官方提供了完整的支持链路:优点缺点启动速度极快构建时间长内存占用低调试困难无需 JVM库兼容性差部署轻量开发迭代慢从实践来看,Native Image 更像是一把“双刃剑”。在某些场景下,它能极大提升启动体验和部署效率;但在另一些情况下,它可能会带来新的维护负担。

2025-10-04 16:08:14 943

原创 Spring Boot 与 GraphQL 集成:为什么查询比 REST 更复杂?

在下新建): Userid: ID!id: ID!GraphQL 的出现解决了 REST 的一部分痛点,但它并不是银弹。在 Spring Boot 中集成 GraphQL,你会收获:更灵活的数据获取;更优雅的前端体验。但同时,你也要面对:更陡峭的学习曲线;N+1 查询的性能陷阱;Schema 设计与演进的复杂度;调试和监控的挑战。如果你的项目前端需求变化频繁,接口聚合需求强烈,那么 GraphQL 值得尝试;但如果只是常规的 CRUD 系统,REST 依旧是更简单、更稳定的选择。

2025-10-04 12:00:00 1051

原创 Spring Boot 国际化进阶:MessageSource 的多语言维护与热更新

Spring Boot 默认的国际化支持简单易用,但在生产环境下不够灵活。类似,的热更新能力依赖正确实现。(定时刷新 properties 文件);自定义数据库驱动的 MessageSource(后台可维护);Redis/消息队列配合分布式缓存刷新。一句话总结: 👉基础用法满足演示,进阶方案才适合生产。Spring Boot 国际化不仅仅是,而是一个完整的文案维护与更新体系。

2025-10-03 20:30:00 1050

原创 Spring Boot 优雅停机指南:@PreDestroy 为什么不生效?

不再接收新请求(停止负载均衡器转发、关闭端口监听)。等待正在处理的请求完成(避免直接中断)。释放资源(关闭线程池、数据库连接、消息订阅等)。清理缓存或持久化数据(防止数据丢失)。而就是 Spring 提供的钩子方法@ComponentSystem.out.println("释放资源...");理论上,当应用关闭时,这个方法应该被执行。但为什么很多时候它“不起作用”?只会调用 Bean 的销毁方法,不会自动关闭你自己创建的线程池。@Component// 必须手动调用👉常见坑:忘记在。

2025-10-03 15:19:50 1065

原创 Spring Boot 动态数据源实战:多库切换与读写分离的坑

Spring 的事务默认基于线程绑定。如果事务开启后切换数据源,可能仍然使用第一个数据源。解决办法保证在事务开始前就决定数据源。对读写分离的场景,尽量在 DAO 层切换,而不是 Service 层。Spring Boot 动态数据源在多租户、读写分离、分库分表等场景中非常常见,但坑点也不少:要用或现成的实现。注意事务与数据源切换的时机。连接池一定要分开配置。读写分离要避免脏读,核心业务强制走主库。多租户场景还要考虑缓存一致性。对于中小项目,推荐直接用 MyBatis-Plus 提供的。

2025-10-01 22:15:52 733

原创 Spring Boot API 版本管理:如何优雅支持 V1/V2/V3?

不要无限制增加版本一般最多同时维护 2~3 个版本。旧版本要设定下线计划,否则项目会被历史包袱拖死。文档和版本必须强绑定不要让前端去“猜”返回字段,一定要在 Swagger 或 API 文档里明确标注每个版本的差异。做好兼容性测试可以在 CI/CD 流程里加自动化测试,验证 V1/V2/V3 是否都能正常工作。与网关结合灰度发布新版本先放到部分用户,验证没问题后再全量上线。避免因为新版本 bug 一次性把所有客户端搞崩。Spring Boot 里做 API 版本管理,并没有唯一标准答案。路径加版本号。

2025-10-01 16:38:43 838

原创 Spring Boot 项目测试问题:MockMvc、Testcontainers 与单元测试的正确姿势

Controller 层用 MockMvc,保证接口逻辑可测、可控。数据库层用 Testcontainers,避免测试环境和生产环境不一致。遵循单元测试最佳实践,保证测试的覆盖率、可维护性和运行效率。当 MockMvc、Testcontainers 和合理的单测姿势结合起来,你的 Spring Boot 项目就会形成一个坚固的“防火墙”,大大降低线上翻车的概率。

2025-10-01 15:53:21 1263

原创 Spring Boot 与 MyBatis-Plus 常见问题:分页、批量更新与性能优化

分页确保注册分页插件;大表分页尽量用游标分页;count 查询可缓存或优化索引。批量更新避免 for 循环逐条更新;优先用或自定义 foreach。性能优化少用select *,明确字段;合理设计索引;避免 N+1 查询,多用 in 查询批量获取。MyBatis-Plus 已经解决了大部分通用问题,但在实际业务中:如果你遇到复杂多表查询,可能需要自己写 SQL,而不是依赖 MP 提供的 CRUD;在超大规模数据(亿级别)场景下,分页和批量操作还需要结合分库分表读写分离来优化;

2025-09-30 12:00:00 499

原创 Spring Cloud Security 踩坑实录:微服务下的安全防护策略

结合踩坑经验,可以总结出几个Spring Cloud Security 落地的最佳实践统一认证中心:避免每个服务单独校验,减少冗余配置。JWT + Gateway 校验:让 Gateway 成为安全入口,服务内部只解析用户信息。Feign Token 透传:统一封装,避免下游服务丢失身份。开发环境与生产环境隔离:调试时可以开启简单模式,但生产必须接入认证中心。关注版本差异:Spring Security 5.x 和 6.x 在配置上差异极大,迁移要谨慎。

2025-09-29 22:39:55 734

原创 为什么 Spring Boot 项目部署到服务器上总是报错?从本地到生产环境的差异

操作系统差异:文件名大小写、换行符、权限;配置文件差异:多环境 profile、数据库地址、编码格式;依赖与 JDK 差异:版本不一致、依赖冲突;网络与端口问题:端口占用、防火墙、安全组、CORS;日志与监控:路径错误、缺少监控;容器化差异:挂载、时区、端口映射。一个在本地跑通的项目,并不意味着上线就没问题。保持环境一致(开发、测试、生产尽量统一 JDK、配置、依赖);自动化部署(CI/CD,避免手工上传 jar 包);完善的日志与监控(出问题能第一时间发现和定位)。

2025-09-29 15:51:33 841

原创 JSON 序列化踩坑合集:为什么前端收到的数据格式总对不上?

Spring Boot 的 JSON 序列化问题,归根结底是Jackson 默认行为和前端预期不一致。常见坑点包括:Long 精度丢失 → 转成字符串时间格式混乱 → @JsonFormat 或全局配置懒加载无限递归 → @JsonIgnore / DTONull 值处理 → JsonInclude 配置BigDecimal 精度 → ToStringSerializer字段命名差异 → JsonProperty 或全局策略掌握这些方法,就能减少前后端沟通中的“序列化黑洞”。

2025-09-28 14:40:06 1470

原创 Spring Cloud 中的版本不兼容问题:从 Hoxton 到 202x 的迁移经验

版本匹配表必看:Spring Boot 与 Spring Cloud 必须严格对应。优先选择官方推荐组件:减少依赖废弃组件。测试环境分阶段升级:先搭建测试集群验证,再推广到生产。升级文档必读:Spring 官方的 Release Notes 提供了迁移指南。Spring Cloud 的版本升级是一场“阵痛”。从 Hoxton 到 202x,不仅是命名方式的变化,更是生态的一次大洗牌。

2025-09-27 23:21:18 970

原创 Spring Cloud OpenFeign 参数传递踩坑指南:GET、POST 到文件上传

这篇文章系统梳理了SpringCloud OpenFeign使用中的常见问题及解决方案。主要涵盖GET/POST请求参数传递失效、文件上传失败、Map/List参数异常、注解不一致等典型场景,并提供了排查思路和优化建议。文章强调正确使用注解、统一接口定义、合理配置超时重试等关键点,帮助开发者避免踩坑。适合使用Feign进行微服务调用的开发者参考,提升开发效率。

2025-09-26 17:42:42 1190

原创 Spring Cloud Bus 刷新配置失败?常见原因与排查思路

当你遇到Spring Cloud Bus 刷新配置失败接口可用性是否能正常调用?消息中间件:刷新事件是否进入队列?是否被消费?服务依赖:是否引入了?Bean 范围:是否添加了?配置中心:最新配置是否同步到所有服务?版本兼容:Spring Boot 与 Spring Cloud 版本是否匹配?不要滥用全局刷新,推荐根据服务粒度进行定向刷新。对敏感配置做好灰度刷新,避免一次性影响所有服务。配合 Spring Cloud Sleuth/Zipkin做链路追踪,能更快发现问题。在 CI/CD 中加入配置刷新自动化。

2025-09-25 17:09:24 1240

原创 从比特币到ChatGPT:区块链和AI的底层逻辑有何相似之处

区块链和人工智能,一个是建立信任的机器,一个是模拟智慧的机器。它们的出现告诉我们:在足够大的规模、数据和算力之下,复杂系统会展现出远超预期的能力。或许,在未来的某个时刻,区块链的去中心化机制和 AI 的智能推理会真正结合起来:一个无需中心机构却能智能运行的全球系统。这不仅会改变金融或知识传播,更可能重塑整个社会的运行方式。

2025-09-23 16:34:47 697

原创 为什么电脑要用二进制?一串0和1如何支撑整个互联网

选择二进制,并不是人类为了“偷懒”,而是计算机硬件发展的必然结果。二进制简洁、稳定、抗干扰,几乎完美契合了电子电路的物理特性。更重要的是,通过编码和抽象,0 与 1 的组合远比表面上看起来的更强大,它们能够构建数字、文字、图片、视频,乃至整个互联网。下次当你输入网址、点击发送消息或观看视频时,不妨想一想:你眼前的精彩世界,其实都源自那最简单的两种状态。正是这两种状态,塑造了我们今天的数字文明。

2025-09-22 23:16:41 936

原创 磁力链接的原理是什么?为什么不需要服务器也能下载

一句话总结:磁力链接 = 文件的唯一指纹(哈希) + P2P 下载网络(DHT/Tracker)。它之所以能在没有服务器的情况下完成下载,是因为:DHT 网络让每个节点都能参与信息共享文件被分片后可同时从多个人下载下载的人同时也是上传的人,形成一个去中心化生态下次再看到magnet:?开头的字符串时,你就知道,这其实是互联网去中心化精神的缩影。

2025-09-22 22:50:32 2412

原创 Spring Cloud Stream 消息丢失、重复消费?Kafka、RabbitMQ 使用避坑指南

欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode在分布式系统中,消息队列是微服务之间解耦与削峰填谷的关键工具。Spring Cloud Stream 提供了统一的编程模型,开发者不需要关心 Kafka 或 RabbitMQ 的底层 API,就能快速实现消息收发。但是,在实际项目中,消息丢失、重复消费几乎是家常便饭。很多同学上线后发现:明明发送了消息,消费者却没收到(消息丢失)消费者处理一次消息却触发了两次逻辑(重复消费)

2025-09-21 16:14:11 1098

原创 Spring Cloud Gateway 踩坑实录:限流、鉴权与跨域问题全解析

通过 AOP 或自定义逻辑实现更灵活的限流。

2025-09-21 16:07:11 1228

原创 微服务配置中心失效?深入解析 Nacos 与 Apollo 的常见坑

规范配置管理统一命名规则(namespace、group、dataId)。避免不同环境混用配置。动态刷新要谨慎对一些关键配置(如数据库地址),不要随便动态刷新,最好需要重启服务才能生效。对非关键参数(开关、限流阈值),可以安全地动态刷新。幂等性设计配置刷新逻辑要做到幂等,避免一次变更被重复执行。监控与告警对 Nacos、Apollo 配置中心本身做健康监控。一旦配置拉取失败,要能及时告警。权限与审计严格控制谁能改配置。生产环境配置必须经过审核流程。

2025-09-20 15:55:28 1352

原创 Feign 调用超时与失败重试:Spring Cloud 中的隐秘细节

Feign 为 Spring Cloud 提供了极其优雅的服务调用方式,但“优雅”的背后隐藏着不少陷阱:默认超时时间不合理,导致调用经常超时。自动重试机制在关键业务场景下可能酿成灾难。要想让 Feign 真正稳定可靠,就必须深入理解它的原理,并结合业务特点进行合理配置。

2025-09-20 15:49:42 1253

原创 Spring Cloud 微服务注册失败?Eureka、Nacos 常见问题与解决方案

配置检查: 大多数注册失败都是配置问题,启动前一定要核对。网络连通性: 本地调试容易忽视,实际部署时要确保服务能访问注册中心端口。心跳机制调优: Eureka、Nacos 都有心跳机制参数,合理调整可以减少“误下线”。版本兼容性: Spring Cloud 与 Spring Cloud Alibaba 每个版本都有严格匹配关系,否则容易出现莫名 bug。监控与告警: 在生产环境建议接入监控(Prometheus + Grafana),及时发现服务掉线问题。

2025-09-20 15:42:39 1076

原创 Spring Boot 与前端接口对接中的 JSON 序列化/反序列化问题全解析

JSON 序列化/反序列化问题看似琐碎,但在前后端分离项目中,是接口稳定性和数据一致性的关键。通过本文的解析,你可以系统掌握:字段映射问题日期时间序列化大数精度循环引用类型不匹配结合DTO 层 + 全局 ObjectMapper 配置 + 注解使用,基本可以避免大部分坑,让前后端接口对接更稳定、更安全。

2025-09-19 16:47:48 999

原创 Spring Boot 升级踩坑:从 2.x 到 3.x 迁移过程中的常见问题

Spring Boot 3.x 的升级不是一个“随手点升级”的小活儿,而是一次生态级别的迁移。Java 17 要求Jakarta 命名空间迁移第三方依赖兼容性如果你正在维护一个长期运行的 Spring Boot 2.x 项目,升级前一定要有详细的迁移计划与测试保障。一旦顺利迁移,你将获得更现代化的生态、更强的性能优化,以及与未来云原生场景更好的兼容性。

2025-09-19 15:17:44 1163

原创 Spring Boot 项目中的循环依赖问题:成因、解决与最佳实践

Bean A 依赖 Bean B,而 Bean B 又依赖 Bean A。在 Spring 容器实例化 Bean 的过程中,必须先创建依赖的对象。但如果依赖关系是“环形的”,Spring 就陷入了“先有鸡还是先有蛋”的困境。首选构造函数注入,但要避免环形依赖。构造函数注入能明确依赖关系,也方便单元测试。及时重构:当发现类之间耦合过高、相互依赖时,说明设计有问题。利用事件驱动或观察者模式,减少直接依赖。限制配置的使用场景,只作为临时过渡方案。引入领域建模思维。

2025-09-18 16:52:50 1161

原创 Spring Boot 项目打包后无法运行?可执行 jar/war 常见问题全总结

统一环境:开发、测试、生产保持一致的 JDK 版本。依赖管理:尽量使用 Spring Boot 官方 BOM(Bill of Materials)来统一依赖版本。区分 jar/war:提前确定部署方式,配置正确的依赖范围。持续集成:使用 CI/CD(如 GitHub Actions、Jenkins)自动化构建并测试打包后的可执行文件。容器化:推荐直接打包成 Docker 镜像,避免环境差异带来的问题。

2025-09-18 16:28:23 1152

原创 Spring Boot 在 CI/CD 流水线中的最佳实践:Maven、Docker 与 GitHub Actions

前言欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode前言在现代软件开发中,已经成为团队交付高质量应用的核心能力。对于 Java 开发者而言,Spring Boot 项目往往是后端的主体服务,而如何将其与以及有机结合,是每一个团队都需要认真考虑的问题。本文将通过实战经验,分享,从构建到发布,带你完整走一遍落地流程。一、为什么要给 Spring Boot 配置 CI/CD 流水线?:每次更新都要本地打包、上传服务器,效率低。

2025-09-17 16:15:27 1257

原创 从单体到云原生:Spring Boot 项目迁移 Kubernetes 的关键问题

前言欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode前言近年来,越来越多的企业正在将应用架构从传统单体系统迁移到云原生体系。而在 Java 生态中,Spring Boot 凭借其开发效率与生态优势,成为构建应用的首选框架。然而,将 Spring Boot 项目部署在 Kubernetes (K8s) 上并非“一键迁移”,在落地过程中会遇到不少关键问题与架构挑战。本文将结合实践经验,系统分析。一、为什么要从单体迁移到 Kubernetes?

2025-09-17 16:02:30 823

原创 Spring Boot 配置中心最佳实践:Nacos、Apollo 与动态刷新机制

前言欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode前言在微服务架构下,往往是一个被忽视却非常关键的问题。在单体应用时代,配置文件集中在本地中,改完重启即可;而在分布式系统中,数十上百个服务共同运行,如果配置需要统一变更,本地管理模式几乎无法满足需求。于是,应运而生。本文将结合实际经验,介绍,并重点分析与的对比,以及如何实现。一、为什么需要配置中心?

2025-09-17 15:55:12 963

原创 保姆级教程!VSCode 配置 Python 环境一篇就够

要不要我帮你加上几张示意图(比如安装 Python 时“勾选 Add to PATH”的截图、VSCode 插件安装界面),这样你的公众号文章会更直观、阅读体验更好?刚上大学,很多同学第一次接触编程,想用 Python 入门,却常常卡在环境配置上。安装完成后,打开 VSCode,你会发现它还是一个“空壳子”,还不能直接写 Python 代码。再次运行时,你的 Python 程序就会在一个独立的终端窗口中输出啦。如果返回你刚安装的 Python 版本,就说明配置成功啦。其他选项默认即可,点击下一步完成安装。

2025-09-16 23:20:58 4918

原创 Spring Boot 热部署没反应?DevTools 正确打开方式来了!

欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode前言在开发 Spring Boot 项目时,我们经常会修改代码后,希望应用能够“热更新”——也就是不需要重启整个服务,修改立即生效。这大大提高了开发效率。而 Spring Boot 官方推荐的方式是使用工具。然而很多开发者在集成 DevTools 后,发现热部署并没有如愿生效,甚至完全没有效果。为什么?本篇文章将深入剖析 DevTools 的工作原理,并教你一步一步排查和配置,让热部署真正“热”起来!

2025-09-16 18:00:00 910

原创 Spring Boot 项目的性能压测与调优:JMeter、Gatling 与实战经验

欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode前言在实际项目中,应用往往运行在高并发场景:电商秒杀、金融交易、在线教育等。如果没有经过合理的压测与调优,应用可能在大流量冲击下崩溃,导致服务不可用。本文将结合实战经验,介绍如何使用与对 Spring Boot 项目进行性能压测,并总结常见的性能瓶颈与优化策略。一、为什么 Spring Boot 项目需要性能压测?性能压测(Performance Testing)是指通过模拟实际用户请求,验证系统在。

2025-09-16 17:54:26 719

原创 Spring Boot 应用的灰度发布与版本回滚实践

欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode前言在企业级系统中,并不是一件简单的事情。特别是基于构建的微服务架构,应用版本更新频繁,直接全量替换往往存在较大风险:一旦新版本出现问题,可能会影响所有用户。紧急回滚若不当,可能会导致数据不一致。因此,与成为保障系统稳定性的重要手段。本文将结合 Spring Boot 应用,详细解析灰度发布与回滚的常见方案和最佳实践。一、为什么需要灰度发布?。:问题仅影响少部分用户,方便快速修复。

2025-09-16 13:36:39 648

原创 接口访问 403 或跨域问题?Spring Boot CORS 配置全解

Bean// 支持 cookie// 预检请求的缓存时间// 所有路径**适用场景:**Spring Security 比较复杂时,可搭配此方式优先拦截处理。四、如果你用了 Spring Security,还需要额外配置!Spring Security 默认是拦截所有请求的,包括 OPTIONS 请求,因此你必须显式放行跨域相关的 OPTIONS 请求,否则前端仍然无法访问。@Beanhttp.cors() // 启用 CORS.and()

2025-09-16 13:23:28 1054

原创 Spring Boot 容器化后的网络问题:Pod IP 变化、负载均衡与会话保持

欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode前言随着,越来越多的 Spring Boot 应用运行在容器编排环境中。容器化让部署与扩缩容变得更容易,但同时也带来了一些,导致直连服务不可用。不当,引发请求漂移或长连接中断。未配置,出现“用户频繁掉线”“登录状态丢失”的情况。本文将深入剖析这些问题产生的原因,并提供最佳实践方案。一、Pod IP 动态变化问题。

2025-09-16 13:19:05 653

原创 Spring Boot 项目启动白页/404?这些细节你可能忽略了

项目中根本没有定义任何 Controller,或者定义了 Controller 但未被 Spring 扫描到。访问的路径未与任何 Controller 中的对应。如果你自定义了错误页面但路径配置错误,可能导致白页或错误覆盖。

2025-09-15 21:17:11 1834

原创 Spring Boot 与前端长连接问题:SSE、WebSocket 与负载均衡适配

欢迎阅读我的文章!更多精彩内容,欢迎关注:• B站主页• 微信公众号Procode前言在现代 Web 应用中,已成为常见需求,比如:消息推送(聊天、通知)数据大屏(实时监控、日志流)协同编辑(多人同时操作文档)在 Spring Boot 中,常见的长连接实现方式有和。然而,当应用部署在下时,长连接就会遇到一系列适配问题,例如:连接断开、消息丢失、会话不一致。本文将深入解析 Spring Boot 中长连接的常见实现方式,并探讨在生产环境中如何与负载均衡配合。

2025-09-15 21:13:56 1468

空空如也

空空如也

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

TA关注的人

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