diff --git a/caf-lock/caf-lock-extension-jpa/src/main/java/io/iec/edp/caf/lock/extension/jpa/JpaLockExtensionImpl.java b/caf-lock/caf-lock-extension-jpa/src/main/java/io/iec/edp/caf/lock/extension/jpa/JpaLockExtensionImpl.java index 4f5de8f99604fd739ad28a06a94bfa105dbebfc0..1fc1cf8c5ed0767e17d635e82ab863e8b266b0b4 100644 --- a/caf-lock/caf-lock-extension-jpa/src/main/java/io/iec/edp/caf/lock/extension/jpa/JpaLockExtensionImpl.java +++ b/caf-lock/caf-lock-extension-jpa/src/main/java/io/iec/edp/caf/lock/extension/jpa/JpaLockExtensionImpl.java @@ -218,12 +218,12 @@ public class JpaLockExtensionImpl implements LockExtension { } else { log.info("开关打开,并保存配置到缓存执行清理"); cache.put("enableCleanup", true); - this.batchRepo.deleteByExpiredTimeAndData(mkId, dataCat, dataIds, OffsetDateTime.now()); + deleteByExpiredTime(mkId, dataCat, dataIds, OffsetDateTime.now()); } } else if (cleanupBatchLock) { // 清理过期锁 log.info("根据缓存执行过期锁数据清理"); - this.batchRepo.deleteByExpiredTimeAndData(mkId, dataCat, dataIds, OffsetDateTime.now()); + deleteByExpiredTime(mkId, dataCat, dataIds, OffsetDateTime.now()); } //查询已有的锁数据 @@ -483,6 +483,22 @@ public class JpaLockExtensionImpl implements LockExtension { } return entities; } + private void deleteByExpiredTime(String mkId, String dataCat, List dataIds, OffsetDateTime expiredTime) { + int size = dataIds.size();//获取dataIds的长度 + int num = (size + 998) / 999; //每次查询不超过999条,向上取整 + if (num == 1) { + this.batchRepo.deleteByExpiredTimeAndData(mkId, dataCat, dataIds, OffsetDateTime.now()); + } else { + for (int i = 0; i < num; i++) { + int start = i * 999; + int end = (i + 1) * 999; + if (end >= size) { + end = size; + } + this.batchRepo.deleteByExpiredTimeAndData(mkId, dataCat, dataIds.subList(start, end), OffsetDateTime.now()); + } + } + } private int deleteBatchLockBySession(List entities) { Map> map = (Map)entities.stream().collect(Collectors.groupingBy(BatchLockEntity::getSessionId)); int count = 0; @@ -498,7 +514,7 @@ public class JpaLockExtensionImpl implements LockExtension { //使用in时各数据库对in参数个数有限制,例如oracle是1000,分批次进行删除,每次删不超过999条 // this.batchRepo.deleteAllByIdIn(ids); int size=ids.size(); - int num=size/999+1; + int num = (size + 998) / 999; // 向上取整,避免多出一批 if(num==1){ this.batchRepo.deleteAllByIdIn(ids); }else{ @@ -521,7 +537,7 @@ public class JpaLockExtensionImpl implements LockExtension { List entities = new ArrayList<>(); if (dataIds != null) { int size = dataIds.size();//获取dataIds的长度 - int num = size / 999 + 1;//每次查询不超过999条 + int num = (size + 998) / 999; //每次查询不超过999条,向上取整 if (num == 1 || dataIds == null) { return this.batchRepo.findAllByMkIdAndCategoryIdAndDataIdInAndNotExpired(mkId, dataCat, dataIds, OffsetDateTime.now()); } else {