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..e38c587c83123b3708f25adc5d69c77da05a2483 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 @@ -79,6 +79,10 @@ public class JpaLockExtensionImpl implements LockExtension { @Override public LockResult addLock(String mkId, String dataCat, String dataId, DataLockOptions option, String funcId, String comment){ CAFContextInfo contextInfo= CAFContextResolverUtils.getCAFContextInfo(); + if(log.isDebugEnabled()){ + log.debug("lock jpa extension,"+" add lock resource: "+mkId+"-"+dataCat+"-"+dataId); + log.debug("lock jpa extension,"+" add lock context: "+contextInfo.getSessionId()+"-"+contextInfo.getContextId()+"-"+contextInfo.getCurrentSU()+"-"+contextInfo.getUserId()); + } String lockId = UUID.randomUUID().toString(); LockEntity entity = this.createLockEntity(lockId, mkId, dataCat, dataId, option, funcId, comment,contextInfo); long time = System.currentTimeMillis(); @@ -218,12 +222,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()); } //查询已有的锁数据 @@ -301,6 +305,9 @@ public class JpaLockExtensionImpl implements LockExtension { @Override public boolean removeLock(String lockId){ DataValidator.checkForEmptyString(lockId, "lockId"); + if(log.isDebugEnabled()){ + log.debug("lock jpa extension,"+" remove lock: "+lockId); + } JpaTransaction tran = JpaTransaction.getTransaction(); try { tran.begin(TransactionPropagation.REQUIRES_NEW); @@ -483,6 +490,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 +521,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 +544,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 {