开发数据同步服务时容易犯的错误
未判断是否成功获取数据就进行下一步操作问题描述
在同步服务中,数据的获取通常是第一步,例如从数据库、API 或其他数据源中拉取数据。然而,开发者有时会忽略对获取数据的有效性进行检查,直接进入下一步操作(如更新数据或删除旧数据)。如果数据获取失败或返回空值,可能会导致后续操作异常,甚至引发数据丢失或系统崩溃。
典型案例1:同步海康视频列表
一个定时 job 需要每天从海康远程 API 获取视频列表数据,然后更新本地数据库。如果未检查 API 返回的数据是否为空或是否符合预期格式,可能会导致以下问题:
[*]如果 API 返回空数据,程序可能尝试更新一个空对象,导致数据库中数据被覆盖为空。
[*]如果 API 返回异常数据(如格式错误),程序可能抛出异常,影响同步流程。
具体代码
log.info("开头同步海康数据"); ArtemisConfig artemisConfig = GetArtemisConfigInfoConfigByKey();//读取配置 hikconfig HikRequest hikRequest = new HikRequest(); String first = hikRequest.SendCameras(1, 10, artemisConfig); //log.info("获取总数据的内容是"+first); JSONObject jsonObject = JSON.parseObject(first); String code = jsonObject.getString("code"); if (code.equals("0")) {//判断能获取数据 //log.info("获取总数据成功"); JSONObject data = jsonObject.getJSONObject("data"); Integer total = data.getInteger("total"); log.info("获取总数据是"+total); Integer pageSize = 1000; Integer totalPage = (total + pageSize - 1) / pageSize; Integer pageNo = 1; String connStr = param; DataTemplate postgresqlDataTemplate = DatabaseUtil.getDataTemplate(DataSourceType.POSTGRESQL.toString(), connStr ); while (pageNo
页:
[1]