# datasync **Repository Path**: dhd_index/datasync ## Basic Information - **Project Name**: datasync - **Description**: 一款Java开发的数据同步软件,支持mysql,sqlserver,oracle之间的数据同步,理论上支持任何jdbc可访问的关系数据库。本软件是由实际项目驱动而开发,之后抽取成为单独项目并开源。 支持定时同步与固定频率同步,全量同步和增量同步,以及分页查询同步。 主要使用技术:spring boot,spring jdbc,cron定时表达式 数据同步策略:全量同步,增量同步 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 30 - **Created**: 2016-09-15 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # datasync 一款Java开发的数据同步软件,支持mysql,sqlserver,oracle之间的数据同步,理论上支持任何jdbc可访问的关系数据库。本软件是由实际项目驱动而开发,之后抽取成为单独项目并开源。 支持定时同步与固定频率同步,全量同步和增量同步,以及分页查询同步。 **主要使用技术**:spring boot,spring jdbc,cron定时表达式 **数据同步策略**:全量同步,增量同步 ### 全量同步 每次同步时,先清空目标表所有记录,再从源表查出所有记录并插入到目标表。 ### 增量同步 每次同步时,获取出上次同步的分界点,再从源表的分界点开始增量同步到目标表。 ### 使用方法 修改spring-config.xml配置以下前三步 + **配置数据源** ```xml ``` + **配置同步Job** ```xml ``` > strategy:all 表示全量同步。 > originds:源数据源 > targetds:目标数据源 > selectSql:查询源数据表的sql语句 > insertSql:插入到目标表的sql,切记字段要与selectSql中的一一对应 > deleteSql:执行全量同步时,需要先清空目标表记录,这里配置清空目标表的sql ```xml ``` > strategy:delta 表示增量同步。 > originds:源数据源 > targetds:目标数据源 > pageSize:分页查询大小 > startTime:增量同步要求源表必须有一个时间字段,用于计算分界点。此参数用于配置第一次同步时,从哪个时间点开始同步数据,之后系统会记录最新的时间点,并保存到syncinf.properties文件中。系统优先从syncinf.properties文件中取,若取不到再使用本参数。因此若配置了此参数,系统只在第一次同步时使用(因为此时syncinf.properties文件中是空的),之后会保存到文件中,优先使用文件中的参数。新配置的同步任务,请在此处配置startTime。 > selectSql:查询源数据表的sql语句 > insertSql:插入到目标表的sql,切记字段要与selectSql中的一一对应 > **sql动态参数说明** > 有必要着重解释一下selectSql中的几个动态参数,因为增量同步是针对大数据量设计的,所以在执行查询时,不能一次将所有数据查询出来,这样做有内存溢出的风险。因此,分页查询是必须要使用的。本软件巧妙的将sql语句配置出来,就是为了解决不同数据库分页查询语句不一致。若不配置出来,由系统去计算分页语句,那么计算过程太复杂,支持的数据库也是有限的(前面说过“理论上支持任何jdbc可访问的关系数据库”就是这个道理)。将sql语句配置出来后,开发者还可以按照需求定制条件,过滤掉无需同步的数据,岂不妙哉。 > 既然将sql语句配置出来,且要支持分页查询,那么必然需要将分页信息动态传参给sql语句。以下4个参数,系统会判断如果存在那么动态传递进去,由jdbcTemplate负责替换并执行。 > startTime:开始时间分界点 > startRow:开始行,动态计算 > endRow:结束行,动态计算 > pageSize:分页大小,会替换为bean中的pageSize值 > 虽然说这4个参数都不是必须的,但如果不用startTime标识分界点,那么和全量同步又有什么分别呢?然后也没有限制一定要使用分页查询,因为有的系统数据增长不快,可以一次将新增的所有数据查询并同步到目标表。 + **配置定时器** ```xml ``` > 本示例使用cron表达式配置定时器,也可以配置固定频率同步,请参考spring的定时配置文档 + **运行程序** `com.zle.datasync.Application` 最后,尽情enjoy本软件带来的乐趣吧!