# AGENTS.md > 本文件用于帮助后续 OpenCode 会话快速了解本仓库,避免常见错误。 ## 项目概况 - **技术栈**:Java 17 + Spring Boot 3.3.2 + Spring Security 6 + MyBatis-Plus 3.5.7 - **构建工具**:Maven(单模块 POM) - **应用入口**:`com.ichangzuo.iczApplication` - **默认端口**:8989(dev/test)/ 9999(prod) - **接口文档**:启动后访问 `http://localhost:8989/doc.html`(Knife4j) ## 运行环境依赖 - **MySQL**:数据库名 `music`,开发配置在 `application-dev.yml` - **Redis**:端口 16378,开发环境密码 `CZwy168` - **运行时 Profile**: - `dev`(默认):本地开发 - `test`:测试环境(数据库 `192.168.5.2`) - `prod`:生产环境 > 注意:`application.yml` 中默认激活的是 `prod`,但 Maven 的 `dev` profile 是默认激活的。 ## 常用命令 ```bash # 开发模式启动(使用 dev profile) mvn spring-boot:run -P dev # 打包(默认 dev) mvn clean package # 测试环境打包 mvn clean package -P test # 生产环境打包 mvn clean package -P prod # 运行测试 mvn test # 跳过测试打包 mvn clean package -DskipTests ``` ## 项目结构 ``` src/main/java/com/ichangzuo/ iczApplication.java # 启动类(注意不是 YouLaiApplication) common/ # 公共模块:注解、常量、枚举、异常、工具类 config/ # 自动装配配置(CORS、Redis、Security、Swagger 等) core/ # 核心功能:切面(日志、防重提交)、过滤器、Security module/ # 业务模块 auth/ # 认证模块 codegen/ # 代码生成器 file/ # 文件模块 mail/ # 邮件模块 sms/ # 短信模块 websocket/ # WebSocket 模块 system/ # 系统管理模块:用户、角色、菜单、部门、字典等 controller/ converter/ # MapStruct 转换器 event/ # 事件处理 handler/ listener/ model/ # bo, dto, entity, form, query, vo mapper/ service/ ``` ## 关键配置与约定 ### 数据库与 ORM - **MyBatis-Plus**: - 逻辑删除字段:`is_deleted`(删除=1,未删除=0) - 主键 ID 类型:`none` - 驼峰下划线自动转换已开启 - **数据源**:Druid 连接池 ### 安全与认证 - 基于 Spring Security + JWT 的无状态认证 - JWT 密钥配置在 `application.yml` 的 `security.jwt.key` - 部分接口在白名单中(如 `/api/v1/auth/**`、`/client/**` 等),无需认证 ### 文件存储 - 支持 `minio` 和 `aliyun` 两种类型,通过 `oss.type` 切换 - 当前测试/生产环境使用 `minio` ### 缓存 - Spring Cache + Redis,但当前 `spring.cache.enabled=false` ### 定时任务 - 集成 XXL-JOB,但默认 `enabled: false` ### 支付 - 集成支付宝和微信支付,配置在 `pay.ali` 和 `pay.wx` 下 ## 开发注意事项 1. **启动类名称**:实际启动类是 `iczApplication`,不是 README 中提到的 `YouLaiApplication.java` 2. **MapStruct**:项目使用 MapStruct 进行实体转换,配合 Lombok 使用,需确保 `lombok-mapstruct-binding` 依赖存在 3. **Undertow 替代 Tomcat**:`spring-boot-starter-tomcat` 被排除,使用 `spring-boot-starter-undertow` 4. **打包配置**:`spring-boot-maven-plugin` 配置了 `ZIP` layout,并排除了 Lombok 5. **Maven Profile 优先级**:`dev` profile 默认激活,但 Spring 的 `application.yml` 默认激活 `prod`。实际运行时以 Spring 的 `spring.profiles.active` 为准