2022-10-12 20:31:02
使用Kettle调用REST API接口获取数据并脱密处理后入DB,需通过三个脚本协作实现,并通过异常处理机制避免数据丢失。 以下是具体实现方案及关键步骤说明:
一、脚本设计与功能实现第一个脚本:获取API数据并保存至本地文件
核心组件:使用HTTP Post组件调用医院提供的REST API接口,通过Java代码处理返回数据(如脱密、格式转换),最终将结果写入本地XML文件。
脱密处理:在Java代码中实现数据解密逻辑(如AES解密),确保敏感信息在传输和存储过程中安全。
异常处理:需捕获亩缓旁网络超时、认证失败等异哪念常,避免因调用失败导致后续流程中断。

第二个脚本:从本地文件读取数据并插入数据库
数据加载:使用Get data from XML组件读取两个XML文件,通过bed_id字段进行Inner Join,过滤出有效数据。
数据对比:与数据库现有数据对比,仅更新差异数据(如字段值变化),并删除数据库中存在但源数据中不存在的记录(清空多余数据)。
脱密验证:在插入前再次验证数据完整性,确保脱密后的数据符合预期格式。

第三个脚本:定时任务调度
执行顺序:通过Start组件依次调用第一个脚本和第二个脚本,确保数据先获取后入库。
定时配置:使用Kettle内置的Job调度功能或外部工具(如Cron)设置执行频率(如每小时一次)。

问题原因:若第一迅橡个脚本执行失败(如网络中断),第二个脚本仍会执行,但因无新数据导致对比后误删数据库记录。
解决方案:
增加成功标志文件:
在第一个脚本成功执行后,生成一个标志文件(如success.flag)。
第二个脚本启动时检查该文件是否存在,若不存在则终止执行并报警。
数据库事务控制:
在第二个脚本中启用事务,将数据对比和删除操作封装在一个事务中。若中间步骤失败,自动回滚所有更改。
异常捕获与日志记录:
在第一个脚本中捕获所有异常(如HTTP Client的ErrorHandling选项),记录错误日志并发送通知(如邮件)。
第二个脚本中增加条件判断,仅当第一个脚本的日志中无错误时继续执行。
数据备份机制:
在执行第二个脚本前,先备份当前数据库表(如创建临时表或导出SQL文件),确保数据可恢复。
调用API → 脱密处理 → 保存至XML → 生成success.flag。
检查success.flag → 读取XML → 数据对比 → 事务性更新数据库。
执行脚本1 → 检查脚本1日志 → 执行脚本2 → 清理临时文件。
通过以上设计,可实现Kettle无代码调用REST API、数据脱密处理及安全入库,同时通过异常处理机制保障数据完整性。