千家信息网

如何使用Java数据开发辅助工具Docker与普通程序

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,如何使用Java数据开发辅助工具Docker与普通程序,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。需求背景:有很多业务系统,他们的数据
千家信息网最后更新 2026年11月01日如何使用Java数据开发辅助工具Docker与普通程序

如何使用Java数据开发辅助工具Docker与普通程序,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

需求背景:

有很多业务系统,他们的数据库是相互独立的,俗称数据孤岛,为了做数据统计分析,就需要把这些数据归集在一个数据库中,比如数据仓库,然后多表关联查询,方便开发数据应用。希望能有这样的工具,指定两个数据库和表名,就可以将表从源数据库拷贝到目标数据库中。具体需求如下:

  • 能自动同步表结构,如:源表加字段,目标表自动加字段。

  • 支持增量或全量复制数据,比如按日期进行复制数据。

  • 支持指定字段同步,只同步关心的那些字段。

  • 支持主流的关系型数据库: mysql、db2、postgresql、oracle、sqlserver

  • 源表和目标表表名可以不同,字段名也可以不同(已存在目标表的情况下)

因为自己要用,我就自己写了一个,顺便熟悉下 java 开发(之前一直用 Python,不得不说,Java 真浪费时间),本程序的最大用处就是构建集市或数仓所需要的基础层数据源,欢迎感兴趣的朋友一起加入。

程序的使用方法

Docker 方式:

这里用到三个容器:

  • app 也就是主程序本身,app 容器使用的程序文件就是 release 目录下的文件,已经做了绑定。

  • mysql 测试用的,作为源数据库,已提前放好了有 7000 条测试数据的表 somenzz_users。

  • postgres 测试用的,作为目标数据库,没有数据。

先部署,执行 docker-compose up -d 就会自动完成应用和数据库的部署:

$ git clone https://github.com/somenzz/database-sync.git$ cd database-sync$ docker-compose up -dCreating database-sync_postgres_1 ... doneCreating database-sync_app_1      ... doneCreating database-sync_mysql_1    ... done

这样三个容器就启动了,使用 docker ps -a |grep database-sync 可以查看到三个正在运行的容器:

现在直接使用 docker exec -i database-sync_app_1 java -jar database-sync-1.3.jar 来执行程序:

mysql 容器已有测试数据,release/config/config.json 已经配置好了数据库的连接,因此可以直接试用,以下演示的是从 mysql 复制表和数据到 postgres:

1. 全量复制,自动建表:

docker exec -i database-sync_app_1 java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public users --sync-ddl

如果你不想每次都敲 docker exec -i database-sync_app_1 ,可以进入容器内部执行:

(py38env) ➜  database-sync git:(master) ✗ docker exec -it database-sync_app_1 /bin/bashroot@063b1dc76fe1:/app# lsconfig database-sync-1.3.jar  lib  logsroot@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public users -sd

2. 增量复制:

root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public zz_users "create_at >= '2018-01-09'"

3. 指定字段:

root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public zz_users -ff="user_id,name,age" -tf="user_id,name,age" "create_at >= '2018-01-09'"

普通方式

程序运行前确保已安装 java 1.8 或后续版本,已经安装 maven,然后 clone 源码,打包:

git clone https://gitee.com/somenzz/database-sync.gitcd database-syncmvn package

此时你会看到 target 目录,将 target 下的 lib 目录 和 database-sync-1.3.jar 复制出来,放在同一目录下,然后再创建一个 config 目录,在 config 下新建一个 config.json 文件写入配置信息,然后将这个目录压缩,就可以传到服务器运行了,请注意先充分测试,jdk 要求 1.8+

[aaron@hdp002 /home/aaron/App/Java/database-sync]$ ls -ltrtotal 48drwxr-xr-x 2 aaron aaron  4096 Apr 23  2020 lib-rwxrw-r-- 1 aaron aaron   157 Jun 23  2020 run.shdrwxrwxr-x 2 aaron aaron  4096 Jul  3  2020 logs-rw-rw-r-- 1 aaron aaron 24773 Mar 16  2021 database-sync-1.3.jardrwxr-xr-x 7 aaron aaron  4096 Aug  3  2020 jdk1.8.0_231drwxrwxr-x 2 aaron aaron  4096 Feb 19 17:07 config

你也可以直接下载我打包好的使用。

程序名称叫 database-sync,运行方式是这样的:

(py38env) ➜  target git:(master) ✗ java -jar database-sync-1.3.jar -h      Usage: java -jar database-sync-1.0.jar [options] {fromDB} {fromSchema} {fromTable} {toDB} {toSchema} {toTable} [whereClause]options:        -v or --version                            :print version then exit        -h or --help                               :print help info then exit        -sd or --sync-ddl                          :auto synchronize table structure        -ff=col1,col2 or --from-fields=col1,col2   :specify from fields        -tf=col3,col4 or --to-fields=col3,col4     :specify to fields        --no-feature or -nf                        :will not use database's feature

帮助说明:

[] 中括号里的内容表示选填,例如 [options] 表示 options 下的参数不是必须的。

1、其中 options 参数解释如下:

