定时任务与数据库同步逻辑

张开发
2026/6/30 17:43:59 15 分钟阅读
定时任务与数据库同步逻辑
一、定时任务实现方式项目采用 Spring 框架的 Scheduled 注解 实现定时任务调度主要特点如下调度方式基于 Cron 表达式支持精确到秒级别的定时触发环境控制所有定时任务在执行前会检查环境变量 lowCodeMode仅当值为 prod生产环境时才真正执行同步逻辑避免在开发环境误操作任务管理支持从数据库动态读取任务配置实现可配置化的定时调度二、定时任务分类1. 通用数据同步任务执行时机每天凌晨 0 点执行功能描述从配置表中读取源库和目标库的连接信息以及需要同步的表列表实现跨库数据同步。执行流程1. 检查当前环境是否为生产环境2. 从配置表获取启用的数据库连接配置源库URL、用户名、密码、schema目标库对应信息3. 获取需要同步的表列表按同步顺序排序4. 分别建立源库和目标库的 JDBC 连接5. 逐表执行同步先从源库查询全量数据然后删除目标库原有数据最后批量插入新数据6. 对于月度表同步完成后额外更新 end_dt 字段2. SQL配置化同步任务执行时机每 5 分钟执行一次功能描述从数据库读取同步任务配置根据每个任务配置的 Cron 表达式判断是否需要执行支持灵活的定时策略。执行流程1. 查询同步任务配置表获取所有任务列表2. 遍历每个任务解析其 Cron 表达式3. 计算该任务的下次执行时间4. 若下次执行时间在 6 分钟内且任务状态为启用则执行同步5. 执行时先运行删除 SQL 清理数据再运行插入 SQL 添加数据6. 支持累加同步模式可基于上次执行时间增量同步3. 业务表同步任务执行时机每天凌晨 0 点执行执行流程1. 从连接配置表获取外部数据库的连接信息2. 建立 JDBC 连接到外部数据库3. 从 SQL 配置表获取各表的查询语句4. 执行查询并将结果集映射到实体对象5. 清空本地对应表的数据6. 批量插入同步过来的数据三、数据库操作场景场景一同一个数据库内操作适用情况数据查询、本地表数据处理、业务逻辑操作操作方式通过 MyBatis-Plus 框架操作使用 Mapper 接口进行 CRUD配置文件中定义主数据源连接信息支持动态 SQL 查询可直接执行 SQL 语句典型应用查询同步任务配置表读取数据库连接配置执行用户查询请求本地表的数据更新和删除场景二不同数据库之间同步适用情况跨库数据迁移、数据备份、多数据源聚合操作方式配置管理源库和目标库的连接信息存储在数据库配置表中包括 URL、用户名、密码、schema连接建立使用 JDBC 的 DriverManager 分别建立源库和目标库的连接数据传输从源库查询数据后在目标库执行删除和插入操作批量优化使用批量提交机制每 100 条数据提交一次提高同步效率同步策略全量同步每次清空目标表重新插入所有数据增量同步基于上次执行时间只同步新增或变更的数据场景三不同类型数据库之间同步适用情况异构数据库迁移、跨数据库平台数据整合支持的数据库类型MySQL生产环境主数据库PostgreSQL开发环境主数据库、外部数据源国网 NDS 数据库特殊数据库驱动用于对接国家电网数据平台操作方式驱动适配配置文件中指定不同数据库的驱动类名连接参数不同数据库使用各自的 URL 格式和连接参数SQL 兼容生成的 SQL 需考虑不同数据库的语法差异Schema 处理同步时需指定源库和目标库的 schema 名称典型场景从 PostgreSQL 外部库同步到 MySQL 本地库从国网 NDS 数据库同步数据到业务库开发环境 PostgreSQL 与生产环境 MySQL 的数据迁移四、配置管理数据库连接配置配置项说明源库 URL源数据库的 JDBC 连接地址源库用户名 / 密码源数据库认证信息源库 Schema源数据库的模式名目标库 URL目标数据库的 JDBC 连接地址目标库用户名 / 密码目标数据库认证信息目标库 Schema目标数据库的模式名状态标识启用或禁用该配置同步表配置配置项说明表名需要同步的表名称表描述表的业务含义说明同步顺序多表同步时的执行顺序状态标识启用或禁用该表同步SQL 同步配置配置项说明表名同步目标表名称任务描述同步任务的业务说明删除 SQL同步前清理数据的 SQL插入 SQL同步数据的 SQLCron 表达式定时执行的时间规则状态运行或停止是否累加是否增量同步上次执行时间用于增量同步的时间基准五、关键技术要点1. 环境隔离所有定时任务通过环境变量控制执行确保只在生产环境运行2. 配置化设计数据库连接、同步表、同步 SQL 均存储在数据库中支持动态配置3. 批量处理优化数据同步采用批量提交机制避免逐条插入的性能问题4. 动态调度支持从数据库读取 Cron 表达式实现灵活的定时策略5. 事务保证同步操作使用事务管理确保数据一致性6. 异常处理同步失败时记录日志单表失败不影响其他表同步7. 多数据源支持可同时连接多个不同类型的数据库进行数据交互

更多文章