如何把 kkFileView 接入 KingbaseES:一份国产化文件预览与数据库备份落地指南
【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView
如果你正要做信创项目,想把文档在线预览和国产数据库备份放在同一套架构里,这篇文章用 kkFileView(通用文件在线预览)+ KingbaseES(人大金仓数据库)给你一条能直接照着做的落地路径:预览、元数据入库、定时备份一次配齐。
先看看你为什么需要这套组合
合规审查时,数据库的"出身"会被点名
不少信创和等保评审会直接问:你们的数据库是不是国产化目录内的产品?预览服务看着不起眼,但它存着文件名、路径、上传人、预览地址这些元数据,一样要交代清楚。把这些数据落到 KingbaseES 里,比留在本地文件或 MySQL 里更容易过审。
预览系统跑久了,元数据散落在本地文件里
kkFileView 默认把转换缓存、日志都放在服务器磁盘上,时间久了你很难回答"这个月新增了多少文档、谁传的、存在哪"。给文档加一张元数据表,问题就有了唯一出处。
迁移成本没那么高,先打消这个顾虑
KingbaseES 的 SQL 语法与 PostgreSQL 高度兼容,JPA、MyBatis 这类 ORM 基本无感切换。你要做的核心工作只是换数据源和 JDBC 驱动,业务代码不用推倒重来。
方案速览:谁负责预览,谁负责备份
先建立全局认知,两个组件的分工很简单:
- kkFileView:监听 8012 端口,负责把 Office、PDF、CAD、图片等 200+ 格式解析成可在线浏览的内容;
- 你的业务层:上传文档后提取元数据(文件名、类型、大小、预览地址),写入 KingbaseES 的
document_metadata表; - 定时任务:每天凌晨 2 点全量备份元数据,每小时增量备份新增/变更记录;
- KingbaseES:作为国产化数据库承担存储与备份归档,主从架构下从库专吃备份和查询流量。
整条链路跑通后,预览界面还能根据status字段显示"已备份 / 待备份",用户不用翻后台就知道文档是否安全。
落地路径:从装环境到跑通备份
第一步:装好 KingbaseES,编译并启动 kkFileView
先按金仓官方文档部署 V8R6 版本数据库,再拉 kkFileView 源码编译:
# 安装 KingbaseES(文件名以实际下载为准) ./KingbaseES_V8R6_xxx.run # 获取 kkFileView 源码并打包 git clone https://gitcode.com/GitHub_Trending/kk/kkFileView cd kkFileView && mvn clean package -DskipTests # 启动服务,默认监听 8012 端口 java -jar server/target/kkFileView-5.0.0.jar启动后浏览器访问http://localhost:8012,能打开预览页面即说明服务正常。
第二步:在 application.properties 里配置数据源
打开 server/src/main/config/application.properties,在文件末尾追加 KingbaseES 连接与连接池参数:
# KingbaseES 数据源:host/端口/库名/schema 换成实际值 spring.datasource.url=jdbc:kingbase8://127.0.0.1:54321/kkfileview?currentSchema=public spring.datasource.username=system # 换成实际账号 spring.datasource.password=yourpassword # 换成实际密码 spring.datasource.driver-class-name=com.kingbase8.Driver # 连接池:最大 10 个连接,最小空闲 5 个,空闲 5 分钟回收 spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.idle-timeout=300000注意:金仓官方 JDBC 驱动(kingbase8.jar)需要先放进server/lib/或在 pom 里声明,否则启动会报找不到驱动类。
第三步:跑通"上传-预览-元数据入库"
这一步要新建一个实体和对应的 Repository。实体核心字段长这样:
// 文档元数据实体:文件名、类型、大小、预览地址、备份状态 public class DocumentMetadata { private String id; private String fileName; private String fileType; private long fileSize; private String previewUrl; private Date backupTime; private String status; // PENDING / BACKED_UP }对应的 Repository 继承JpaRepository<DocumentMetadata, String>,提供按状态查列表、按类型加状态筛选两个方法即可。上传 Controller 里用MultipartFile接收文件,调用 Service 保存文件、提取元数据后经 Repository 落库,预览页再根据status渲染备份标识——完整实现属于常规 CRUD,就不贴全量代码了。
第四步:加一个定时备份任务
Spring 自带@Scheduled,两个任务分别管全量和增量:
@Component public class BackupTasks { @Autowired private BackupService backupService; // 每天凌晨 2 点:全量备份元数据到归档表 @Scheduled(cron = "0 0 2 * * ?") public void fullBackup() { backupService.backupAll(); } // 每小时:只备份新增或修改过的记录 @Scheduled(cron = "0 0 * * * ?") public void incremental() { backupService.backupModified(); } }BackupService内部建议用 MD5 值或更新时间戳判断记录是否需要写,备份完成后再回写backupTime和status,这样下次备份天然具备增量能力。
跑通上面四步,你的预览系统就已经有了国产化数据库这条数据底座。上生产之前,还有几件事值得花半小时做掉。
上生产前值得做的四件事
给元数据表建两个索引
"按上传时间倒序查最近文档""按状态筛待备份记录"是最高频的两个查询:
-- 高频查询的两列各建一个索引 CREATE INDEX idx_doc_meta_upload_time ON document_metadata(upload_time); CREATE INDEX idx_doc_meta_status ON document_metadata(status);同时把定期执行VACUUM纳入运维脚本,避免表膨胀拖慢备份窗口。
连接池别拍脑袋,加泄漏检测
预览服务读多写少,最大连接 10、最小空闲 5 是稳妥的起点。另外给 HikariCP 加上leakDetectionThreshold=60000,连接借出超过 60 秒未归还就会打日志,比出事后再排查容易得多。
收紧文件来源白名单 🔒
kkFileView 从 4.4.0 起默认拒绝未配置的外部文件预览请求,用来防 SSRF。生产环境务必把trust.host限定为你的 CDN 或对象存储域名,并用not.trust.host屏蔽192.168.*、10.*等内网段。详细写法见仓库里的 SECURITY_CONFIG.md。
数据库侧上主从
KingbaseES 部署主从后,把定时备份任务指向从库读取,主库专心服务业务写入;恢复演练每季度做一次,确认归档表能重建出完整元数据。
常见问题:三个高频坑
Q1:启动报找不到驱动类,或连不上 54321 端口
先确认 kingbase8.jar 真的进了运行 classpath(jar 包方式启动时 lib 目录下的 jar 都会被加载);端口方面 54321 是 KingbaseES 默认端口,如果 DBA 改过,拿实际值替换 URL 里的端口即可。这两处能解决 90% 的连接报错。
Q2:大文件上传到一半超时,元数据没入库
kkFileView 默认单文件上传上限是 500MB(见application.properties中的spring.servlet.multipart.max-file-size)。超过这个量级的文件建议分块上传:先传文件块、服务端合并,再异步提取元数据落库,避免在请求线程里阻塞等待转换完成。
Q3:怎么确认备份真的成功了,而不是任务"跑完即止"
三件事做齐就有底:每次备份写一条归档记录(时间、条数、文件 MD5 校验值);下次任务启动时比对上次记录条数,异常即报警;把备份指标接进 Spring Boot Actuator——项目已默认暴露health,info,metrics端点,只需把失败计数纳入 metrics,再接 Prometheus + Grafana 做告警即可。
这套组合适合谁,还能往哪走
如果你的场景是信创项目验收、企业文档资产要可审计、或者单纯不想在预览服务上再绑一个国外数据库,"kkFileView + KingbaseES"这条链路值得直接抄作业。再往后,可以把它接进国产化中间件(东方通、金蝶 Apusic 等)、用 Redis 集群做分布式缓存,逐步搭成全栈信创架构——预览层、数据层、中间件全部有国产化选项,迁移也就成了顺水推舟的事。
【免费下载链接】kkFileViewUniversal File Online Preview Project based on Spring-Boot项目地址: https://gitcode.com/GitHub_Trending/kk/kkFileView
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考