common-technical-practices

6
2
Source

通用技术实践指南,涵盖 AOP 切面、分布式锁、重试机制、参数校验、性能监控、定时任务、审计日志等后端开发中的常见技术实践。当用户需要实现横切关注点、处理并发控制、配置重试策略、添加性能监控或实现审计功能时使用。

Install

mkdir -p .claude/skills/common-technical-practices && curl -L -o skill.zip "https://mcp.directory/api/skills/download/2170" && unzip -o skill.zip -d .claude/skills/common-technical-practices && rm skill.zip

Installs to .claude/skills/common-technical-practices

About this skill

通用技术实践指南

Skill 概述

本 Skill 涵盖了 BK-CI 后端开发中常用的 7 大通用技术实践,这些技术是横跨多个模块的 横切关注点(Cross-Cutting Concerns),与 Spring Boot 框架紧密集成。

核心主题

主题说明文档
AOP 切面编程拦截器、日志切面、权限切面[1-aop-aspect.md]
分布式锁Redis 锁、并发控制、死锁预防[2-distributed-lock.md]
重试机制重试策略、退避算法、幂等性[3-retry-mechanism.md]
参数校验JSR-303 注解、自定义校验器[4-parameter-validation.md]
性能监控Micrometer 指标、Prometheus[5-performance-monitoring.md]
定时任务Spring Scheduled、分布式调度[6-scheduled-tasks.md]
审计日志操作审计、行为追踪、合规性[7-audit-logging.md]

⚠️ 与 utility-components 的区别

定位对比

Skill定位关注点典型场景
common-technical-practices (本 Skill)框架级实践如何在 Spring Boot 中使用这些技术AOP 切面、分布式锁、重试机制、参数校验、性能监控、定时任务、审计日志
utility-components工具级组件如何使用特定的工具类和组件JWT 认证、表达式解析、线程池使用、责任链实现

使用选择

需要实现横切关注点(AOP、锁、重试、监控)
    → 使用 common-technical-practices (本 Skill)

需要使用特定工具类(JWT、表达式、线程池、责任链)
    → 使用 utility-components

示例对比:

  • 需要 添加性能监控切面common-technical-practices (reference/5-performance-monitoring.md)
  • 需要 使用线程池批量处理utility-components (reference/3-thread-pool-loop-util.md)
  • 需要 实现分布式锁common-technical-practices (reference/2-distributed-lock.md)
  • 需要 实现 JWT 认证utility-components (reference/1-jwt-security.md)

技术实践架构

横切关注点视图

┌─────────────────────────────────────────────────────────────────┐
│                      BK-CI 业务逻辑层                            │
│  (Process/Project/Store/Auth/Repository/Dispatch...)           │
└─────────────────────────────────────────────────────────────────┘
                             ↓
        ┌────────────────────┼────────────────────┐
        │                    │                    │
   ┌────▼────┐         ┌────▼────┐         ┌────▼────┐
   │  AOP    │         │  参数   │         │  审计   │
   │  切面   │         │  校验   │         │  日志   │
   └─────────┘         └─────────┘         └─────────┘
        │                    │                    │
        └────────────────────┼────────────────────┘
                             ↓
┌─────────────────────────────────────────────────────────────────┐
│                     通用技术实践层                               │
├─────────────────────────────────────────────────────────────────┤
│  • 分布式锁(并发控制)                                          │
│  • 重试机制(容错处理)                                          │
│  • 性能监控(可观测性)                                          │
│  • 定时任务(调度管理)                                          │
└─────────────────────────────────────────────────────────────────┘

使用指南

场景 1:实现 AOP 切面

需求: 添加日志切面、权限切面、性能监控切面

步骤:

  1. 查阅 reference/1-aop-aspect.md
  2. 了解切点表达式语法
  3. 选择通知类型(Before/After/Around)
  4. 实现切面逻辑

典型问题:

  • 如何定义切点表达式?
  • Around 通知如何获取方法参数?
  • 切面执行顺序如何控制?

场景 2:使用分布式锁

需求: 并发控制、资源竞争、数据一致性保证

步骤:

  1. 查阅 reference/2-distributed-lock.md
  2. 选择合适的锁粒度
  3. 使用 RedisLock.kt 工具类
  4. 处理锁超时和死锁

典型问题:

  • 如何避免死锁?
  • 锁超时时间如何设置?
  • 可重入锁如何实现?

场景 3:配置重试机制

需求: 处理临时性故障、网络抖动、服务降级

步骤:

  1. 查阅 reference/3-retry-mechanism.md
  2. 选择重试策略(固定延迟/指数退避)
  3. 配置重试次数和超时
  4. 确保操作幂等性

典型问题:

  • 什么情况下应该重试?
  • 如何实现指数退避?
  • 重试次数上限如何确定?

场景 4:添加参数校验

需求: 接口参数校验、数据完整性检查

