From a9b02b5a4d3a657971c71cd10378dab1c8d8cd82 Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 14 Jul 2023 16:45:39 +0800 Subject: [PATCH] add --- .../database/context/TenantDbTypeContext.java | 4 ++++ .../common/database/util/DatasourceUtil.java | 12 ++++++++++ .../file/service/impl/FileServiceImpl.java | 2 +- .../service/impl/SysTenantServiceImpl.java | 23 +++++++++++++++---- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/qiaoba-common/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/context/TenantDbTypeContext.java b/qiaoba-common/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/context/TenantDbTypeContext.java index 9db8204..73223fe 100644 --- a/qiaoba-common/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/context/TenantDbTypeContext.java +++ b/qiaoba-common/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/context/TenantDbTypeContext.java @@ -56,4 +56,8 @@ public class TenantDbTypeContext { public static void set(String dbType) { set(TenantConstant.DEFAULT_TENANT_ID, dbType); } + + public static void remove(String tenantId) { + TENANT_DATASOURCE_TYPE_MAP.remove(tenantId); + } } diff --git a/qiaoba-common/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/util/DatasourceUtil.java b/qiaoba-common/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/util/DatasourceUtil.java index 493889c..def21f0 100644 --- a/qiaoba-common/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/util/DatasourceUtil.java +++ b/qiaoba-common/qiaoba-common-datasource/src/main/java/com/qiaoba/common/database/util/DatasourceUtil.java @@ -51,6 +51,18 @@ public class DatasourceUtil { dynamicDataSourceContext.freshDataSource(PrimaryDatasourceContext.getAll()); } + public static void removePrimaryDatasource(String tenantId) { + // 删除数据源类型 + TenantDbTypeContext.remove(tenantId); + // 关闭数据源 + ((DruidDataSource)PrimaryDatasourceContext.get(tenantId)).close(); + // 删除数据源 + PrimaryDatasourceContext.remove(tenantId); + // 刷新数据源 + dynamicDataSourceContext.freshDataSource(PrimaryDatasourceContext.getAll()); + log.info("移除租户[{}]主数据源成功",tenantId); + } + public static Object buildDataSource(String tenantId, DynamicDataSource dynamicDataSource) { log.debug("正在创建数据源DataSource, 租户: {}", tenantId); boolean connect = JdbcUtil.checkConnect(dynamicDataSource.getDriver(), dynamicDataSource.getUrl(), dynamicDataSource.getUsername(), dynamicDataSource.getPassword()); diff --git a/qiaoba-module/qiaoba-module-file/src/main/java/com/qiaoba/module/file/service/impl/FileServiceImpl.java b/qiaoba-module/qiaoba-module-file/src/main/java/com/qiaoba/module/file/service/impl/FileServiceImpl.java index b902fea..c432172 100644 --- a/qiaoba-module/qiaoba-module-file/src/main/java/com/qiaoba/module/file/service/impl/FileServiceImpl.java +++ b/qiaoba-module/qiaoba-module-file/src/main/java/com/qiaoba/module/file/service/impl/FileServiceImpl.java @@ -21,7 +21,7 @@ import org.springframework.web.multipart.MultipartFile; @RequiredArgsConstructor public class FileServiceImpl implements FileService { - private FileConfig fileConfig; + private final FileConfig fileConfig; @Override public String upload(MultipartFile file) { diff --git a/qiaoba-module/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantServiceImpl.java b/qiaoba-module/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantServiceImpl.java index 822db1f..4aa0a09 100644 --- a/qiaoba-module/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantServiceImpl.java +++ b/qiaoba-module/qiaoba-module-tenant/src/main/java/com/qiaoba/module/tenant/service/impl/SysTenantServiceImpl.java @@ -4,11 +4,12 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.qiaoba.api.auth.utils.SecurityUtil; import com.qiaoba.api.tenant.entity.SysTenant; +import com.qiaoba.api.tenant.entity.SysTenantDatasource; import com.qiaoba.api.tenant.entity.dto.SysTenantDto; import com.qiaoba.api.tenant.entity.param.SysTenantParam; -import com.qiaoba.api.tenant.service.SysTenantApiService; -import com.qiaoba.api.auth.utils.SecurityUtil; +import com.qiaoba.api.tenant.enums.TenantModeEnum; import com.qiaoba.common.base.code.TenantErrorCode; import com.qiaoba.common.base.constant.BaseConstant; import com.qiaoba.common.base.constant.TenantConstant; @@ -17,9 +18,11 @@ import com.qiaoba.common.base.enums.BaseEnum; import com.qiaoba.common.base.exception.ServiceException; import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; +import com.qiaoba.common.database.util.DatasourceUtil; import com.qiaoba.common.redis.service.RedisService; import com.qiaoba.module.tenant.entity.dto.TenantSettingDto; import com.qiaoba.module.tenant.mapper.SysTenantMapper; +import com.qiaoba.module.tenant.service.SysTenantDatasourceService; import com.qiaoba.module.tenant.service.SysTenantService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -44,6 +47,7 @@ public class SysTenantServiceImpl implements SysTenantService { private final SysTenantMapper sysTenantMapper; private final RedisService redisService; + private final SysTenantDatasourceService sysTenantDatasourceService; @Override public int insert(SysTenantDto dto) { @@ -141,9 +145,20 @@ public class SysTenantServiceImpl implements SysTenantService { sysTenant.setStatus(dto.getStatus()); int result = sysTenantMapper.updateById(sysTenant); if (result > BaseConstant.HANDLE_ERROR) { - SysTenant tenant = selectById(sysTenant.getTenantId()); + SysTenant tenant = selectById(dto.getTenantId()); toCache(tenant); - // 处理数据源 todo + // 处理数据源 + if (TenantModeEnum.isDatasource(tenant.getMode())) { + if (BaseEnum.NORMAL.getCode().equals(dto.getStatus())) { + // 加入数据源 + SysTenantDatasource primaryDatasource = sysTenantDatasourceService.selectPrimary(dto.getTenantId(), false); + Object dataSource = DatasourceUtil.buildDataSource(dto.getTenantId(), sysTenantDatasourceService.transform(primaryDatasource)); + DatasourceUtil.changePrimaryDatasource(dto.getTenantId(), dataSource); + } else { + // 移除数据源 + DatasourceUtil.removePrimaryDatasource(dto.getTenantId()); + } + } } return result; }