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