Skip to content

Java · 04 工程实践 ​

项目怎么开发、测试、部署——结合 MES、CRM、AI 内容生产等真实交付。

1. 模块怎么切(我默认的骨架) ​

xxx-api          对外 DTO / Feign API(若需要)
xxx-app          启动模块(Boot 主类、配置)
xxx-controller   接口层(可与 app 合并)
xxx-service      用例、事务边界、领域规则
xxx-infra        MyBatis、Redis、MQ、外部 HTTP
xxx-domain       实体与领域服务(中大型再拆)

中小项目可以压成 单模块或多模块扁平,但逻辑上仍要有:

层职责不该做的事
接口层协议、校验、鉴权入口堆业务与长事务
应用/领域用例、状态流转直接依赖 Servlet API
基础设施DB/缓存/三方 SDK反向污染领域规则

原则:域逻辑不散落在 Controller;外部调用有超时、重试与降级。


2. 配置与多环境 ​

  • application.yml + application-{profile}.yml
  • 密钥、数据源密码走环境变量或配置中心,不进 Git
  • 本地、测试、生产差异只留在配置,不靠改代码切环境

Boot 的价值很大一块就在这里:环境可复制,排障时可对比配置。


3. 我在项目里的实际选择 ​

场景选择为何
业务 APISpring Boot + MyBatis-PlusSQL 可控,交付快
缓存Redis + 明确失效避免脏读靠策略不是靠玄学
任务本地异步 → XXL-JOB / 队列按可靠性升级,不一步到位
AI 编排Java 管状态/配额/重试;Python 管模型权威状态在 Java
多端同一套 API 服务 Web / PDA / Electron设备差异放客户端
拆服务默认不拆减少运维与分布式复杂度

AI 漫剧内容生产(近期) ​

  • 异步任务:提交 → 执行 → 重试 → 结果回写,状态机在 Java
  • 多模型 API:统一任务表与错误分类,避免每个模型一套临时脚本当正式链路
  • 失败可查、可重跑:比「调通一次 Demo」更接近生产

轻量 MES ​

  • 工单、采集、追溯:强状态与追溯链,适合 Java + 关系库
  • 上位机 / PDA:Node/Electron 或移动端消费同一后端

悟空类 CRM 定制 ​

  • 模块多、客户差异大:在标准产品上改;配置中心与任务调度是 存量约束
  • 开发组长角色:库表设计、核心模块、联调上线,技术选型服从交付节奏

4. 测试:投多少合适 ​

类型我优先测什么成本感
单测纯逻辑、金额/状态规则、工具类低,应坚持
集成测登录、关键下单/工单流转、事务回滚中,关键路径覆盖
契约/手工对外 API 示例、错误码表文档即契约

不追求「覆盖率数字好看」;追求 改核心规则时有人挡枪。
外部模型、真设备:mock 或实验室环境,不阻塞每次提交。


5. 构建与部署 ​

  • Maven / Gradle:多模块版本收敛;禁止各模块各引各的乱版本
  • 产物:可执行 jar;健康检查(Actuator 或自建 /health)
  • Docker:多阶段构建,配置外置;中小项目 CI = 构建 → 测试 → 推镜像
  • 日志:结构化 + 请求链路 ID,线上靠日志与指标,不靠「我感觉」

不必一上来 K8s;先把 可回滚的发布 和 配置分离 做稳。


6. 协作与代码卫生 ​

  • PR 要说清:动机、风险、如何验证
  • 接口变更:同步调用方与文档;破坏性变更要版本或兼容期
  • 发现「神类」「复制粘贴模块」:交付后还债,别在火烧时重构全世界

一句话 ​

用约定换交付速度,用模块边界换可维护性。Spring 是工具箱,不是教材目录。

下一篇:05 常见问题