132 lines
4.5 KiB
Markdown
132 lines
4.5 KiB
Markdown
|
||
# 设备数据同步功能
|
||
|
||
## 功能介绍
|
||
|
||
本模块实现了从本地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必须唯一,否则会导致数据冲突
|