This commit is contained in:
2023-07-14 16:45:39 +08:00
parent 23d47f8d63
commit a9b02b5a4d
4 changed files with 36 additions and 5 deletions

View File

@ -56,4 +56,8 @@ public class TenantDbTypeContext {
public static void set(String dbType) { public static void set(String dbType) {
set(TenantConstant.DEFAULT_TENANT_ID, dbType); set(TenantConstant.DEFAULT_TENANT_ID, dbType);
} }
public static void remove(String tenantId) {
TENANT_DATASOURCE_TYPE_MAP.remove(tenantId);
}
} }

View File

@ -51,6 +51,18 @@ public class DatasourceUtil {
dynamicDataSourceContext.freshDataSource(PrimaryDatasourceContext.getAll()); 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) { public static Object buildDataSource(String tenantId, DynamicDataSource dynamicDataSource) {
log.debug("正在创建数据源DataSource, 租户: {}", tenantId); log.debug("正在创建数据源DataSource, 租户: {}", tenantId);
boolean connect = JdbcUtil.checkConnect(dynamicDataSource.getDriver(), dynamicDataSource.getUrl(), dynamicDataSource.getUsername(), dynamicDataSource.getPassword()); boolean connect = JdbcUtil.checkConnect(dynamicDataSource.getDriver(), dynamicDataSource.getUrl(), dynamicDataSource.getUsername(), dynamicDataSource.getPassword());

View File

@ -21,7 +21,7 @@ import org.springframework.web.multipart.MultipartFile;
@RequiredArgsConstructor @RequiredArgsConstructor
public class FileServiceImpl implements FileService { public class FileServiceImpl implements FileService {
private FileConfig fileConfig; private final FileConfig fileConfig;
@Override @Override
public String upload(MultipartFile file) { public String upload(MultipartFile file) {

View File

@ -4,11 +4,12 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.SysTenant;
import com.qiaoba.api.tenant.entity.SysTenantDatasource;
import com.qiaoba.api.tenant.entity.dto.SysTenantDto; import com.qiaoba.api.tenant.entity.dto.SysTenantDto;
import com.qiaoba.api.tenant.entity.param.SysTenantParam; import com.qiaoba.api.tenant.entity.param.SysTenantParam;
import com.qiaoba.api.tenant.service.SysTenantApiService; import com.qiaoba.api.tenant.enums.TenantModeEnum;
import com.qiaoba.api.auth.utils.SecurityUtil;
import com.qiaoba.common.base.code.TenantErrorCode; import com.qiaoba.common.base.code.TenantErrorCode;
import com.qiaoba.common.base.constant.BaseConstant; import com.qiaoba.common.base.constant.BaseConstant;
import com.qiaoba.common.base.constant.TenantConstant; 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.base.exception.ServiceException;
import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo; import com.qiaoba.common.database.entity.TableDataInfo;
import com.qiaoba.common.database.util.DatasourceUtil;
import com.qiaoba.common.redis.service.RedisService; import com.qiaoba.common.redis.service.RedisService;
import com.qiaoba.module.tenant.entity.dto.TenantSettingDto; import com.qiaoba.module.tenant.entity.dto.TenantSettingDto;
import com.qiaoba.module.tenant.mapper.SysTenantMapper; import com.qiaoba.module.tenant.mapper.SysTenantMapper;
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
import com.qiaoba.module.tenant.service.SysTenantService; import com.qiaoba.module.tenant.service.SysTenantService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -44,6 +47,7 @@ public class SysTenantServiceImpl implements SysTenantService {
private final SysTenantMapper sysTenantMapper; private final SysTenantMapper sysTenantMapper;
private final RedisService redisService; private final RedisService redisService;
private final SysTenantDatasourceService sysTenantDatasourceService;
@Override @Override
public int insert(SysTenantDto dto) { public int insert(SysTenantDto dto) {
@ -141,9 +145,20 @@ public class SysTenantServiceImpl implements SysTenantService {
sysTenant.setStatus(dto.getStatus()); sysTenant.setStatus(dto.getStatus());
int result = sysTenantMapper.updateById(sysTenant); int result = sysTenantMapper.updateById(sysTenant);
if (result > BaseConstant.HANDLE_ERROR) { if (result > BaseConstant.HANDLE_ERROR) {
SysTenant tenant = selectById(sysTenant.getTenantId()); SysTenant tenant = selectById(dto.getTenantId());
toCache(tenant); 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; return result;
} }