999856e11004fc22c0899c2d26a886de363746d5
数据同步微服务
项目简介
数据同步微服务用于从第三方接口同步人员、项目和报告数据到MySQL数据库。支持定时任务自动同步和手动触发同步。
功能特性
-
数据同步
- 从第三方接口同步人员数据
- 从第三方接口同步项目(工程)数据
- 从第三方接口同步报告数据
- 支持字段大小写兼容
-
同步方式
- 定时任务:每晚12点自动执行全量同步
- 手动触发:通过REST API手动触发同步
-
同步策略
- 先删除表中所有现有数据
- 再全量同步接口返回的数据
- 使用接口返回的ID作为主键
技术栈
- Java 21
- Spring Boot 3.1.5
- Spring Cloud 2022.0.4
- MyBatis Plus 3.5.3.1
- MySQL 8.2.0
- Nacos(服务注册与发现)
项目结构
src/main/java/com/zhonghe/datasync/
├── common/ # 公共类
│ ├── exception/ # 异常处理
│ ├── Result.java # 统一响应结果
│ └── ResultCode.java # 响应码枚举
├── config/ # 配置类
├── controller/ # 控制器
├── dto/ # 数据传输对象
│ ├── request/ # 请求DTO
│ └── response/ # 响应DTO
├── entity/ # 实体类
├── mapper/ # MyBatis映射器
├── scheduled/ # 定时任务
├── service/ # 业务服务
└── util/ # 工具类
数据库表结构
employee(人员表)
- id: 主键(VARCHAR)
- name: 人员姓名
- phone_number: 人员手机号
- password: 密码(明文存储)
- created_at: 创建时间
- updated_at: 更新时间
project(项目表)
- id: 主键(BIGINT)
- project_name: 工程名称
- created_at: 创建时间
- updated_at: 更新时间
report(报告表)
- id: 主键(BIGINT)
- order_number: 委托编号
- sample_code: 样品编号
- bg_sample_code: 报告编号
- project_name: 工程名称
- project_id: 工程主键
- experiment_name: 试验人员
- real_experiment_date: 试验时间
- created_at: 创建时间
- updated_at: 更新时间
配置说明
环境变量
| 变量名 | 说明 | 默认值 |
|---|---|---|
| MYSQL_HOST | MySQL主机地址 | localhost |
| MYSQL_PORT | MySQL端口 | 3306 |
| MYSQL_DATABASE | MySQL数据库名 | datasync |
| MYSQL_USERNAME | MySQL用户名 | root |
| MYSQL_PASSWORD | MySQL密码 | root |
| NACOS_SERVER | Nacos服务器地址 | localhost:8848 |
| NACOS_USERNAME | Nacos用户名 | nacos |
| NACOS_PASSWORD | Nacos密码 | nacos |
| THIRD_PARTY_AUTH_URL | 第三方鉴权接口地址 | http://limspro.91jiance.net/api/LoginAPI/GetAdminUserCode |
| THIRD_PARTY_EMPLOYEE_URL | 第三方人员接口地址 | http://121.40.18.211:20016/api/EmployeeAPI/GetZHEmployeeList |
| THIRD_PARTY_PROJECT_URL | 第三方项目接口地址 | http://121.40.18.211:20030/API/GetZHProjectList |
| THIRD_PARTY_REPORT_URL | 第三方报告接口地址 | http://121.40.18.211:20030/API/GetZHSampleAllList |
| THIRD_PARTY_USER_NAME | 第三方接口用户名 | 13120251031 |
| THIRD_PARTY_PASS_WORD | 第三方接口密码 | whfst@1901 |
API接口
1. 同步所有数据
- URL:
/api/v1/sync/all - 方法: POST
- 说明: 同步人员、项目和报告数据
2. 同步人员数据
- URL:
/api/v1/sync/employees - 方法: POST
- 说明: 仅同步人员数据
3. 同步项目数据
- URL:
/api/v1/sync/projects - 方法: POST
- 说明: 仅同步项目数据
4. 同步报告数据
- URL:
/api/v1/sync/reports - 方法: POST
- 说明: 仅同步报告数据
定时任务
定时任务配置在 DataSyncScheduledTask 类中,使用 cron 表达式:
- 执行时间: 每晚12点(0 0 0 * * ?)
- 执行内容: 同步所有数据(人员、项目、报告)
部署说明
1. 数据库初始化
执行 src/main/resources/db/schema.sql 创建数据库表。
2. 构建项目
mvn clean package
3. Docker部署
docker build -t data-sync-service:1.0.0 .
docker run -d -p 8080:8080 \
-e MYSQL_HOST=your-mysql-host \
-e MYSQL_USERNAME=your-username \
-e MYSQL_PASSWORD=your-password \
data-sync-service:1.0.0
注意事项
- 字段大小写兼容: 使用
@JsonProperty注解处理接口返回字段的大小写差异 - ID使用: 使用接口返回的ID作为数据库主键,不自动生成
- 同步策略:
- 人员数据:增量同步(不删除现有数据),新增用户密码为手机号后六位,老用户密码保持不变
- 项目和报告数据:全量同步(先删除后插入)
- 密码管理:
- 新增用户:密码自动设置为手机号后六位
- 更新用户:密码字段不会被修改,保持原有密码
- 事务管理: 同步操作使用事务,失败时会回滚
- 日志记录: 所有同步操作都会记录详细日志
开发规范
本项目遵循《微服务开发规范文档.md》中的开发规范,包括:
- 代码风格规范
- 命名规范
- 异常处理规范
- 日志规范
Description
Languages
Java
99.6%
Shell
0.3%
Dockerfile
0.1%