This commit is contained in:
2023-06-26 17:07:45 +08:00
parent caeae9127f
commit ae12b7f2ff
22 changed files with 656 additions and 99 deletions

View File

@ -24,8 +24,16 @@ public class SysTenantDatasourceParam implements Serializable {
private String isPrimary;
private String ip;
public SysTenantDatasourceParam(String tenantId) {
this.tenantId = tenantId;
}
public SysTenantDatasourceParam(String tenantId, String isPrimary) {
this.tenantId = tenantId;
this.isPrimary = isPrimary;
}
}

View File

@ -22,6 +22,15 @@ public interface SysTenantDatasourceService {
*/
SysTenantDatasource selectPrimary(String tenantId);
/**
* 通过IP查询
*
* @param tenantId tenantId
* @param ip ip
* @return obj
*/
SysTenantDatasource selectByIp(String tenantId, String ip);
/**
* 新增
*

View File

@ -1,8 +1,10 @@
package com.qiaoba.module.tenant.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.qiaoba.common.base.enums.BaseEnum;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exceptions.ServiceException;
import com.qiaoba.common.database.entity.DynamicDataSource;
import com.qiaoba.common.database.service.DynamicDatasourceService;
import com.qiaoba.module.tenant.entity.SysTenantDatasource;
@ -11,10 +13,7 @@ import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 动态数据源接口
@ -35,7 +34,7 @@ public class DynamicDatasourceServiceImpl implements DynamicDatasourceService {
List<String> tenantIds = sysTenantDatasourceService.selectTenantIds();
for (String tenantId : tenantIds) {
List<SysTenantDatasource> datasourceList = sysTenantDatasourceService.selectList(new SysTenantDatasourceParam(tenantId));
datasourceMap.put(tenantId, transform(datasourceList));
datasourceMap.put(tenantId, transformList(datasourceList));
}
return datasourceMap;
}
@ -51,17 +50,30 @@ public class DynamicDatasourceServiceImpl implements DynamicDatasourceService {
sysTenantDatasourceService.setBackupDatasourceExcludeId(tenantId, datasourceId);
}
private List<DynamicDataSource> transform(List<SysTenantDatasource> datasourceList) {
@Override
public DynamicDataSource selectByIp(String tenantId, String ip) {
SysTenantDatasource sysTenantDatasource = sysTenantDatasourceService.selectByIp(tenantId, ip);
if (Objects.isNull(sysTenantDatasource)) {
throw new ServiceException(StrUtil.format("未找到数据源,查询方式: {}", ip));
}
return transform(sysTenantDatasource);
}
private List<DynamicDataSource> transformList(List<SysTenantDatasource> datasourceList) {
List<DynamicDataSource> dynamicDataSourceList = new ArrayList<>();
for (SysTenantDatasource datasource : datasourceList) {
DynamicDataSource dynamicDataSource = BeanUtil.copyProperties(datasource, DynamicDataSource.class);
dynamicDataSource.setInitialSize(datasource.getInitCount());
dynamicDataSource.setMinIdle(datasource.getMinCount());
dynamicDataSource.setMaxActive(datasource.getMaxCount());
dynamicDataSource.setDriver(DataBaseEnum.getDriver(datasource.getType()));
dynamicDataSource.setUrl(DataBaseEnum.getUrl(datasource.getType(), datasource.getIp(), datasource.getPort(), datasource.getName()));
dynamicDataSourceList.add(dynamicDataSource);
dynamicDataSourceList.add(transform(datasource));
}
return dynamicDataSourceList;
}
private DynamicDataSource transform(SysTenantDatasource datasource) {
DynamicDataSource dynamicDataSource = BeanUtil.copyProperties(datasource, DynamicDataSource.class);
dynamicDataSource.setInitialSize(datasource.getInitCount());
dynamicDataSource.setMinIdle(datasource.getMinCount());
dynamicDataSource.setMaxActive(datasource.getMaxCount());
dynamicDataSource.setDriver(DataBaseEnum.getDriver(datasource.getType()));
dynamicDataSource.setUrl(DataBaseEnum.getUrl(datasource.getType(), datasource.getIp(), datasource.getPort(), datasource.getName()));
return dynamicDataSource;
}
}

View File

@ -30,6 +30,13 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
return sysTenantDatasourceMapper.selectOne(paramToWrapper(new SysTenantDatasourceParam(tenantId, BaseEnum.YES.getCode())));
}
@Override
public SysTenantDatasource selectByIp(String tenantId, String ip) {
SysTenantDatasourceParam param = new SysTenantDatasourceParam(tenantId);
param.setIp(ip);
return sysTenantDatasourceMapper.selectOne(paramToWrapper(param));
}
@Override
public int insert(SysTenantDatasource sysTenantDatasource) {
return sysTenantDatasourceMapper.insert(sysTenantDatasource);
@ -69,6 +76,7 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
QueryWrapper<SysTenantDatasource> wrapper = new QueryWrapper<>();
wrapper.lambda()
.eq(StrUtil.isNotBlank(param.getTenantId()), SysTenantDatasource::getTenantId, param.getTenantId())
.eq(StrUtil.isNotBlank(param.getIp()), SysTenantDatasource::getIp, param.getIp())
.eq(StrUtil.isNotBlank(param.getIsPrimary()), SysTenantDatasource::getIsPrimary, param.getIsPrimary());
return wrapper;
}