Repository navigation
Jync v1.8.0
企业门户账号可直接登录 Jync:支持「账号密码(OA 接口校验)」「网关头」「票据」三种统一认证,同一时刻只生效一种;导航按「配置管理」「日志管理」分组,新增系统日志页;界面把「项目」统一改称「同步任务」;同步任务详情支持按需核对行数。升级后外部认证默认关闭,本地账号登录行为与 1.7.8 一致。
本版本曾同版本覆盖重发(安装包更新,版本号不变),以下为最终内容。
新功能
统一认证
- 三种方式:「配置管理 → 外部认证」统一配置启用开关、认证方式、管理员用户名列表与门户登录/退出地址。账号密码方式支持表单或 JSON、请求/响应字段名(响应可用
data.user点路径)、成功标识与超时,密码只经过内存。 - 网关头:只采信直接 TCP 对端位于回环或
app.security.trusted-proxies内的请求;可选共享密钥头(加密存储、常量时间比较)。 - 票据:
/sso/entry?ticket=…服务端校验通过才建立会话;票据不写审计、不在页面回显。 - 外部用户只保留会话:不写入
app_user,没有本地密码和改密入口;管理员由配置的用户名列表,或响应字段/请求头标记决定。 - 登录页分流:
/login按当前认证方式展示本地表单或门户引导页,本地表单在/login/local。 - 应急恢复:关闭本地登录前必须先启用外部认证;若外部认证随后不可用,以
JYN_RESET_LOGIN=true启动一次即可重新打开本地登录。
导航与系统日志
- 导航分组:「配置管理」(数据库连接、AI 配置(已启用时)、外部认证(仅管理员))与「日志管理」(变更日志、审计日志(仅管理员)、系统日志);看板、同步任务、系统信息保持顶级,窄屏抽屉里分组可展开。
- 系统日志页(
/system-logs,所有登录用户):按文件、级别与关键字过滤并高亮,滚动归档按 gzip 读取;最多扫描 16 MB,返回最近 1000 条匹配行并提示是否截断。 - 文案统一:界面各处「项目」改为「同步任务」,路由、数据表与 API 不变。
数据核对与全量对比
- 核对行数:同步任务详情逐表对比源库与目标库的
COUNT(*),展示源行数、目标行数与差值,支持单表重新核对;仅管理员可见、按需执行,单侧超时 15 秒,失败互不影响。 - 全量对比预警:按各表行数估算耗时,超过
full-compare-max-rows(默认 20000 行)的表提示需要全表扫描,并在间隔明显偏短时给出建议值。
停止同步
- 停止会通知正在执行的一轮,在下一个已提交批次边界安全退出(已写入数据与断点保留)并释放同步锁,配置可立即修改;任务状态记为「已停止」,不计失败次数。
- 多实例下停止请求按任务广播补发,手动「立即同步」不会被误打断。
更新检测
- 版本号相同也能发现安装包被重新发布:GitHub 比对附件 SHA-256,Gitee 退化为对下载地址发
HEAD取Content-Length;只有能证明不同才提示,证明不了时一律按已是最新处理。 - 同版本的「一键升级」仅在确认制品不同时放行(拒绝发生在下载之前);设置页可「忽略此提示」,发布方再上传新文件会自动重新提醒。
app.update-check.match-artifact=false回到只比版本号。
修复
- CDC 批量写入不再退化为平方复杂度:事务内同一主键的多个镜像此前靠逐个扫描折叠,批量
REPLACE/MERGE或数据修复会随事务行数呈平方增长——十万行的事务光折叠就要二十多秒,消费线程期间不推进位点。现在按主键索引折叠,代价随行数线性;同一事务内同一行的多个镜像只按最终结果下发一次,目标端语句也更少。 - 源库删表只在能看见整个 schema 时联动:源库账户被收回单表授权时,该表会从清单里消失,与真删表同形,此前会把目标表一起删掉。现在只有能看见整个 schema(表属主、库级
SELECT、SELECT ANY TABLE、SQL ServerVIEW DEFINITION,PostgreSQL 系恒可见)时才把清单缺项当作删表,否则保留目标表并告警一次。 - 目标表被重建后重置进度:不再沿用旧游标在空表上跑增量窗口,改为按首次加载重新灌入,变更日志正确记为插入。
- CDC 停车/停机时释放连接:不再残留 keepalive 拉流,避免继续占用同一
server_id把其他实例踢下线。 - CDC 单事务缓冲加上限:一个源事务必须整笔驻留内存直到提交,超大事务此前可能耗尽堆内存,又会被当成可重试错误反复重连重放。现在超过
sync.cdc.max-transaction-rows/max-transaction-bytes即按非瞬态失败停车,并提示调小批次、提高上限或改用轮询。 - PostgreSQL 分区表与物化视图可被发现:此前表清单只包含普通表与视图,声明式分区表和物化视图无法选择;现在一并列出(分区子表仍单独可见)。
- 变更日志「只显示失败」下清空只删失败记录:此前这个按钮会清空全部日志,包括用户仍在查看的成功记录。
- 卡住的同步轮次可见:详情页显示「上一轮仍在执行」,无进展超过
sync.stuck-threshold-ms(默认 30 分钟)时标红「疑似卡死」,已过期的残留租约单独标注。 - 一键升级的限流提示:匿名 API 超限返回 403/429 时明确说明是限流,建议切换下载源或稍后重试,不静默换源;Windows 重启脚本在非 ASCII 路径下也能正常重启与回滚。
安全加固
- 网关头只信任可信代理来源;共享密钥加密存储、常量时间比较,无法解密时一律拒绝。
- OA / 票据地址只接受 http(s),不跟随重定向,响应体上限 64 KB。
- 登录失败按「用户名 + 客户端 IP」计数(5 次锁 15 分钟),票据入口按 IP 限流;审计不记录密码、票据与响应内容。
- 系统日志页白名单文件名并校验真实路径,拒绝
../与符号链接逃逸;日志文本逐段转义后才插入高亮标记。
兼容性说明
- 默认行为不变:升级后外部认证未启用,访问
/login302 到/login/local,本地账号照常使用。 - 新增表:
oa_auth_config、update_artifact_dismissal由ddl-auto=update首次启动自动创建;随./data一起备份。 - 新增配置/环境变量:
app.update-check.match-artifact(默认true)、sync.stuck-threshold-ms(默认1800000,0 关闭)、sync.cdc.max-transaction-rows(默认 1000000)、sync.cdc.max-transaction-bytes(默认 536870912,0 表示该维度不限)、JYN_RESET_LOGIN、JYN_COOKIE_SAME_SITE(默认lax,iframe 嵌入需配合 HTTPS 设为None)。 - 旧地址:
/oa/settings保留为 302 →/external-auth(仅 GET)。 - 同步行为不变:同步数据路径与类型映射不变;本次新增 CDC 缓冲上限、把 CDC 事务折叠改为线性、补齐 PostgreSQL 对象发现,并修正 CDC 停车时的连接释放。
测试与升级
- 2604 个测试:2603 通过,0 失败;1 个仅限 Linux 的密钥文件权限用例在 macOS 上按环境跳过(
*IT需 Docker 另跑)。 - 替换
jync.jar重启即可;容器部署将镜像 tag 更新为jync:1.8.0。升级前备份./data与application.yml。