1. 場景描述
通過java代碼從外圍接口中獲取數據並落地,已經存在的不落地,不存在的落地,因有部分字段變化是正常的,只需比對3個字段相同即為相同。
2. 解決方案
設置定時任務(三個標簽完成springboot定時任務配置),比對接口中獲取的數據和本地落地的數據是否相同。
2.1 真實代碼
@Scheduled(cron = "0 10 2 * * ? ")
public void execAppUser() {
synchronized (this) {
JSONArray array = null;
try {
array = testService.getUsers();
} catch (Exception e) {
e.printStackTrace();
}
//接口獲取user
List<AppUser> iusers = JSONObject.parseArray(array.toJSONString(), AppUser.class);
List<AppUser> users = appUserService.getAllUsers();
for (AppUser iuser : iusers) {
if (users.contains(iuser)){
continue;
}
appUserService.insert(iuser);
}
}
}
2.2 代碼說明
(1)使用users.contains(iuser),比對目前庫中是否存在從接口獲取的對象。
(2)因只比對三個字段,三個字段相同即為相同,需重寫AppUser對象的equals和hashcode
(3)Idea中Alt+insert快捷鍵調出來,選擇對應的字段就能生成對應的equals和hashCode。

(4)equals代碼
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AppUser appUser = (AppUser) o;
return Objects.equals(aa, appUser.aa) &&
Objects.equals(bb, appUser.bb) &&
Objects.equals(cc, appUser.cc);
}
@Override
public int hashCode() {
return Objects.hash(aa, bb, cc);
}
