Skip to content

Jync v1.8.0

Latest

Choose a tag to compare

@vfaner vfaner released this 24 Oct 06:19

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 Server VIEW 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 限流;审计不记录密码、票据与响应内容。
  • 系统日志页白名单文件名并校验真实路径,拒绝 ../ 与符号链接逃逸;日志文本逐段转义后才插入高亮标记。

兼容性说明

  • 默认行为不变:升级后外部认证未启用,访问 /login 302 到 /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。