步骤:

  1. 查阅 reference/4-parameter-validation.md
  2. 使用 JSR-303 注解(@NotNull/@Size/@Valid)
  3. 编写自定义校验器(如需)
  4. 配置校验分组

典型问题:

  • 如何自定义校验注解?
  • 嵌套对象如何校验?
  • 校验错误消息如何国际化?

场景 5:实现性能监控

需求: 添加性能埋点、监控慢查询、分析瓶颈

步骤:

  1. 查阅 reference/5-performance-monitoring.md
  2. 使用 @BkTimed 注解或 Watcher 工具类
  3. 配置 Prometheus 指标采集
  4. 分析性能数据

典型问题:

  • 如何添加自定义指标?
  • Micrometer 如何使用?
  • 如何监控数据库慢查询?

场景 6:创建定时任务

需求: 定期清理、数据同步、统计报表

步骤:

  1. 查阅 reference/6-scheduled-tasks.md
  2. 使用 @Scheduled 注解配置 Cron 表达式
  3. 添加分布式锁防止并发执行
  4. 实现任务监控

典型问题:

  • Cron 表达式如何编写?
  • 如何避免任务重复执行?
  • 分布式环境下如何调度?

场景 7:记录审计日志

需求: 操作审计、行为追踪、合规性要求

步骤:

  1. 查阅 reference/7-audit-logging.md
  2. 使用审计日志工具类
  3. 记录关键操作(创建/修改/删除)
  4. 存储审计数据

典型问题:

  • 哪些操作需要审计?
  • 审计日志如何存储?
  • 如何追溯历史操作?

核心类与文件速查

AOP 切面

类/文件路径说明
BkAspectcommon-web/aop/BkAspect.kt基础切面类
LogAspectcommon-web/aop/LogAspect.kt日志切面

分布式锁

类/文件路径说明
RedisLockcommon-redis/RedisLock.ktRedis 分布式锁
RedisOperationcommon-redis/RedisOperation.ktRedis 操作工具

重试机制

类/文件路径说明
RetryUtilscommon-service/utils/RetryUtils.kt重试工具类

参数校验

类/文件路径说明
BkFieldcommon-web/annotation/BkField.kt自定义校验注解

性能监控

类/文件路径说明
BkTimedcommon-service/prometheus/BkTimed.kt性能监控注解
Watchercommon-api/util/Watcher.kt性能监控工具

审计日志

目录路径说明
common-audit/common/common-audit/审计日志模块

开发规范

