logo
0
0
WeChat Login
dylancheong<neocheung@163.com>
feat: 完成项目深度架构分析文档

Copilot PetClinic Application

CNB Pipeline Status

项目概述

这是一个基于Spring PetClinic的改进版本,集成了腾讯云代码大模型Copilot功能,用于演示AI辅助开发能力。该项目是一个宠物诊所管理系统,包含宠物主人管理、宠物信息管理、兽医管理和就诊记录等核心功能。

技术栈

  • 后端框架:
    • Spring Boot 3.4.2
    • Spring Data JPA
    • Spring Web MVC
    • Spring Boot Actuator
  • 数据库:
    • H2 (默认内存数据库)
    • MySQL 9.1
    • PostgreSQL 17.0
  • 前端技术:
    • Thymeleaf 模板引擎
    • Bootstrap 5.3.3
    • WebJars
  • 构建工具:
    • Maven 3.8+
    • Maven Wrapper
  • 开发工具:
    • Java 17
    • Docker & Docker Compose
    • CNB CI/CD Pipeline
  • 代码质量:
    • Checkstyle (Google Java Style)
    • Spotless 代码格式化
    • JUnit 5 测试框架
    • Mockito 模拟框架

本地运行指南

前提条件

  • Java 17+
  • Maven 3.8+
  • Docker (可选,用于数据库)

运行步骤

git clone https://cnb.cool/dylancheong/copilot-petclinic.git cd copilot-petclinic ./mvnw spring-boot:run

访问应用: http://localhost:8081

数据库配置

默认配置: H2内存数据库,无需额外配置即可运行

使用外部数据库:

# 使用Docker Compose启动MySQL docker-compose up mysql # 使用Docker Compose启动PostgreSQL docker-compose up postgres # 使用MySQL配置运行应用 ./mvnw spring-boot:run -Dspring.profiles.active=mysql # 使用PostgreSQL配置运行应用 ./mvnw spring-boot:run -Dspring.profiles.active=postgres

数据库连接信息:

  • MySQL: localhost:3306/petclinic (用户名/密码: petclinic/petclinic)
  • PostgreSQL: localhost:5432/petclinic (用户名/密码: petclinic/petclinic)
  • H2控制台: http://localhost:8081/h2-console (JDBC URL: jdbc:h2:mem:testdb)

CNB流水线

项目已配置CNB持续集成流水线,包含以下阶段:

  1. 代码检查
  2. 编译构建
  3. 容器化
  4. 部署到测试环境

流水线配置文件: .cnb.yml

开发指南

IDE设置

推荐使用:

  • IntelliJ IDEA
  • VS Code with Java扩展

代码风格

遵循Google Java风格指南:

./mvnw spotless:apply

测试架构

  • 单元测试: 独立测试各个组件
  • 集成测试: 使用@WebMvcTest进行控制器层测试
  • Mock策略: Mock仓储层,测试控制器行为
  • 验证测试: 测试有效输入和约束违规
# 运行所有测试 ./mvnw test # 运行特定测试类 ./mvnw test -Dtest=*ControllerTests # 运行单个测试方法 ./mvnw test -Dtest=OwnerControllerTests#testFindOwners # 生成测试覆盖率报告 ./mvnw jacoco:report

代码质量检查

# 检查代码风格 ./mvnw checkstyle:check # 自动格式化代码 ./mvnw spotless:apply # 完整构建和打包 ./mvnw clean package

项目架构

核心模块结构

src/main/java/org/springframework/samples/petclinic/ ├── model/ # 基础实体和共享领域对象 ├── owner/ # 宠物主人领域: Owner, Pet, Visit实体 + OwnerController + OwnerRepository ├── vet/ # 兽医领域: Vet, Specialty实体 + VetController + VetRepository ├── system/ # 横切关注点: 配置、缓存、错误处理 └── web/ # 共享Web组件和格式化器

领域包组织架构

项目采用领域驱动的包结构,每个业务领域都有自己的包,包含所有相关组件:

  • 实体类 (JPA实体)
  • 控制器类 (Spring MVC控制器)
  • 仓储接口 (Spring Data JPA)
  • 领域特定的验证器和格式化器

实体继承层次结构

  • BaseEntity - 为所有实体提供ID字段
  • NamedEntity extends BaseEntity - 添加name字段
  • Person extends BaseEntity - 为人员实体添加firstName/lastName字段

数据库模式关系

  • Owner (1) → (N) Pet 通过 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  • Pet (1) → (N) Visit 通过 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  • Vet (N) ↔ (N) Specialty 通过 @ManyToMany(fetch = FetchType.EAGER)

Web层模式

  • 控制器返回Thymeleaf视图名称或ModelAndView对象
  • 使用Bean Validation注解进行表单验证 (@Valid, @NotBlank)
  • 业务规则的自定义验证器 (例如 PetValidator)
  • 使用Spring Data PageablePage支持分页

部署说明

Docker部署

# 构建Docker镜像 docker build -t petclinic . # 运行容器 docker run -p 8081:8081 petclinic

配置文件

  • default: H2内存数据库 (application.properties中database=h2)
  • mysql: MySQL数据库配置 (application-mysql.properties)
  • postgres: PostgreSQL数据库配置 (application-postgres.properties)

生产环境配置

  • 支持多种数据库配置文件
  • 集成Spring Boot Actuator监控端点
  • 支持GraalVM原生镜像编译
  • 注意: 应用默认运行在端口8081

贡献指南

我们欢迎贡献!请遵循以下步骤:

  1. Fork本仓库
  2. 创建特性分支 (git checkout -b feature/your-feature)
  3. 提交更改前运行代码检查: ./mvnw spotless:apply && ./mvnw test
  4. 提交更改 (git commit -am 'Add some feature')
  5. 推送到分支 (git push origin feature/your-feature)
  6. 创建Pull Request

开发规范:

  • 遵循Google Java代码风格
  • 编写单元测试覆盖新功能
  • 更新相关文档

问题跟踪: issues

许可证

Apache License 2.0