Stwzhj-Cloud-Plus/stwzhj-modules/stwzhj-baseToSt/README.md

132 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 设备数据同步功能
## 功能介绍
本模块实现了从本地MySQL数据库定时抽取设备数据到目标PostgreSQL数据库的功能。每个地市部署一个程序实例从本地MySQL数据库抽取数据到统一的目标PostgreSQL数据库。
## 主要特性
1. **轻量化设计**移除了nacos等微服务相关依赖只保留了必要的功能
2. **增量同步**根据目标表中的info_source查询该地市最新更新的数据然后从源表中抽取
3. **设备类型映射**通过sys_dict_data字典表进行设备类型转换
4. **批量处理**:支持批量插入和更新,提高同步效率
5. **可配置**所有配置通过application.yml文件进行配置
## 部署架构
每个地市部署一个程序实例从本地MySQL数据库抽取数据到统一的目标PostgreSQL数据库
```
地市A实例 -> 本地MySQL A -> 目标PostgreSQL
地市B实例 -> 本地MySQL B -> 目标PostgreSQL
地市C实例 -> 本地MySQL C -> 目标PostgreSQL
```
## 配置说明
### 数据源配置
在application.yml中配置源数据库和目标数据库
```yaml
spring:
datasource:
dynamic:
primary: target #设置默认数据源为目标数据库
strict: false #严格匹配数据源
datasource:
# 源数据库(MySQL) - 每个地市配置不同的源数据库
source:
url: jdbc:mysql://localhost:3306/wzhj_hs
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 目标数据库(PostgreSQL) - 所有地市使用相同的目标数据库
target:
url: jdbc:postgresql://localhost:5432/your_database
username: postgres
password: postgres
driver-class-name: org.postgresql.Driver
```
### 设备同步配置
```yaml
device-sync:
# 信息来源标识 - 每个地市配置不同的info_source
info-source: "3418"
# 源表结构类型 - v1或v2
# v1: 第一种表结构字段使用下划线命名如police_no
# v2: 第二种表结构部分字段使用驼峰命名如policeNo
source-table-type: v1
# 设备类型映射字典类型
dict-type: device_type_tost
# 批量插入大小
batch-size: 50
# 定时任务cron表达式
cron: 0 0/10 * * * ?
```
### 源表结构类型说明
本系统支持两种不同的源表结构:
1. **v1类型**:第一种表结构
- 字段使用下划线命名如police_no、police_name、phone_num等
- 包含所有字段,包括录入单位、修改单位、设备品牌、设备型号等详细信息
2. **v2类型**:第二种表结构
- 部分字段使用驼峰命名如policeNo、policeName、phoneNum等
- 只包含核心字段,不包含录入单位、修改单位、设备品牌、设备型号等详细信息
根据源数据库的表结构在配置文件中设置相应的source-table-type值。
## 数据同步逻辑
1. 根据目标表中的info_source查询该地市最新更新的时间
2. 从本地MySQL数据库查询更新时间大于该时间的所有设备数据
3. 通过sys_dict_data字典表进行设备类型映射
4. 根据device_code和info_source判断设备是否存在存在则更新不存在则新增
5. 批量处理数据,提高同步效率
## 设备类型映射
设备类型映射通过sys_dict_data字典表实现配置规则如下
- dict_type: device_type_tost
- dict_value: 源表的device_type值
- dict_label: 目标表的device_type值
示例:
| dict_type | dict_value | dict_label |
|-----------|------------|------------|
| device_type_tost | 1 | 1 |
| device_type_tost | 2 | 2 |
| device_type_tost | 北斗 | 1 |
| device_type_tost | 车载 | 2 |
## 定时任务
系统默认配置了两个定时任务:
1. sendToSt设备数据同步到省厅原有功能
2. syncDevicesFromSource从源数据库同步设备数据新增功能
定时任务的执行时间可以通过application.yml中的cron表达式进行配置。
## 使用说明
1. 修改application.yml配置文件配置本地MySQL数据库和目标PostgreSQL数据库的连接信息
2. 配置该地市的info_source标识
3. 配置设备类型映射字典数据
4. 启动应用,系统将自动执行定时同步任务
## 注意事项
1. 确保源数据库和目标数据库的t_device表结构正确
2. 确保sys_dict_data表中配置了正确的设备类型映射
3. 首次同步时,如果目标表中无数据,将同步所有源数据
4. 建议在非高峰期执行同步任务,避免影响业务系统性能
5. 不同地市的info_source必须唯一否则会导致数据冲突