从真实负载和故障证据出发,完成批量访问、幂等、事务、重试与外部副作用优化,同时落实编码与XML SQL规范。
请直接完成 项目路径 中 目标链路与改动范围 的 Java 性能、幂等与可靠性优化。输入:业务契约与已知故障、Java及框架数据库版本、代表性数据负载与优化目标、依赖接口与重试约定、现有规范与格式化配置、验证环境与可执行命令。必须先查证瓶颈,再完成代码修改和验证;不能只提出缓存、异步或加线程的建议。资料可从工程获得时自行读取,仅对影响正确性的关键缺口提问,继续完成其余已授权工作。 以实际运行版本和部署约束为准,不默认升级框架或引入中间件。SQL全部放XML、编码与字典分工等是本项目硬约束;MyBatis支持SQL注解,本项目明确禁用。 1. 只读确定范围和基线。确认仓库分支、未提交改动、真实入口及调用链,记录权限租户、返回字段、顺序分页、事务原子性和错误语义。保护无关改动,先运行已有相关检查,区分原有故障。用代表性数据和请求记录SQL/远程调用次数、延迟分位、吞吐、错误、连接等待、CPU与内存,写明并发、样本、冷热状态和时间窗口。缺少监控只能标记假设,不能虚构瓶颈或收益。 2. 按证据选择最小改动。区分数据库扫描、N+1、远程等待、锁竞争、重复计算和大对象分配,列出根因证据、候选方案、代价和可回退点。优先修正错误访问模式与重复工作,不为局部变快改变业务结果或降低权限校验,不一次叠加多个难以归因的优化。涉及架构或接口变化时明确新旧兼容,先完成范围内可验证的修改。 3. 优化for中的数据访问。定位循环查库、远程调用、懒加载和对象转换暗含的请求,按租户及业务键去重批量取数,再使用有界映射组装;没有批量接口时评估有界并发及下游限制,不能改成无界并行。控制单批参数量、页大小、事务时长和内存,避免巨大IN与全表加载。保留重复项、顺序、缺失关联和错误语义;联表注意行数膨胀与分页计数,跨页修改要考虑稳定游标与并发变化。for清晰就保留,不一律改Stream或parallelStream。 4. SQL统一落在XML Mapper。MyBatis的全部SQL从Java业务层、SQL注解、Provider、字符串或SQL Builder/Wrapper中迁入XML,Mapper接口只留契约和必要参数绑定;核对namespace、参数、resultMap、主键回填和加载。值使用#{参数}绑定,动态列、表和排序方向须服务端白名单并由XML选择固定片段,禁止将用户值送入美元符文本替换。空集合、全空更新和条件缺失不能变成全表操作。依据真实执行计划和数据分布调整查询及索引,不能仅以语法或扫描告警判断性能。 5. 将幂等设计落实到持久化。明确“同一次业务意图”的业务键、租户与操作范围、参数摘要和保留期,用数据库唯一约束或等效原子条件及事务争用执行资格,先查后插只能辅助。区分首次执行、处理中、成功、确定失败和结果不明;同键同内容按契约返回既有结果,同键不同内容拒绝冲突。并发唯一冲突须查询归属正确的记录,先核对当前事务是否仍可用,不吞异常后假成功;缓存锁和前端防抖都不能替代业务唯一性。 6. 处理超时、重试及接管。客户端超时不证明服务端未提交,优先用业务键查询最终状态,未经确认不得换新键重做。按失败类型定义可重试项、次数、退避和总时限;死锁等重试要重建正确事务边界,状态不明先对账。处理中记录须有合法接管条件,避免超时后旧执行者仍能写入;必要时用版本或执行令牌拒绝过期持有者。跨租户查询及结果回放都要重新验证权限。 7. 验证事务和外部副作用。核对代理方式、传播、事务管理器、锁范围及回滚规则;默认代理模式下自调用不会触发被调方法的事务语义,但可能仍处于外层事务。受检异常是否回滚按配置验证,不让catch吞掉失败。数据库事务不覆盖远程扣款、发信或消息投递;按已有能力使用下游业务幂等键、结果查询、可靠事件或补偿,并覆盖本地提交与外部成功不同步的窗口。afterCommit回调不等于可靠投递,不能承诺跨系统天然恰好一次。 8. 控制资源和失败放大。避免持数据库锁等待慢远程响应;减少事务范围前先保持业务原子性,不能随意拆批提交。线程池、队列、连接池、超时和并发上限按负载及下游容量设界,正确传播并清理租户和追踪上下文,处理中断与取消。缓存必须说明权限维度、更新失效与一致性要求,不能把数据库故障降级成成功空结果;优化不能把压力转嫁给下游而掩盖本地指标。 9. 同步完成编码与结构标准化。消除状态、类型、阈值和业务字符串魔法值;稳定有限的数据库编码用显式code的enum,核对序列化和TypeHandler,禁止ordinal持久化及随名称变化改库值。可配置字典数据库为唯一来源,不手工重复维护enum加字典;常量和配置各按语义归属。保留旧值、停用值和未知编码,读取可标未知但不篡改原值,写入或状态迁移需受控校验。Controller管协议入口,Service管领域和事务,Mapper管持久化;DTO、DO、VO明确转换,禁止越权批量赋值。 10. 复用、清理与防御并行。只抽取已证实共性,纯通用函数才入Util,领域逻辑留领域Service,不建万能Util或无必要的泛型框架。检查null拆箱、空集合、重复键、金额精度、时间边界与不可信参数;异常保留原因和业务标识,脱敏记录且不假成功。删除无用及重复代码前核对反射、XML、SPI、扫描、序列化和配置引用。规整命名结构,为类、关键字段、枚举及方法写清晰Javadoc和业务原因注释;新增表全部字段及新增字段须用COMMENT或对应语法补齐中文数据库注释,详细说明含义、单位、编码、空值和默认值。格式仅用既有规则及单一工具处理本轮文件,禁止整仓无关格式化,不生成无关Markdown。 11. 用实际结果验收。运行编译、现有检查和必要回归,在隔离验证环境覆盖重复提交、同键异参、多线程争用、越权租户、未知编码、空输入、批量边界、事务回滚、提交后响应丢失、外部成功但本地未确认、重试及过期接管。既核对响应也核对业务记录、金额和副作用次数,禁止仅断言HTTP成功。记录实际执行与未覆盖项;没有执行条件时完成可执行检查,不填写通过。 12. 对比并交付。在相同数据、并发、负载与观测窗口下对比修改前后延迟、吞吐、错误、查询次数和资源,不只报一次平均耗时;确认业务结果一致、尾延迟和下游未恶化。输出已改文件及原因、基线与证据、批量边界、幂等状态与唯一约束方案、事务及外部副作用矩阵、验证记录、回退和剩余风险。新增持久化结构使用项目既有迁移方式并验证历史重复数据与兼容回退;未实测不能声称性能提升,交付实际完成的修改而非待办方案。 格式落地补充:工程缺少成文配置时,以同模块稳定风格制定一套最小规则,明确空格、缩进、换行、空行、导入顺序及成员组织,用兼容的格式化或静态检查工具固化到现有构建。列出实际采用的规则和检查入口,不能只口头要求代码整齐,也不能额外引入相互冲突的格式工具。 官方依据(2026-09-08核验,具体能力按项目版本确认,不代表完整企业内部规范): - 阿里巴巴《P3C-PMD 公开编码规则》:https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md - MyBatis《MyBatis 3:Mapper XML Files》:https://mybatis.org/mybatis-3/sqlmap-xml.html - MyBatis《MyBatis 3:Dynamic SQL》:https://mybatis.org/mybatis-3/dynamic-sql.html - Spring《Spring Framework:Using @Transactional》:https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html - Spring《Spring Framework:Rolling Back a Declarative Transaction》:https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/rolling-back.html 收录核验(2026-09-08):已核对公开资料和本次项目要求的覆盖范围;尚未使用真实项目执行本模板或进行模型效果评测。具体改动、性能和回归结果须在目标工程中验证。
对已有 Java 工程完成结构分层、业务编码、XML SQL、复用和清理,并验证行为兼容。
请直接完成 项目路径 中 目标模块与改动范围 的 Java 结构与编码规范重构。输入还包括 业务契约与已知问题、Java及框架数据库版本、现有规范与格式化配置、验证环境与可执行命令。目标是让职责、数据模型、SQL和业务规则清楚一致,并实际修改代码和验证;不要只交审查清单或示例。缺少资料先读取工程,只有影响正确性且无法从工程确定的事项才提问,其余已授权工作继续推进。 按项目真实 Java、Spring、MyBatis 及数据库版本实施,不借机升级技术栈。XML限定、枚举与字典分工等属于本项目硬约束。MyBatis允许注解,本项目禁止用该能力承载SQL。 1. 先只读建立范围和基线。确认仓库、分支、未提交改动及模块依赖,从入口沿 Controller、Service、Mapper/XML、表结构追踪一条真实业务链,核对已有校验和测试。记录接口字段、错误码、排序分页、事务和数据权限契约;保留无关改动,不重置工作区。给出分批修改顺序后实施,基线失败与本轮引入失败分开记录。 2. 消除业务魔法值。盘点状态、类型、阈值、标识和业务字符串,明确语义及唯一来源。稳定且有限的数据库业务编码使用带显式code和说明的enum,读写绑定实际code,禁止ordinal持久化,也不以枚举名称变动隐式改库值;核对序列化与TypeHandler。可配置字典以数据库为唯一来源,不为同一值再手工维护一套enum。一般固定常量给出语义名称,阈值按业务决定是否配置化,不把每个数字都建成枚举。 3. 兼容旧数据与未知编码。核对历史值、空值、已停用字典项和灰度期间的新编码;读取时保留原编码并按契约展示未知或停用状态,不悄悄映射成零、首项或其他有效业务状态。写入和状态迁移要验证允许范围,无法安全执行时明确拒绝。若需迁移,说明旧值到新值映射、并行版本兼容与回退,不能仅改Java类型让历史记录读不出来。 4. 整理分层和复用。Controller负责协议、参数及身份入口,Service负责业务规则和事务,Mapper负责持久化;DTO承接输入,DO对应持久化模型,VO按接口契约输出,明确转换及允许写入字段,防止客户端覆盖租户、审计或权限字段。先找真实共同语义再复用;只有无业务状态和外部依赖的纯通用函数才抽Util,领域计算和业务校验留在领域Service。禁止万能Util、为了行数拆碎方法、只有一个用途却搭泛型框架;不强制所有类新增接口。 5. 将MyBatis执行的全部SQL集中到XML Mapper。Java业务层和Mapper接口不承载SQL,不用SQL注解、Provider、Java字符串、SQL Builder或Wrapper拼接绕过限制;Mapper接口保留方法与必要参数绑定。同步核对namespace、方法id、参数名、resultMap、主键回填及资源打包。值参数使用#{参数}绑定;动态列、表及排序方向只允许服务端白名单并在XML选择固定片段,禁止用户输入直接进入美元符文本替换。可复用SQL片段须保持租户和业务过滤语义,迁移DDL沿用工程既有机制。 6. 保持循环和查询的业务含义。识别for及映射转换中的循环查库、远程调用和隐式懒加载N+1,按真实关联键先批量获取再组装;限制批次、分页和内存,不全量装入大表。保留结果顺序、重复项及缺失关联的语义,空集合不得导致XML过滤消失或全表更新。for清楚时保留for,不一律改成Stream或parallelStream;改变调用顺序与批量失败语义时补充相应验证。 7. 加固边界而不隐藏错误。权限和租户来自可信上下文,每次读写核对数据归属;批量查询和幂等结果回放同样不能越权。区分未传、显式null、空字符串、空集合和合法零值,防止拆箱空指针、金额精度或日期时区改变。异常保留原因和必要关联标识,日志脱敏且避免层层重复;不吞异常返回成功或空列表。事务按实际代理调用和回滚规则核验,自调用未触发新事务语义不等于外层必无事务。 8. 重构写操作时保住幂等和外部副作用。以业务键、租户范围、数据库唯一约束及事务保障同一意图只落一次业务结果,不能只靠先查后插、前端禁按钮或短期缓存。核对重复请求、并发、同键不同内容、超时结果不明与重试;不把超时当作失败直接重做。远程调用和消息不能假定随数据库事务回滚,按现有能力处理结果查询、可靠投递或补偿,不在结构重构中随意增加中间件。 9. 清理与规范同步落地。删除前检查静态引用、XML、反射、序列化、注解扫描、SPI、定时任务与配置约定;确认失效或重复才删,不能仅凭IDE灰色提示。按业务职责规整目录、依赖、命名和成员顺序;在类、关键字段、枚举及方法补充有意义的Javadoc,说明参数、返回、异常和业务限制,复杂分支注释解释原因而非复述代码,不编造作者日期。新增表的全部字段及新增字段须写入详细中文数据库注释,使用COMMENT或目标数据库对应语法,说明含义、单位、编码、空值及默认值语义。空格、换行、缩进和导入遵循既有规则及单一格式化工具,仅处理本轮文件,禁止无关整仓格式化。 10. 实际验证并收口。在每批修改后检查差异,运行受影响模块的编译、既有静态检查及必要测试;补足对契约变化有辨识力的回归,覆盖旧编码、未知编码、空输入、权限租户、批量边界、事务失败和重复请求。XML须验证资源加载、参数结果映射及真实数据库方言;仅编译不能证明SQL正确。环境不足时完成可执行部分并列明具体缺口,不把未运行、没有测试或仅人工阅读写成通过。 交付格式:先说明完成的业务变化及保留的契约,再列修改文件与理由、枚举/字典/常量归属表、Java到XML迁移及分层对应关系、删除证据、实际验证结果和剩余风险。存在数据库变更时附项目已有格式的迁移与回退内容;没有实测就不给性能提升数字。交付已完成的代码,不生成无关Markdown文档,不将方案当作完成。 格式落地补充:工程缺少成文配置时,以同模块稳定风格制定一套最小规则,明确空格、缩进、换行、空行、导入顺序及成员组织,用兼容的格式化或静态检查工具固化到现有构建。列出实际采用的规则和检查入口,不能只口头要求代码整齐,也不能额外引入相互冲突的格式工具。 官方依据(2026-09-08核验,仅采用相关条目,不代表完整企业内部规范): - 阿里巴巴《P3C-PMD 公开编码规则》:https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md - MyBatis《MyBatis 3:Mapper XML Files》:https://mybatis.org/mybatis-3/sqlmap-xml.html - MyBatis《MyBatis 3:Dynamic SQL》:https://mybatis.org/mybatis-3/dynamic-sql.html - Spring《Spring Framework:Using @Transactional》:https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/annotations.html - Spring《Spring Framework:Rolling Back a Declarative Transaction》:https://docs.spring.io/spring-framework/reference/data-access/transaction/declarative/rolling-back.html 收录核验(2026-09-08):已核对公开资料和本次项目要求的覆盖范围;尚未使用真实项目执行本模板或进行模型效果评测。具体改动、性能和回归结果须在目标工程中验证。
使用 Arthas thread 分析 CPU 热点、阻塞、正常等待和诊断自身开销,整理可复核的线程证据,定位 Java 运行时问题。
请分析 Java CPU 突升与锁等待,整理可复核的线程证据。结合所提供的工程和业务证据开展检查;资料不足时先列出影响结论的关键问题,可以推进的部分标注假设。不要编造文件、日志、测量结果或已完成的操作。 适用边界:适用于已授权的Java进程。线程CPU数据具有采样窗口,栈是采样结束时的快照;thread -b只覆盖文档说明的synchronized阻塞,不能据此排除Lock等待。 输入:故障时间与业务现象、进程CPU及请求指标、线程采样输出、JDK与Arthas版本、采样间隔及资源预算。 分析 Arthas thread 输出时,核对 CPU 差值采样、自身开销、栈快照时点和阻塞识别的覆盖限制。按项目实际版本解释规则,不机械沿用旧示例。 执行步骤: 1. 先核对目标进程、故障窗口和用户可观察影响,把进程CPU、请求量、延迟、错误及近期发布放到统一时间轴;不要用一次线程截图代替持续高负载证据。 2. 选择有限的采样次数和时间窗口,记录实际间隔、线程标识和诊断耗时;需要调整间隔时说明开销与代表性取舍,不将文档示例值认定为当前业务最佳值。 3. 比较多次采样中的高CPU线程与堆栈,区分应用任务、编译或GC等内部线程以及Arthas自身线程;相同线程可能处理不同任务,不能仅按线程名推定业务归属。 4. 对低CPU而请求变慢的情况检查等待状态与锁关系,记录持有者和等待者能否对应;没有查到synchronized阻塞时,不直接宣布不存在并发锁、队列或网络等待。 5. 把热点栈关联到业务入口和具体负载,列出能够解释现象的假设及反证条件;继续观测应针对少量候选,不直接全类通配追踪或以宽泛表达式采集敏感参数。 6. 形成缓解与根因修复的分工,规定再次采样与业务指标复核条件;故障缓解后仍需比较同等负载,避免把流量下降造成的CPU下降当作代码修复有效。 输出:交付采样时间线、热点与等待线程表、锁关系、候选原因与证据强度、后续验证计划。注明采样范围、遗漏可能及诊断自身影响;只有具备运行记录的项目才填写实测数值,未验证根因不得写成确定结论。 来源核验日期:2026-09-08。 - 阿里巴巴 / Arthas《Arthas thread:线程 CPU 与阻塞观察》:https://github.com/alibaba/arthas/blob/be42fd932a26456988b97d863087b116de19253f/site/docs/doc/thread.md 验证说明:已核对上述公开来源及具体规则或能力;本模板尚未通过模型对比实验或线上业务实测,不能以来源品牌、仓库热度或扫描分数代替验收。 来源许可说明:Apache-2.0。本条为中文原创整理,来源内容与本模板补充要求已在正文区分。
使用 Arthas sc 核对实际加载的类、制品来源和类加载器,定位发布后仍运行旧实现或多版本依赖冲突。
请核对 Java 进程已加载类的来源,排查依赖冲突。结合所提供的工程和业务证据开展检查;资料不足时先列出影响结论的关键问题,可以推进的部分标注假设。不要编造文件、日志、测量结果或已完成的操作。 适用边界:适用于已授权的Java进程诊断。先核对JDK、Arthas版本和attach条件;本模板仅安排观察,不使用热替换或执行会改变业务对象的表达式。 输入:目标进程与启动路径证据、异常类全名与堆栈、预期制品及校验信息、JDK与Arthas版本、部署结构与类路径。 使用 Arthas sc 查看已加载类的 code-source、classLoaderHash,并按类加载器筛选;注意默认匹配会包含子类。按项目实际版本解释规则,不机械沿用旧示例。 执行步骤: 1. 先将目标PID与实际监听服务、启动命令、JAR或容器对应,记录制品版本和启动时间;无法确认进程归属时停止针对该进程的诊断,避免把另一实例当成目标。 2. 以异常中的完整类名收集sc详细信息,列出所有匹配类的名称、类加载器标识与代码来源;核对是否混入子类,不把多行输出直接判断为同一个类被重复加载。 3. 把来源路径与预期部署制品、依赖树及实际文件对应,检查是否有旧目录、重复JAR、容器挂载或共享库抢先生效;仅靠文件名相同不能确认版本相同。 4. 遇到同名类由不同加载器加载时,按加载器区分结果与调用上下文,说明证据能证明什么;hash标识用于当前运行期定位,不将其当成跨重启稳定的版本号。 5. 比较制品清单、校验值和部署记录,分别评估包未更新、启动路径错误或依赖选择变化;磁盘文件已更新不代表内存类同步变化,缺少字节码证据时保留结论边界。 6. 给出修复后的验证方案,按正确制品和正确启动入口重新确认同一业务路径;若需重启或调整依赖,应在独立变更中执行,保存旧证据以便比较。 输出:输出目标进程证据、匹配类表、类加载器与制品对应关系、已确认差异及待查事项。每项结论区分加载来源事实与版本推断,不将sc输出当成完整字节码一致性验证,也不声称运行时问题已经修复。 来源核验日期:2026-09-08。 - 阿里巴巴 / Arthas《Arthas sc:查看已加载类》:https://github.com/alibaba/arthas/blob/be42fd932a26456988b97d863087b116de19253f/site/docs/doc/sc.md 验证说明:已核对上述公开来源及具体规则或能力;本模板尚未通过模型对比实验或线上业务实测,不能以来源品牌、仓库热度或扫描分数代替验收。 来源许可说明:Apache-2.0。本条为中文原创整理,来源内容与本模板补充要求已在正文区分。
排查 Jedis 借用等待、连接池耗尽和连接增长,结合应用规模、命令耗时及实际版本评估参数。
请排查 Redis Jedis 连接池容量和资源泄漏问题。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:Jedis连接池及Commons Pool管理的客户端;官方页面示例基于Jedis2.9.0,必须核对实际版本API和默认值,不将该示例作为依赖升级建议。 输入资料:Jedis与Commons Pool版本、连接池配置、借还连接代码、应用实例数量、QPS及命令耗时、实例连接上限、错误日志。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 结合应用规模、命令耗时和服务端限制评估池大小,核对借用资源是否归还;池耗尽不一定需要扩容。 检查步骤: 1. 准确区分连接建立失败、借用等待超时、连接已耗尽与命令执行超时,按首次出现时间关联应用发布、流量和数据库资源,避免把所有异常都解释为池太小。 2. 逐一核对正常、异常、提前返回和批处理路径中的资源归还,检查是否把Jedis实例跨线程共享或在长任务中持有;提出能定位泄漏的最小观测方式。 3. 统计每个应用实例、业务池与分片的连接总量,包含扩容、滚动发布时并存的实例,计算与服务端连接限制的关系,并保留必要余量。 4. 根据实际命令耗时与到达率估算所需并发连接,核对等待上限、空闲连接及检测配置;参数名称和时间单位必须匹配版本,不直接复制旧文档默认值。 5. 检查慢命令、网络、DNS和下游阻塞是否延长占用,分别说明调整池容量与消除根因的效果;需要预热时评估启动期间的集中建连压力。 6. 在代表性流量下验证借用等待、活跃连接、空闲连接、错误和服务端负载,覆盖突发、节点故障与恢复;记录每次配置变更和可撤回的旧值。 输出要求:输出异常分类、资源生命周期、连接预算、参数建议及验证结果。参数表使用“当前值|版本依据|建议值或区间|推导条件|验证指标”,不得只给一组所谓通用最优参数。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里云《JedisPool资源池优化》](https://help.aliyun.com/zh/redis/use-cases/jedispool-optimization) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。
用于审批、工单、订单等状态流转,检查分支遗漏、重复提交、权限和持久化结果。
请检查 Java 审批状态分支,并设计业务测试。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:Java实现的有限业务状态与条件分支;状态迁移、权限和幂等策略以业务规则为准,不能按通用审批流程擅自补业务。 输入资料:业务规则、状态枚举、分支代码、角色权限、数据库写入逻辑、现有测试、JDK版本。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 保持条件表达式易于理解,明确 switch 中未匹配情况的处理方式和各分支结束条件。 检查步骤: 1. 从业务资料整理状态迁移表,逐项记录起始状态、操作、角色、前置条件和终止状态;资料与代码冲突时列明两种行为并指出需要确认的事实。 2. 将每条合法迁移对应到实际代码路径,检查条件顺序是否遮蔽后续规则,以及缺少字段、未知枚举和历史状态会进入哪一条路径。 3. 为复合判断建立条件组合,找出权限、状态和数据归属之间的联动;不为追求代码简短而改变短路顺序或触发原先不会发生的副作用。 4. 检查重复提交和并发操作是否可能把状态覆盖回旧值,明确数据库约束或更新条件如何保障业务结果;未提供持久化代码时不得认定并发安全。 5. 给出保持行为的分支整理与需要业务决定的行为修正,分别列出改动;替换复杂判断时使用业务含义清楚的命名,不为了形式增加无用抽象。 6. 根据迁移表生成正常、拒绝、越权、重复、并发和异常测试,测试应观察数据库状态、外部动作次数与响应;说明哪些属于单元验证、哪些需真实集成环境。 输出要求:依次提供状态迁移表、遗漏和冲突清单、最小代码修改、测试矩阵。每个测试使用“初始状态|角色与归属|操作及并发条件|预期最终状态|可观察证据”。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。
用于账期、日报、到期时间和跨年格式化,检查时间含义、时区转换和并发安全。
请检查 Java 日期、时区转换与统计周期的边界。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:Java日期时间处理及数据库、前端之间的数据转换;使用java.time时需JDK8及以上,旧接口替换须保留既有时区与业务语义。 输入资料:日期处理代码、业务统计周期、接口时间格式、数据库字段类型、服务器及业务时区、JDK版本。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 区分日期格式中的日历年与周所属年,检查旧格式化器的线程安全。 检查步骤: 1. 逐个识别字段表示的是时间点、本地日期、本地时间还是持续时长,注明单位与来源;账期、截止日期和事件发生时间不能仅凭字段名相互转换。 2. 追踪前端、接口、Java对象、数据库到导出文件的转换链,查找默认时区、隐式格式、秒与毫秒混用,以及同一字段在不同入口中使用不同解释。 3. 针对年末年初构造跨年样例,核对格式化、分组、排序和文件名称是否属于正确日历日期;仅在业务确实按周核算时使用周所属年语义。 4. 检查日报和月报的区间边界,明确定义起止是否包含,避免相邻周期重复或漏记;若涉及多个时区,补充本地一天对应的实际时间范围。 5. 核对日期工具对象是否被多线程共享、是否可变、是否依赖服务器当前时间;给出可注入业务时钟的改进范围,让测试不依赖执行当天。 6. 覆盖跨年、月末、闰日、时区转换、缺失时间及夏令时适用地区,分别验证展示和统计结果;若业务只使用固定时区,清楚说明无需扩展的范围。 输出要求:输出时间字段字典、转换链、缺陷及修复建议、边界样例表。样例写明输入、业务时区、期望日期或区间以及实际结果,保留对历史数据解释和接口兼容性的说明。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。
用于订单、审核、库存等写操作,追踪异常、事务提交和外部副作用,避免失败被吞或状态半完成。
请审查 Java 异常处理与事务结果的一致性。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:Java业务写操作及显式或框架管理的数据库事务;回滚条件必须核对实际框架配置,远程调用和消息不会自动随本地数据库回滚。 输入资料:业务写操作代码、事务配置、异常类与处理器、数据库操作、外部副作用、框架版本。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 结合代码上下文检查异常后的回滚;注意 finally 中的返回可能遮蔽原有结果。 检查步骤: 1. 以一个真实业务操作为单位,按顺序列出校验、数据库变更、消息、缓存和远程请求,标明每个步骤的可逆性,以及用户看见成功的确切时点。 2. 核对事务边界、调用方式和异常到达的位置,分别模拟校验失败、数据库失败、外部超时及运行时异常;不要只看到事务注解就认定回滚一定生效。 3. 检查异常捕获后是否继续执行、改写返回值或丢失原因,区分可以转成业务结果的失败与必须向上交付的技术失败,保留定位问题所需的最少上下文。 4. 对数据库已提交而外部动作失败的情况明确结果,评估幂等重试、补偿和状态对账是否能恢复;对外部成功但响应超时的情况标记结果未知,避免直接重复副作用。 5. 提出能保留现有契约的最小修改,说明异常类型、返回码和事务配置如何协同;只给项目适用的机制,不为了套用模式拆分无必要的微服务。 6. 用可控故障点验证关键步骤,核对数据库最终状态、外部动作次数及用户响应;列出未覆盖的网络分区或并发场景,以及上线后的异常监测和补偿入口。 输出要求:按业务步骤表、异常传播图的文字说明、问题清单、修复片段和故障用例交付。每个用例必须包含初始状态、注入故障、最终数据和预期响应,不能用“未报错”代替一致性结论。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。
排查线程复用导致的用户、租户和请求上下文串用,覆盖异步传递与异常清理。
请检查 Java ThreadLocal 上下文传递及租户隔离。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:使用ThreadLocal、请求上下文或线程池的Java项目;仅在项目实际存在租户模型时检查租户,不能凭空增加业务隔离维度。 输入资料:上下文类与过滤器、线程池和异步代码、用户及租户鉴权规则、数据库访问代码、异常路径、运行版本。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 在线程复用场景中,检查自定义 ThreadLocal 是否在使用结束后清理。 检查步骤: 1. 列出所有上下文字段的写入来源、读取位置和清理位置,标注由认证结果生成还是直接来自请求参数;明确客户端传入标识不能自行证明其访问权限。 2. 沿一次请求追踪正常、异常、提前返回和重复分发路径,检查每条路径结束时上下文状态;给出可能残留的位置和下一次请求受影响的具体业务操作。 3. 追踪异步提交、定时执行和回调,确认上下文是否需要传递、传递哪些最小字段、何时冻结取值;不能假定父线程数据自动正确到达工作线程。 4. 核对嵌套调用临时切换上下文后的恢复策略,以及工作线程原有值如何处理;提出显式传参或受控包装方案时说明兼容影响和清理责任。 5. 在相同线程连续处理两个不同用户或租户的任务,第二个任务分别设置有效、缺失和错误上下文,验证数据访问范围;异常完成后再执行同样序列。 6. 把定位结果追踪到数据库查询和缓存键,验证实际数据边界而非只观察日志;如果权限依据缺失,应报告无法判定,不声称通过隔离检查。 输出要求:交付上下文生命周期表、越界场景、最小修复及隔离验证结果。风险表应写明残留字段、复用入口、可能访问的数据和证据,测试使用匿名样本并避免记录真实身份凭证。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。
用于导出、批量计算、外部调用等异步任务,审查资源边界、拒绝处理及任务结果可追踪性。
请评审 Java 线程池容量和异步任务的可靠性。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:传统平台线程池与常见Spring异步执行器;虚拟线程、响应式调度器应另行评估,不机械套用旧线程数量建议。 输入资料:异步任务代码、线程池配置、任务耗时分布、峰值到达率、资源限额、任务丢失容忍度、JDK版本。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 明确线程池的资源边界,并为线程提供可识别的名称。 检查步骤: 1. 按业务列出任务来源、任务是否持久化、完成期限和失败归属,区分允许丢弃的通知与必须完成的业务任务;明确接口返回时任务处于哪个状态。 2. 绘制提交到执行完成的路径,标记线程池、排队、数据库连接、远程连接和锁等限制,找出共享池中可能互相拖慢的任务类型及调用方。 3. 根据到达率与耗时提出容量估算,写清假设、排队容忍时间和内存占用;资料不足时给测量方法与候选区间,不拍脑袋给固定线程数。 4. 逐项核对任务排队已满、执行超时、下游阻塞和提交失败时的行为,说明拒绝处理是否会让请求线程长时间阻塞、任务静默丢失或产生重复执行。 5. 检查任务异常、取消、应用退出和重新启动后的状态,验证调用者能否获知失败;若业务要求可靠执行,给出持久化任务与补偿的边界。 6. 设计平稳负载、突发负载、下游变慢及停机四组验证,采集排队时间、执行时间、完成率、拒绝数和资源占用;根据证据逐项调整,保留回退配置。 输出要求:输出任务分类、资源关系、参数建议表、失败处理矩阵及验证计划。参数建议必须含当前值、依据、候选值、预期影响和回退条件,不把未压测值写成最优配置。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。
用于批量导入、分页、筛选和去重代码,检查集合共享、视图修改、遍历变更及内存边界。
请审查 Java 集合视图、转换与批量处理代码。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:使用Java集合的业务模块;不可变集合工厂、Stream及第三方集合的能力需匹配JDK与依赖版本。 输入资料:集合处理代码、输入规模与增长量、业务顺序与去重定义、是否并发共享、JDK与依赖版本。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 核对集合视图与原集合的关联,以及具体集合对遍历修改和数组转换的支持。 检查步骤: 1. 标出每个集合的创建者、拥有者、读写方和生命周期,区分原始数据、分页视图、独立副本和缓存引用;指出在哪一层修改可能影响另外一个业务调用。 2. 用真实调用路径检查分页切片、数组转列表和列表转数组,分别验证能否增加、删除、替换及强制转换;将依赖具体实现的假设改为明确契约。 3. 检查筛选与去重是否保持业务要求的稳定顺序,以及重复记录按哪个业务键识别;若对象在加入集合后继续修改,核对后续查找和结果是否仍正确。 4. 评估批量规模,区分一次全量加载、分批读取和流式处理;估算同时持有的数据副本与中间结果,容量结论注明来源,不根据循环层数臆测实际耗时。 5. 检查并发共享是否存在可见性或写入冲突,说明快照、加锁、分段处理等候选方案各自改变的语义;不要仅更换集合类就宣称业务操作整体原子。 6. 提供覆盖空集合、单元素、重复、空元素、源集合变更及大批量输入的验证用例;并发场景必须定义可重复观察的结果,记录未执行的压力验证。 输出要求:交付集合关系说明、缺陷表、最小替换代码和验证矩阵。每处修改说明是否保留原有顺序、重复项和共享语义,另外列出峰值内存估算的假设与需要采集的指标。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。
检查DTO、数据库查询、远程调用和集合中的空值传播,避免默认值掩盖未知状态。
请排查 Java 空值传播与包装类型的边界问题。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:使用Java对象、包装类型和常见持久化框架的业务代码;具体映射和校验行为以JDK与依赖版本为准。 输入资料:待检查代码、数据字段定义、允许为空的业务含义、外部调用样例、JDK与依赖版本。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 检查包装值比较和自动拆箱中的空值风险,不假定远程调用或数据库查询总能返回值。 检查步骤: 1. 画出目标字段从请求、查询或远程响应到业务计算、持久化及展示的传播路径,区分未提供、未知、无记录、零值和空字符串,不能把所有情况自动合并。 2. 找出可空值参与比较、算术、条件判断、方法返回和集合操作的位置,为每个疑点指出确切输入及可能结果;对无源码依赖只列待验证的接口契约。 3. 检查默认值是否改变业务事实,例如未知计数被展示成零、未提交配置被当成关闭;将需要拒绝输入、保留为空或业务兜底的场景分别列出理由。 4. 对对象比较与集合元素给出包含空值、相同值和不同实例的样例,检查现有结果是否稳定;避免只针对小范围数值验证而遗漏实际业务标识。 5. 提出最小修复,明确校验应放在入口、转换层还是计算前;说明对已有数据和外部调用方的影响,不为消除异常随意改变公共字段类型或业务默认值。 6. 设计能区分修复前后行为的测试,覆盖缺字段、显式空值、查询无记录、远程返回不完整和混合集合;同时保留正常业务样例,记录真正执行的结果。 输出要求:先给空值语义表,再给风险清单、修正代码与测试矩阵。每个风险须给出“来源字段|传播路径|触发输入|错误业务结果”,无法重现的项目保持待验证状态。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。
用于新接口开发和前后端联调,检查字段含义、空值、枚举、序列化兼容及接口说明。
请评审 Java 接口契约与 DTO 字段。根据提供的项目资料给出具体结论、处理方案和验证方法。 适用范围:常规Java后端的HTTP或RPC接口;先核对JDK与框架版本,不将传统JavaBean约定直接套用于record或特殊序列化模型。 输入资料:业务需求、接口定义或代码、DTO与VO、调用方约束、JDK与框架版本、接口样例。 资料不足时,先列出最多3个影响结论的关键问题;可以继续的部分标明假设,无法确定的内容写“待核实”。不得编造文件、行号、调用链、性能数据或已完成的验证。 让接口说明覆盖输入、返回及异常,使用能准确表达含义的名称。 检查步骤: 1. 从业务需求列出操作对象、发起角色、前置条件、成功状态和失败状态,逐项对应到接口;不能用接口返回成功替代业务实际完成,异步任务要明确状态查询入口。 2. 建立请求与响应字段字典,逐个核对名称、类型、长度、单位、必填条件、空值含义、枚举和脱敏要求;遇到金额、时区、状态码等缺少定义时指出具体缺口。 3. 追踪DTO到业务方法再到响应对象的转换,检查重命名、漏传、默认值和字段覆盖;对布尔属性核对实际序列化结果,并用现有客户端样例验证兼容性。 4. 检查路径、查询参数与请求体是否承担清晰职责,列出重复提交、分页、排序、越权对象访问等边界;只在项目确有多租户时核对租户字段的可信来源。 5. 补齐接口注释需要表达的业务规则,给出一组有效请求和至少三组边界请求,响应需包含可处理的业务信息;不要向用户暴露堆栈或内部连接信息。 6. 将需求、接口、字段和验收用例逐条关联,区分新增接口与兼容改动;评估旧客户端在字段缺失、增加或枚举扩展时的行为,并给出分阶段联调顺序。 输出要求:依次给出接口清单、字段字典、问题表、最小修改示例和联调用例。问题表使用“位置|触发条件|实际影响|修正建议|验证方式”,用例写明请求、期望业务状态及期望响应。 只报告有证据支持的问题;区分“已验证”“推测”和“待验证”,涉及变更时给出受影响文件或对象、最小修改和复核方法。代码与操作示例使用占位符,不写入真实密码。 来源(核验日期:2026-09-08): [阿里巴巴《P3C-PMD 官方公开规则》](https://github.com/alibaba/p3c/blob/master/p3c-pmd/README.md) 整理范围:仅依据上述公开文档的相关建议,业务场景、变量、检查流程与验收格式均为独立改写,不代表相关企业完整内部规范。