You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
4 weeks ago | |
|---|---|---|
| .. | ||
| docs | 2 months ago | |
| src | 4 weeks ago | |
| .gitignore | 2 months ago | |
| README.md | 2 months ago | |
| pom.xml | 1 month ago | |
README.md
职来 (mydreamjob) 后端服务
Spring Boot 3.2.5 + Java 17 | 职来大学生求职服务平台后端基线
项目结构
mydreamjob-server/
├── pom.xml # Maven 依赖配置
├── .gitignore # Git 忽略规则
└── src/
├── main/
│ ├── java/com/mydreamjob/
│ │ ├── MyDreamjobApplication.java
│ │ ├── config/ # 配置类
│ │ │ ├── SecurityConfig.java
│ │ │ ├── RedisConfig.java
│ │ │ ├── RabbitConfig.java
│ │ │ ├── WebMvcConfig.java
│ │ │ └── SchedulingConfig.java
│ │ ├── common/
│ │ │ ├── api/ # 统一响应格式
│ │ │ │ ├── ApiResponse.java
│ │ │ │ └── PageResponse.java
│ │ │ ├── exception/ # 异常处理
│ │ │ │ ├── BusinessException.java
│ │ │ │ ├── ErrorCode.java
│ │ │ │ └── GlobalExceptionHandler.java
│ │ │ ├── logging/ # 日志过滤
│ │ │ │ ├── RequestIdFilter.java
│ │ │ │ └── RequestLoggingFilter.java
│ │ │ └── health/ # 健康检查
│ │ │ └── HealthController.java
│ │ ├── auth/ # 认证模块
│ │ │ ├── User.java
│ │ │ ├── SmsVerificationCode.java
│ │ │ ├── AuthToken.java
│ │ │ ├── UserRepository.java
│ │ │ ├── SmsVerificationCodeRepository.java
│ │ │ ├── AuthTokenRepository.java
│ │ │ ├── JwtTokenProvider.java
│ │ │ ├── JwtAuthenticationFilter.java
│ │ │ ├── SmsVerificationService.java
│ │ │ └── AuthService.java
│ │ ├── audit/ # 审计模块
│ │ │ ├── AuditLog.java
│ │ │ ├── AuditLogRepository.java
│ │ │ └── AuditService.java
│ │ ├── controller/ # 控制器
│ │ │ ├── AuthController.java
│ │ │ ├── SystemController.java
│ │ │ └── ApiController.java
│ │ ├── job/ # 岗位模块(骨架)
│ │ ├── career/ # 投递模块(骨架)
│ │ ├── messaging/ # 聊天模块(骨架)
│ │ └── profile/ # 评分模块(骨架)
│ ├── resources/
│ │ ├── application.yml # 主配置
│ │ ├── application-dev.yml # 开发环境配置
│ │ ├── application-dev.example.yml # 配置模板
│ │ └── db/migration/
│ │ ├── V1__base_schema.sql # 基础表结构
│ │ └── V1_1__seed_data.sql # 种子数据
│ └── test/java/com/mydreamjob/
│ ├── MyDreamjobApplicationTest.java
│ ├── auth/
│ │ ├── SmsVerificationServiceTest.java
│ │ └── JwtTokenProviderTest.java
└── docs/ # 项目文档
├── ERD.md
├── api-v0.1.md
└── acceptance-week1.md
快速启动
1. 启动基础设施
cd backend-infra
docker compose up -d
2. 验证依赖服务
# MySQL (3307)
mysql -h 127.0.0.1 -P 3307 -u root -p"$MYSQL_ROOT_PASSWORD" -e 'SELECT 1'
# Redis (6379)
redis-cli -h 127.0.0.1 -p 6379 ping
# RabbitMQ 管理界面 (非 guest,使用环境变量账号)
curl http://127.0.0.1:15672/api/health/check-alive -u "$RABBITMQ_USERNAME:$RABBITMQ_PASSWORD"
3. 编译与测试
cd mydreamjob-server
mvn clean compile
mvn test
4. 启动应用
mvn spring-boot:run -Dspring-boot.run.profiles=dev
5. 验证接口
# 健康检查
curl http://localhost:8080/api/v1/health
# 发送验证码
curl -X POST "http://localhost:8080/api/v1/auth/sms/send?phone=13800000001&purpose=login"
# 登录(从日志获取验证码)
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"phone":"13800000001","code":"<验证码>"}'
# 查看用户信息
curl http://localhost:8080/api/v1/auth/me \
-H "Authorization: Bearer <accessToken>"
环境变量
生产安全要求:
JWT_SECRET、DB_PASSWORD、RABBITMQ_USERNAME、RABBITMQ_PASSWORD必须通过环境变量显式提供,禁止使用默认值或写入代码。缺失时应用启动失败。
| 变量 | 默认值 | 说明 |
|---|---|---|
| SPRING_PROFILES_ACTIVE | dev | 激活的 Spring Profile |
| DB_URL | jdbc:mysql://127.0.0.1:3307/mydreamjob | 数据库连接 URL |
| DB_USERNAME | mydreamjob | 数据库用户名 |
| DB_PASSWORD | 必填 | 数据库密码(无默认值) |
| REDIS_HOST | 127.0.0.1 | Redis 主机 |
| REDIS_PORT | 6379 | Redis 端口 |
| REDIS_PASSWORD | (空) | Redis 密码 |
| RABBITMQ_HOST | 127.0.0.1 | RabbitMQ 主机 |
| RABBITMQ_PORT | 5672 | RabbitMQ 端口 |
| RABBITMQ_USERNAME | 必填 | RabbitMQ 用户名(禁止 guest) |
| RABBITMQ_PASSWORD | 必填 | RabbitMQ 密码(禁止 guest) |
| JWT_SECRET | 必填 | JWT 签名密钥(至少 256 位,无默认值) |
| JWT_EXPIRATION_MS | 86400000 | Access Token 过期时间 (毫秒) |
| JWT_REFRESH_EXPIRATION_MS | 604800000 | Refresh Token 过期时间 (毫秒) |
| SMS_MOCK_ENABLED | true | 是否启用 Mock 短信 |
| SMS_CODE_EXPIRE_SECONDS | 300 | 验证码有效期 (秒) |
| SMS_LOCKOUT_SECONDS | 300 | 锁定时间 (秒) |
Windows 启动方式
# PowerShell 设置环境变量(每次新终端需重设)
$env:DB_URL = "jdbc:mysql://127.0.0.1:3307/mydreamjob?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai"
$env:DB_USERNAME = "mydreamjob"
$env:DB_PASSWORD = "<你的数据库密码>"
$env:RABBITMQ_USERNAME = "mydreamjob_dev"
$env:RABBITMQ_PASSWORD = "<你的 RabbitMQ 密码>"
$env:JWT_SECRET = "<至少256位的随机密钥>"
$env:SMS_MOCK_ENABLED = "true"
# 启动
cd mydreamjob-server
mvn spring-boot:run -Dspring-boot.run.profiles=dev
Mock 验证码打印在服务日志中:MOCK SMS CODE: phone=... code=<6位验证码>
端口说明
| 服务 | 端口 | 说明 |
|---|---|---|
| 后端 API | 8080 | Spring Boot 应用 |
| MySQL | 3307 | Docker 容器 (127.0.0.1:3307:3306) |
| Redis | 6379 | Docker 容器 (127.0.0.1:6379:6379) |
| RabbitMQ | 5672 | Docker 容器 (127.0.0.1:5672:5672) |
| RabbitMQ 管理 | 15672 | Docker 容器 (127.0.0.1:15672:15672) |
| Swagger UI | 8080/swagger-ui.html | OpenAPI 文档 |
技术栈
- Spring Boot 3.2.5 - 应用框架
- Java 17 - 编程语言
- Spring Security - 安全框架
- Spring Data JPA - ORM
- Spring Data Redis - 缓存
- Spring AMQP - 消息队列
- Flyway - 数据库迁移
- JWT (jjwt 0.12.5) - 认证
- SpringDoc OpenAPI - API 文档
- MySQL 8.4 - 数据库
- Redis 7.4 - 缓存/验证码存储
- RabbitMQ 3.13 - 消息队列
- Lombok - 代码简化
测试账号
| 角色 | 手机号 | 用途 |
|---|---|---|
| ADMIN | 13800000001 | 管理员测试 |
| STUDENT | 13800000002 | 学生测试 |
| COMPANY | 13800000003 | 企业测试 |
注: 使用 Mock 短信验证码登录,验证码从应用日志中获取
文档
已知限制
- 短信验证码为 Mock 实现,仅打印到日志(
MOCK SMS CODE: ... code=<6位>) - 生产环境配置需通过环境变量提供(JWT_SECRET / DB_PASSWORD / RabbitMQ 账号),不提交真实密钥
career/CareerService.java为历史遗留空接口占位(投递功能已由 application 模块实现),待产品确认