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.
 
 
 
Zhang Shun c6ccab5404 feat(resume): add consent-aware AI work experience optimization with production safeguards 4 hours ago
..
docs docs: finalize V33 release governance 2 months ago
src feat(resume): add consent-aware AI work experience optimization with production safeguards 4 hours ago
.gitignore chore: initialize zhilai backend project 2 months ago
README.md feat(chat): 增加实时通信并统一轻松聘品牌 2 weeks ago
pom.xml feat(chat): 增加实时通信并统一轻松聘品牌 2 weeks 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 短信验证码登录,验证码从应用日志中获取

文档

已知限制

  1. 短信验证码为 Mock 实现,仅打印到日志(MOCK SMS CODE: ... code=<6位>)
  2. 生产环境配置需通过环境变量提供(JWT_SECRET / DB_PASSWORD / RabbitMQ 账号),不提交真实密钥
  3. career/CareerService.java 为历史遗留空接口占位(投递功能已由 application 模块实现),待产品确认