first commit
This commit is contained in:
@ -59,11 +59,7 @@ public class SysTenantDatasource extends BaseEntity {
|
||||
|
||||
private Integer maxCount;
|
||||
|
||||
private Integer weight;
|
||||
|
||||
private String isMaster = "1";
|
||||
|
||||
private String isUse;
|
||||
private String isPrimary;
|
||||
|
||||
@NotBlank(message = "租户ID", groups = {AddGroup.class, EditGroup.class})
|
||||
@Schema(description = "租户ID")
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.qiaoba.module.tenant.entity.param;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@ -16,21 +17,15 @@ import java.io.Serializable;
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SysTenantDatasourceParam implements Serializable {
|
||||
|
||||
private String tenantId;
|
||||
|
||||
private String isMaster;
|
||||
|
||||
private String isUse;
|
||||
|
||||
private String isPrimary;
|
||||
|
||||
public SysTenantDatasourceParam(String tenantId) {
|
||||
this.tenantId = tenantId;
|
||||
}
|
||||
|
||||
public SysTenantDatasourceParam(String tenantId, String isMaster) {
|
||||
this.tenantId = tenantId;
|
||||
this.isMaster = isMaster;
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,8 @@ package com.qiaoba.module.tenant.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.qiaoba.module.tenant.entity.SysTenantDatasource;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 租户数据源 数据层
|
||||
*
|
||||
@ -11,4 +13,12 @@ import com.qiaoba.module.tenant.entity.SysTenantDatasource;
|
||||
* @since 2023/6/7 14:47
|
||||
*/
|
||||
public interface SysTenantDatasourceMapper extends BaseMapper<SysTenantDatasource> {
|
||||
|
||||
/**
|
||||
* 查询所有数据源模式的租户ID
|
||||
*
|
||||
* @return tenantIds
|
||||
*/
|
||||
List<String> selectTenantIds();
|
||||
|
||||
}
|
||||
|
@ -15,12 +15,12 @@ import java.util.List;
|
||||
public interface SysTenantDatasourceService {
|
||||
|
||||
/**
|
||||
* 查询租户的主库
|
||||
* 查询租户的主要数据源
|
||||
*
|
||||
* @param tenantId 租户ID
|
||||
* @return 数据源
|
||||
*/
|
||||
SysTenantDatasource selectMaster(String tenantId);
|
||||
SysTenantDatasource selectPrimary(String tenantId);
|
||||
|
||||
/**
|
||||
* 新增
|
||||
@ -61,4 +61,11 @@ public interface SysTenantDatasourceService {
|
||||
* @return list
|
||||
*/
|
||||
List<SysTenantDatasource> selectList(SysTenantDatasourceParam param);
|
||||
|
||||
/**
|
||||
* 查询所有数据源模式的租户ID
|
||||
*
|
||||
* @return tenantIds
|
||||
*/
|
||||
List<String> selectTenantIds();
|
||||
}
|
||||
|
@ -12,7 +12,9 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 动态数据源接口
|
||||
@ -28,11 +30,14 @@ public class DynamicDatasourceServiceImpl implements DynamicDatasourceService {
|
||||
private final SysTenantDatasourceService sysTenantDatasourceService;
|
||||
|
||||
@Override
|
||||
public List<DynamicDataSource> loadAllTenantDatasource() {
|
||||
SysTenantDatasourceParam param = new SysTenantDatasourceParam();
|
||||
param.setIsUse(BaseEnum.YES.getCode());
|
||||
List<SysTenantDatasource> datasourceList = sysTenantDatasourceService.selectList(param);
|
||||
return transform(datasourceList);
|
||||
public Map<String, List<DynamicDataSource>> loadAllTenantDatasource() {
|
||||
Map<String, List<DynamicDataSource>> datasourceMap = new LinkedHashMap<>();
|
||||
List<String> tenantIds = sysTenantDatasourceService.selectTenantIds();
|
||||
for (String tenantId : tenantIds) {
|
||||
List<SysTenantDatasource> datasourceList = sysTenantDatasourceService.selectList(new SysTenantDatasourceParam(tenantId));
|
||||
datasourceMap.put(tenantId, transform(datasourceList));
|
||||
}
|
||||
return datasourceMap;
|
||||
}
|
||||
|
||||
private List<DynamicDataSource> transform(List<SysTenantDatasource> datasourceList) {
|
||||
|
@ -26,7 +26,7 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
|
||||
private final SysTenantDatasourceMapper sysTenantDatasourceMapper;
|
||||
|
||||
@Override
|
||||
public SysTenantDatasource selectMaster(String tenantId) {
|
||||
public SysTenantDatasource selectPrimary(String tenantId) {
|
||||
return sysTenantDatasourceMapper.selectOne(paramToWrapper(new SysTenantDatasourceParam(tenantId, BaseEnum.YES.getCode())));
|
||||
}
|
||||
|
||||
@ -55,13 +55,16 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
|
||||
return sysTenantDatasourceMapper.selectList(paramToWrapper(param));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> selectTenantIds() {
|
||||
return sysTenantDatasourceMapper.selectTenantIds();
|
||||
}
|
||||
|
||||
private QueryWrapper<SysTenantDatasource> paramToWrapper(SysTenantDatasourceParam param) {
|
||||
QueryWrapper<SysTenantDatasource> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
.eq(StrUtil.isNotBlank(param.getTenantId()), SysTenantDatasource::getTenantId, param.getTenantId())
|
||||
.eq(StrUtil.isNotBlank(param.getIsUse()), SysTenantDatasource::getIsUse, param.getIsUse())
|
||||
.eq(StrUtil.isNotBlank(param.getIsMaster()), SysTenantDatasource::getIsMaster, param.getIsMaster());
|
||||
|
||||
.eq(StrUtil.isNotBlank(param.getIsPrimary()), SysTenantDatasource::getIsPrimary, param.getIsPrimary());
|
||||
return wrapper;
|
||||
}
|
||||
}
|
||||
|
@ -12,13 +12,11 @@ import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.common.database.config.DynamicDataSourceConfig;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
import com.qiaoba.common.database.properties.PoolInfo;
|
||||
import com.qiaoba.common.database.utils.JdbcUtil;
|
||||
import com.qiaoba.common.redis.service.RedisService;
|
||||
import com.qiaoba.module.tenant.entity.SysTenant;
|
||||
import com.qiaoba.module.tenant.entity.SysTenantDatasource;
|
||||
import com.qiaoba.module.tenant.entity.param.SysTenantParam;
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantSettingVo;
|
||||
import com.qiaoba.module.tenant.handler.DataHandlerFactory;
|
||||
import com.qiaoba.module.tenant.mapper.SysTenantMapper;
|
||||
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
|
||||
@ -121,16 +119,6 @@ public class SysTenantServiceImpl implements SysTenantService {
|
||||
if (!result) {
|
||||
throw new ServiceException("同步数据出错, 数据已回滚");
|
||||
}
|
||||
// 将数据源添加到数据源池中
|
||||
if (sysTenant.getMode().equals(SysTenant.DATASOURCE_MODE)) {
|
||||
SysTenantDatasource master = sysTenantDatasourceService.selectMaster(tenantId);
|
||||
dynamicDataSourceConfig.addTenantDataSource(tenantId,
|
||||
DataBaseEnum.getDriver(master.getType()),
|
||||
DataBaseEnum.getUrl(master.getType(), master.getIp(), master.getPort(), master.getName()),
|
||||
master.getUsername(),
|
||||
master.getPassword(),
|
||||
new PoolInfo(master.getInitCount(), master.getMinCount(), master.getMaxCount()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -204,7 +192,7 @@ public class SysTenantServiceImpl implements SysTenantService {
|
||||
* 处理数据源模式
|
||||
*/
|
||||
private Connection datasource(String tenantId) {
|
||||
SysTenantDatasource master = sysTenantDatasourceService.selectMaster(tenantId);
|
||||
SysTenantDatasource master = sysTenantDatasourceService.selectPrimary(tenantId);
|
||||
if (Objects.isNull(master)) {
|
||||
throw new ServiceException("未找到租户主数据源信息");
|
||||
}
|
||||
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.qiaoba.module.tenant.mapper.SysTenantDatasourceMapper">
|
||||
<select id="selectTenantIds" resultType="string">
|
||||
SELECT `tenant_id` FROM `sys_tenant_datasource` GROUP BY `tenant_id`
|
||||
</select>
|
||||
</mapper>
|
Reference in New Issue
Block a user