一分钟上手,零门槛配置 —— 单个 jar 启动,不需要任何外部组件。文本教程 + 视频教程
JDK 17 或以上 · Maven 3.6+(仅构建时需要) · 内存 ≥ 512MB · 端口 8080
git clone https://github.com/vfaner/synctool.git cd synctool mvn clean package -DskipTests
产物:target/synctool.jar(可执行 fat jar)
java -jar target/synctool.jar
访问 http://localhost:8080 即可。
首次启动会自动创建 ./data(元数据)、./logs(运行日志)、./snapshots(快照)目录。
在 jar 同级目录创建 application.yml:
server: port: 8080 sync: poll-interval: 2000 # 轮询间隔(毫秒) batch-size: 500 fetch-size: 1000 safety-lag-ms: 1000 lock-ttl-ms: 300000 crypto-password: 请改成你自己的强口令 # ← 必须修改 crypto-salt: 请改成你自己的16位十六进制盐 # ← 必须修改
crypto-password 与 crypto-salt 用于加密存储的数据库连接密码,发行包带有默认值,生产环境必须修改。
方式 A:systemd(推荐)
[Unit] Description=SyncTool Database Sync After=network.target [Service] Type=simple User=synctool WorkingDirectory=/opt/synctool ExecStart=/usr/bin/java -Xms512m -Xmx1g -jar /opt/synctool/synctool.jar \ --spring.config.location=file:/opt/synctool/application.yml Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
sudo systemctl daemon-reload sudo systemctl enable --now synctool sudo systemctl status synctool
方式 B:nohup(快速验证)
cd /opt/synctool nohup java -jar synctool.jar > /dev/null 2>&1 &
① 数据库连接 → 新建源库和目标库连接 → 点击「测试连接」确认可用
② 项目 → 新建项目 → 选择源库与目标库
③ 进入项目详情 → 勾选要同步的表/视图/存储过程 → 配置同步选项 → 保存
④ 点击「立即同步」验证一次,或点击「启动同步」开始持续轮询
⑤ 在「变更日志」查看每次同步的明细
application.yml 中的 sync.*
| 键 | 默认 | 说明 |
|---|---|---|
poll-interval | 2000 | 轮询间隔(毫秒) |
snapshot-dir | ./snapshots | 元数据快照目录 |
batch-size | 500 | 每个 JDBC 批次行数 |
fetch-size | 1000 | 源库结果集读取批量 |
max-retries | 3 | 连续失败多少次后标记任务为 ERROR |
safety-lag-ms | 1000 | 时间戳水位线回退量,避免晚提交的事务被跳过 |
row-count-audit-interval-ms | 60000 | 行数审计间隔(毫秒) |
full-compare-max-rows | 20000 | 全表比对的行数上限 |
lock-ttl-ms | 300000 | 同步锁租约时长(毫秒) |
crypto-password | (默认值) | 密码加密密钥,生产环境必须修改 |
crypto-salt | (默认值) | 加密盐值(十六进制),生产环境必须修改 |
ai.enabled | true | 是否允许配置 AI 辅助转换。置 false 则菜单与接口一并下线 |
连接密码使用 Spring Security Crypto 的 AES-256 加密后存储,
带 enc: 前缀标记以避免重复加密,并兼容加密启用前写入的明文。
所有页面和接口都必须登录后才能访问,没有任何匿名可达的入口
| 用户名 | 角色 | 初始密码 | 权限 |
|---|---|---|---|
admin | 管理员 | 123456 | 全部操作 |
view | 访客 | 123456 | 只读 |
权限不是按页面枚举的,而是按 HTTP 方法判定:本工具所有的写操作都是 POST, 没有任何 GET 会改动状态,所以规则只有一条 —— POST 一律要求管理员。 这样以后新增接口不会漏配。
新建/编辑/删除数据库连接、项目、AI 供应商;勾选同步对象、启停同步、立即同步、重置进度;起草和保存存储过程转换、清理变更日志。
能看到全部页面和全部数据(看板、连接列表、项目详情的勾选状态、变更日志都能看、能选、能复制),但界面上不会出现任何写操作按钮,直接构造请求打接口也会被拒。
app_user 表里对应那行,重启后会重新种回初始密码。
元数据库使用 ddl-auto: update,表结构会自动演进
sudo systemctl stop synctool cp target/synctool.jar /opt/synctool/synctool.jar sudo systemctl start synctool
./data 目录。
停机期间源库产生的变更会在重启后由游标机制自动补齐,不会丢失。