add
This commit is contained in:
@ -5,6 +5,7 @@ import com.qiaoba.api.tenant.entity.SysTenant;
|
||||
import com.qiaoba.api.tenant.entity.SysTenantDatasource;
|
||||
import com.qiaoba.api.tenant.entity.param.SysTenantDatasourceParam;
|
||||
import com.qiaoba.api.tenant.entity.param.SysTenantParam;
|
||||
import com.qiaoba.common.base.constant.TenantConstant;
|
||||
import com.qiaoba.common.base.enums.BaseEnum;
|
||||
import com.qiaoba.common.base.exception.ServiceException;
|
||||
import com.qiaoba.common.database.entity.DynamicDataSource;
|
||||
@ -36,9 +37,10 @@ public class DynamicDatasourceServiceImpl implements DynamicDatasourceService {
|
||||
Map<String, List<DynamicDataSource>> datasourceMap = new LinkedHashMap<>();
|
||||
List<SysTenant> sysTenants = sysTenantService.selectList(SysTenantParam.buildNormalSelectParam());
|
||||
for (SysTenant sysTenant : sysTenants) {
|
||||
List<SysTenantDatasource> datasourceList = sysTenantDatasourceService.selectList(new SysTenantDatasourceParam(sysTenant.getTenantId()));
|
||||
datasourceMap.put(sysTenant.getTenantId(), transformList(datasourceList));
|
||||
|
||||
if (!TenantConstant.DEFAULT_TENANT_ID.equals(sysTenant.getTenantId())) {
|
||||
List<SysTenantDatasource> datasourceList = sysTenantDatasourceService.selectList(new SysTenantDatasourceParam(sysTenant.getTenantId()));
|
||||
datasourceMap.put(sysTenant.getTenantId(), transformList(datasourceList));
|
||||
}
|
||||
}
|
||||
return datasourceMap;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package com.qiaoba.module.tenant.service.impl;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.qiaoba.api.tenant.entity.SysTenantDatasource;
|
||||
@ -17,6 +18,7 @@ import com.qiaoba.common.database.context.PrimaryDatasourceContext;
|
||||
import com.qiaoba.common.database.entity.DynamicDataSource;
|
||||
import com.qiaoba.common.database.util.DatasourceUtil;
|
||||
import com.qiaoba.common.database.util.JdbcUtil;
|
||||
import com.qiaoba.common.redis.service.RedisService;
|
||||
import com.qiaoba.module.tenant.mapper.SysTenantDatasourceMapper;
|
||||
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -38,6 +40,8 @@ import java.util.Objects;
|
||||
public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceService {
|
||||
|
||||
private final SysTenantDatasourceMapper sysTenantDatasourceMapper;
|
||||
private final BackupDatasourceContext backupDatasourceContext;
|
||||
private final RedisService redisService;
|
||||
|
||||
@Override
|
||||
public SysTenantDatasource selectPrimary(String tenantId) {
|
||||
@ -71,7 +75,7 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
|
||||
int result = sysTenantDatasourceMapper.insert(sysTenantDatasource);
|
||||
if (result > BaseConstant.HANDLE_ERROR) {
|
||||
// 添加到备用数据源
|
||||
BackupDatasourceContext.addBackupMap(sysTenantDatasource.getTenantId(), dynamicDataSource);
|
||||
backupDatasourceContext.addBackupMap(dynamicDataSource);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -87,7 +91,7 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
|
||||
int result = sysTenantDatasourceMapper.updateById(sysTenantDatasource);
|
||||
if (result > BaseConstant.HANDLE_ERROR) {
|
||||
// 更新备用数据源
|
||||
BackupDatasourceContext.updateBackupMap(sysTenantDatasource.getTenantId(), dynamicDataSource);
|
||||
backupDatasourceContext.updateBackupMap(dynamicDataSource);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -138,12 +142,17 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
|
||||
Object oldDataSource = PrimaryDatasourceContext.get(tenantId);
|
||||
// 更新新得数据源为租户主要数据源
|
||||
DatasourceUtil.changePrimaryDatasource(tenantId, dataSource);
|
||||
// 通知其他服务更换主数据源
|
||||
dynamicDataSource.setServerSn(BaseConstant.SERVER_SN);
|
||||
redisService.convertAndSend("test", JSONUtil.toJsonStr(dynamicDataSource));
|
||||
// 从备用数据源中移除
|
||||
backupDatasourceContext.deleteBackupMap(dynamicDataSource);
|
||||
// 将老的租户数据源设置为备用
|
||||
if (Objects.nonNull(oldDataSource)) {
|
||||
DruidDataSource druidDataSource = ((DruidDataSource) oldDataSource);
|
||||
String ip = DataBaseEnum.getIp(druidDataSource.getUrl(), druidDataSource.getDriverClassName());
|
||||
SysTenantDatasource sysTenantDatasource = sysTenantDatasourceMapper.selectByIp(tenantId, ip);
|
||||
BackupDatasourceContext.addBackupMap(tenantId, transform(sysTenantDatasource));
|
||||
backupDatasourceContext.addBackupMap(transform(sysTenantDatasource));
|
||||
druidDataSource.close();
|
||||
}
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user