--sync-ddl 或者 -sd : 加入该参数会自动同步表结构。

--from_fields=col1,col2 或者 -ff=col1,col2 : 指定原表的字段序列,注意 = 前后不能有空格。

--to_fields=col3,col4 或者 -tf=col3,col4 : 指定目标表的字段序列,注意 = 前后不能有空格。

2、whereClause 表示 where 条件,用于增量更新,程序再插入数据前先按照 where 条件进行清理数据,然后按照 where 条件从原表进行读取数据。whereClause 最好使用双引号包起来,表示一个完整的参数。如:"jyrq='2020-12-31'"

{} 大括号里的内容表示必填。

fromDb 是指配置在 config.json 的数据库信息的键,假如有以下配置文件:

{      "postgres":{        "type":"postgres",        "driver":"org.postgresql.Driver",        "url":"jdbc:postgresql://localhost:5432/apidb",        "user": "postgres",        "password":"aaron",        "encoding": "utf-8"    },     "aarondb":{        "type":"mysql",        "driver":"com.mysql.cj.jdbc.Driver",        "url":"jdbc:mysql://localhost:3306/aarondb?useSSL=false&characterEncoding=utf8&serverTimezone=UTC",        "user": "aaron",        "password":"aaron"    }}

fromDb、toDb 可以是 aarondb 或者 postgres。

fromSchema 读取数据的表的模式名,可以填写 "".

fromTable 读取数据的表明,必须提供。

toSchema 写入数据表的模式名,可以填写 "",可以和 fromSchema 不同.

toTable 写入数据表的表名,必须提供,当写入表不存在时,自动按读取表的表结构创建,可以和 fromTable 不同。

全量、增量、指定字段的使用样例请参考 Docker 方式。

配置文件说明

配置文件位于 config/config.json,如下所示:

 {    "sjwb":{        "type":"db2",        "driver":"com.ibm.db2.jcc.DB2Driver",        "url":"jdbc:db2://192.168.1.*:50000/wbsj",        "user": "****",        "password":"****",        "tbspace_ddl": "/*这里可以放置指定表空间的语句*/",        "encoding":"utf-8"    },     "dw_test":{        "type":"db2",        "driver":"com.ibm.db2.jcc.DB2Driver",        "url":"jdbc:db2://192.168.169.*:60990/dwdb",        "user": "****",        "password":"****",        "encoding":"gbk"    },     "postgres":{        "type":"postgres",        "driver":"org.postgresql.Driver",        "url":"jdbc:postgresql://10.99.**.**:5432/apidb",        "user": "****",        "password":"****",        "tbspace_ddl": "WITH (compression=no, orientation=orc, version=0.12)\ntablespace hdfs\n",        "encoding":"utf-8"    },     "aarondb":{        "type":"mysql",        "driver":"com.mysql.cj.jdbc.Driver",        "url":"jdbc:mysql://localhost:3306/aarondb?useSSL=false&characterEncoding=utf8&serverTimezone=UTC",        "user": "****",        "password":"****",        "encoding":"utf-8"    },     "buffer-rows": 100000}

配置文件说明:

type 表示数据库类型,均为小写:

  • mysql

  • postgres

  • db2

  • oracle

  • sqlserver

tbspace_ddl 表示自动建表时指定的表空间,该选项不是必需的,可以删除。

buffer-rows 表示读取多少行时一块写入目标数据库,根据服务器内存大小自己做调整,100000 行提交一次满足大多数情况了。

encoding 用于表结构同步时确定字段长度,比如说源库的字段是 gbk varchar(10),目标库是 utf-8,那么就应该为 varchar(15),这样字段有中文就不会出现截断或插入失败问题,程序这里 2 倍,也就是 varchar(20) ,这样字段长度不会出现小数位。

提高数据库间表的复制效率,如果不需要对源表字段进行转换,就丢掉低效的 datastage 和 kettle 吧。

看完上述内容,你们掌握如何使用Java数据开发辅助工具Docker与普通程序的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数据 字段 数据库 程序 目标 文件 配置 容器 目录 utf-8 同步 测试 开发 不同 内容 参数 增量 方式 结构 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州万易互联网科技有限公司 互联网 的科技创新 世界互联网领先科技成果 互联网科技公司名称 海南科技产业互联网平台 湖南洣水互联网科技有限公司扣款 广州优美互联网科技 互联网科技中介 武汉健翔互联网络科技有限公司 崇明区互联网教育科技诚信经营 广州市恰铎互联网科技有限公司 米聚互联网科技南京有限公司排面 链环科技传统企业怎么转型互联网 佛山市翊博互联网络科技有限公司 华夏恒生科技与互联网科技 互联网科技实习生岗位 银行科技岗属于互联网吗 福建互联网展示科技馆设计 北京军民互联网科技公司 广东猫王互联网科技有限公司电话 港股互联网科技股 互联网科技开发公司 苏州大垚互联网科技 互联网和高科技公司 深圳国际航运科技和互联网 栖莱科技互联网股份有限公司 下一代互联网重大应用科技园 广西科技产业互联网是什么 上海万顺科技互联网有限公司招聘 互联网科技的前景
0