diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java index f6d45949..7de44cd7 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ConfigServiceImpl.java @@ -1,6 +1,7 @@ package cn.hippo4j.config.service.biz.impl; import cn.hippo4j.common.config.ApplicationContextHolder; +import cn.hippo4j.common.enums.DelEnum; import cn.hippo4j.common.toolkit.*; import cn.hippo4j.common.web.exception.ServiceException; import cn.hippo4j.config.event.LocalDataChangeEvent; @@ -113,16 +114,12 @@ public class ConfigServiceImpl implements ConfigService { ConfigServiceImpl configService = ApplicationContextHolder.getBean(this.getClass()); configInfo.setCapacity(getQueueCapacityByType(configInfo)); - try { - ConditionUtil - .condition( - existConfig == null, - () -> configService.addConfigInfo(configInfo), - () -> configService.updateConfigInfo(identify, configInfo) - ); - } catch (Exception ex) { - updateConfigInfo(identify, configInfo); - } + ConditionUtil + .condition( + existConfig == null, + () -> configService.addConfigInfo(configInfo), + () -> configService.updateConfigInfo(identify, configInfo) + ); ConfigChangePublisher.notifyConfigChange(new LocalDataChangeEvent(identify, ContentUtil.getGroupKey(configInfo))); } @@ -139,8 +136,18 @@ public class ConfigServiceImpl implements ConfigService { config.setMd5(Md5Util.getTpContentMd5(config)); try { - if (SqlHelper.retBool(configInfoMapper.insert(config))) { - return config.getId(); + // 当前为单体应用, 后续支持集群部署时切换分布式锁. + synchronized (ConfigService.class) { + ConfigAllInfo configAllInfo = configInfoMapper.selectOne( + Wrappers.lambdaQuery(ConfigAllInfo.class) + .eq(ConfigAllInfo::getTpId, config.getTpId()) + .eq(ConfigAllInfo::getDelFlag, DelEnum.NORMAL.getIntCode()) + ); + Assert.isNull(configAllInfo, "线程池配置已存在."); + + if (SqlHelper.retBool(configInfoMapper.insert(config))) { + return config.getId(); + } } } catch (Exception ex) { log.error("[db-error] message :: {}", ex.getMessage(), ex); diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java index 71c9d3c7..b2a43e85 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/ItemServiceImpl.java @@ -77,15 +77,18 @@ public class ItemServiceImpl implements ItemService { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(ItemInfo.class) .eq(ItemInfo::getItemId, reqDTO.getItemId()); - ItemInfo existItemInfo = itemInfoMapper.selectOne(queryWrapper); - Assert.isNull(existItemInfo, "项目 ID 不允许重复."); - - ItemInfo itemInfo = BeanUtil.convert(reqDTO, ItemInfo.class); - int insertResult = itemInfoMapper.insert(itemInfo); - - boolean retBool = SqlHelper.retBool(insertResult); - if (!retBool) { - throw new RuntimeException("Save error"); + // 当前为单体应用, 后续支持集群部署时切换分布式锁. + synchronized (ItemService.class) { + ItemInfo existItemInfo = itemInfoMapper.selectOne(queryWrapper); + Assert.isNull(existItemInfo, "项目配置已存在."); + + ItemInfo itemInfo = BeanUtil.convert(reqDTO, ItemInfo.class); + int insertResult = itemInfoMapper.insert(itemInfo); + + boolean retBool = SqlHelper.retBool(insertResult); + if (!retBool) { + throw new RuntimeException("Save error"); + } } } diff --git a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java index 6f1b3e16..91472d6d 100644 --- a/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java +++ b/hippo4j-config/src/main/java/cn/hippo4j/config/service/biz/impl/TenantServiceImpl.java @@ -71,15 +71,18 @@ public class TenantServiceImpl implements TenantService { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(TenantInfo.class) .eq(TenantInfo::getTenantId, reqDTO.getTenantId()); - TenantInfo existTenantInfo = tenantInfoMapper.selectOne(queryWrapper); - Assert.isNull(existTenantInfo, "租户 ID 不允许重复."); - - TenantInfo tenantInfo = BeanUtil.convert(reqDTO, TenantInfo.class); - int insertResult = tenantInfoMapper.insert(tenantInfo); - - boolean retBool = SqlHelper.retBool(insertResult); - if (!retBool) { - throw new RuntimeException("Save Error."); + // 当前为单体应用, 后续支持集群部署时切换分布式锁. + synchronized (TenantService.class) { + TenantInfo existTenantInfo = tenantInfoMapper.selectOne(queryWrapper); + Assert.isNull(existTenantInfo, "租户配置已存在."); + + TenantInfo tenantInfo = BeanUtil.convert(reqDTO, TenantInfo.class); + int insertResult = tenantInfoMapper.insert(tenantInfo); + + boolean retBool = SqlHelper.retBool(insertResult); + if (!retBool) { + throw new RuntimeException("Save Error."); + } } }