1. AOP 切面开发

  • ✅ 切面类放在 *.aop 包下
  • ✅ 使用 @Aspect + @Component 注解
  • ✅ 切点表达式尽量精确,避免过度拦截
  • ✅ 注意切面执行顺序(使用 @Order

2. 分布式锁使用

  • ✅ 锁粒度要细,避免大锁
  • ✅ 设置合理的超时时间(建议 10-30 秒)
  • ✅ 使用 try-finally 确保锁释放
  • ✅ 避免在锁内执行耗时操作

3. 重试机制配置

  • ✅ 仅对 临时性故障 重试(网络抖动、超时)
  • ✅ 不要对 业务错误 重试(参数错误、权限不足)
  • ✅ 确保操作幂等性
  • ✅ 使用指数退避避免雪崩

4. 参数校验规范

  • ✅ Controller 层必须校验入参
  • ✅ 使用标准 JSR-303 注解
  • ✅ 复杂校验使用自定义校验器
  • ✅ 校验失败返回明确错误信息

5. 性能监控埋点

  • ✅ 关键业务流程必须埋点
  • ✅ 慢查询(>1s)必须监控
  • ✅ 指标命名遵循 Prometheus 规范
  • ✅ 避免高基数标签(如 userId)

6. 定时任务开发

  • ✅ 使用分布式锁避免并发执行
  • ✅ 任务执行时间不要与业务高峰重叠
  • ✅ 长时间任务要有进度监控
  • ✅ 任务失败要有告警机制

7. 审计日志记录

  • ✅ 记录 什么时间 做了 什么操作
  • ✅ 敏感信息要脱敏
  • ✅ 审计日志不可修改
  • ✅ 保留足够长的存储周期(至少 1 年)

与其他 Skill 的关系

common-technical-practices (本 Skill)
    ↓ 依赖
backend-microservice-development     # 后端微服务开发基础
design-patterns                      # 设计模式
    ↓ 被依赖
process-module-architecture          # Process 模块使用这些技术
auth-module-architecture             # Auth 模块使用这些技术
...                                  # 其他业务模块

前置知识:

  • backend-microservice-development - 了解 Spring Boot 基础
  • design-patterns - 了解常见设计模式

相关 Skill:

  • microservice-infrastructure - 微服务基础设施(事件驱动、服务通信)
  • database-design - 数据库设计(与审计日志存储相关)

详细文档导航

文档内容行数典型问题
1-aop-aspect.mdAOP 切面编程74如何定义切点?Around 通知如何使用?
2-distributed-lock.md分布式锁164如何避免死锁?锁超时如何处理?
3-retry-mechanism.md重试机制75如何实现指数退避?幂等性如何保证?
4-parameter-validation.md参数校验74如何自定义校验注解?嵌套对象如何校验?
5-performance-monitoring.md性能监控77如何添加自定义指标?慢查询如何监控?
6-scheduled-tasks.md定时任务65Cron 表达式如何写?分布式调度如何做?
7-audit-logging.md审计日志69哪些操作需要审计?审计日志如何存储?

常见问题 FAQ

Q1: AOP 切面不生效?

A: 检查:

  1. 切面类是否加了 @Aspect@Component
  2. 切点表达式是否正确
  3. 目标方法是否是 Spring Bean 的 public 方法

Q2: 分布式锁死锁如何排查?

A:

  1. 检查锁是否设置了超时时间
  2. 确认 finally 块中释放了锁
  3. 使用 Redis 命令查看锁状态:GET lock_key

Q3: 重试机制导致雪崩?

A:

  1. 使用 指数退避 而非固定延迟
  2. 设置 最大重试次数(建议 3-5 次)
  3. 添加 熔断器 快速失败

Q4: 参数校验失败返回 500?

A:

  1. 确认有全局异常处理器捕获 MethodArgumentNotValidException
  2. 返回 400 而非 500
  3. 错误信息格式统一

Q5: 性能监控指标不准?

A:

  1. 确认 @BkTimed 注解的方法是 Spring Bean
  2. 检查 Prometheus 配置
  3. 避免在循环中使用 Watcher

Q6: 定时任务重复执行?

A:

  1. 添加 分布式锁
  2. 检查是否有多个实例同时运行
  3. 确认 Cron 表达式正确

Q7: 审计日志丢失?

A:

  1. 检查审计日志存储是否正常
  2. 确认异步写入的队列没有溢出
  3. 添加日志持久化机制

总结

本 Skill 涵盖了 BK-CI 后端开发中 7 大通用技术实践,这些技术是横跨多个模块的基础设施,掌握它们对于开发高质量、高可靠的微服务至关重要。

学习路径:

  1. 先了解 Spring Boot 基础(backend-microservice-development
  2. 按需深入具体技术(AOP/锁/重试/...)
  3. 在实际开发中应用并总结经验

最佳实践:

  • ✅ 横切关注点使用 AOP
  • ✅ 并发控制使用分布式锁
  • ✅ 临时性故障使用重试
  • ✅ 接口入参必须校验
  • ✅ 关键流程必须监控
  • ✅ 定时任务避免并发
  • ✅ 敏感操作必须审计

开始使用这些技术实践,让你的代码更加健壮和可维护!🚀

project-module-architecture

TencentBlueKing

Project 项目管理模块架构指南,涵盖项目 CRUD、成员管理、项目配置、标签管理、项目迁移。当用户开发项目管理功能、处理项目成员、配置项目属性或实现项目相关逻辑时使用。

126

microservice-infrastructure

TencentBlueKing

微服务基础设施指南,涵盖条件配置、事件驱动架构、服务间通信、国际化与日志等微服务架构的核心基础设施。当用户实现服务间调用、配置多环境、实现异步通信、处理国际化或规范日志输出时使用。

114

artifactory-module-architecture

TencentBlueKing

Artifactory 制品库模块架构指南,涵盖制品上传下载、存储后端适配、制品元数据、清理策略、权限控制。当用户开发制品库功能、处理制品存储、配置清理策略或实现制品管理时使用。

193

supporting-modules-architecture

TencentBlueKing

BK-CI 支撑模块架构指南,涵盖凭证管理(Ticket)、构建机环境(Environment)、通知服务(Notify)、构建日志(Log)、质量红线(Quality)、开放接口(OpenAPI)等支撑性服务模块。当用户开发这些模块功能或需要理解支撑服务架构时使用。

132

managing-devops-pipeline

TencentBlueKing

管理蓝盾流水线的构建操作,包括查询构建历史、获取启动参数、查看构建状态、启动构建。当用户提及流水线、构建、部署、CI/CD、蓝盾或需要触发构建任务时使用。

102

go-agent-development

TencentBlueKing

Go Agent 开发指南,涵盖 Agent 架构设计、心跳机制、任务执行、日志上报、升级流程、与 Dispatch 模块交互。当用户开发构建机 Agent、实现任务执行逻辑、处理 Agent 通信或进行 Go 语言开发时使用。

12

You might also like

flutter-development

aj-geddes

Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.

1,6831,428

ui-ux-pro-max

nextlevelbuilder

"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."

1,2601,320

drawio-diagrams-enhanced

jgtolentino

Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.

1,5291,146

godot

bfollington

This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.

1,350807

nano-banana-pro

garg-aayush

Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.

1,262727

pdf-to-markdown

aliceisjustplaying

Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.

1,475681