mirror of https://gitee.com/stylefeng/roses
【ds】整理多数据源模块
parent
d4d0ca43ee
commit
6d84980b6f
|
@ -59,30 +59,20 @@ public enum DatasourceContainerExceptionEnum implements AbstractExceptionEnum {
|
|||
*/
|
||||
INIT_DATASOURCE_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DatasourceContainerConstants.DS_CTN_EXCEPTION_STEP_CODE + "09", "初始化数据源异常"),
|
||||
|
||||
/**
|
||||
* 修改数据源失败,所传参数数据源不存在
|
||||
*/
|
||||
EDIT_DATASOURCE_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DatasourceContainerConstants.DS_CTN_EXCEPTION_STEP_CODE + "10", "修改数据源失败,所传参数数据源不存在,id={}"),
|
||||
|
||||
/**
|
||||
* 修改数据源失败,不能修改数据源名称
|
||||
*/
|
||||
EDIT_DATASOURCE_NAME_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DatasourceContainerConstants.DS_CTN_EXCEPTION_STEP_CODE + "10", "修改数据源失败,不能修改数据源名称,原名称为={}"),
|
||||
|
||||
/**
|
||||
* 删除数据源失败,原数据不存在
|
||||
*/
|
||||
DELETE_DATASOURCE_NOT_EXISTED_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DatasourceContainerConstants.DS_CTN_EXCEPTION_STEP_CODE + "10", "修改数据源失败,不能修改数据源名称,原名称为={}"),
|
||||
|
||||
/**
|
||||
* 租户数据源不能删除
|
||||
*/
|
||||
TENANT_DATASOURCE_CANT_DELETE(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DatasourceContainerConstants.DS_CTN_EXCEPTION_STEP_CODE + "11", "租户数据源不能删除"),
|
||||
|
||||
/**
|
||||
* 主数据源不能删除
|
||||
* 数据源信息不存在
|
||||
*/
|
||||
MASTER_DATASOURCE_CANT_DELETE(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DatasourceContainerConstants.DS_CTN_EXCEPTION_STEP_CODE + "12", "主数据源不能删除,会导致当前程序崩溃");
|
||||
DATASOURCE_INFO_NOT_EXISTED(RuleConstants.BUSINESS_ERROR_TYPE_CODE + DatasourceContainerConstants.DS_CTN_EXCEPTION_STEP_CODE + "12", "数据源信息不存在,数据源id为:{}");
|
||||
|
||||
/**
|
||||
* 错误编码
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package cn.stylefeng.roses.kernel.dsctn.modular.controller;
|
||||
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.entity.DatabaseInfo;
|
||||
import cn.stylefeng.roses.kernel.dsctn.api.pojo.request.DatabaseInfoRequest;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.entity.DatabaseInfo;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.service.DatabaseInfoService;
|
||||
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
|
||||
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
|
||||
|
@ -42,18 +42,6 @@ public class DatabaseInfoController {
|
|||
return new SuccessResponseData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑数据源
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/11/1 22:16
|
||||
*/
|
||||
@PostResource(name = "编辑数据源", path = "/databaseInfo/edit")
|
||||
public ResponseData edit(@RequestBody @Validated(DatabaseInfoRequest.edit.class) DatabaseInfoRequest databaseInfoRequest) {
|
||||
databaseInfoService.edit(databaseInfoRequest);
|
||||
return new SuccessResponseData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据源
|
||||
*
|
||||
|
@ -66,6 +54,18 @@ public class DatabaseInfoController {
|
|||
return new SuccessResponseData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑数据源
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/11/1 22:16
|
||||
*/
|
||||
@PostResource(name = "编辑数据源", path = "/databaseInfo/edit")
|
||||
public ResponseData edit(@RequestBody @Validated(DatabaseInfoRequest.edit.class) DatabaseInfoRequest databaseInfoRequest) {
|
||||
databaseInfoService.edit(databaseInfoRequest);
|
||||
return new SuccessResponseData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询数据源列表(带分页)
|
||||
*
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package cn.stylefeng.roses.kernel.dsctn.modular.service;
|
||||
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.entity.DatabaseInfo;
|
||||
import cn.stylefeng.roses.kernel.dsctn.api.pojo.request.DatabaseInfoRequest;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.entity.DatabaseInfo;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -24,15 +24,6 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
|
|||
*/
|
||||
void add(DatabaseInfoRequest databaseInfoRequest);
|
||||
|
||||
/**
|
||||
* 编辑数据库信息
|
||||
*
|
||||
* @param databaseInfoRequest 编辑参数
|
||||
* @author fengshuonan
|
||||
* @date 2020/11/1 21:47
|
||||
*/
|
||||
void edit(DatabaseInfoRequest databaseInfoRequest);
|
||||
|
||||
/**
|
||||
* 删除,删除会导致某些用该数据源的service操作失败
|
||||
*
|
||||
|
@ -42,6 +33,14 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
|
|||
*/
|
||||
void del(DatabaseInfoRequest databaseInfoRequest);
|
||||
|
||||
/**
|
||||
* 编辑数据库信息
|
||||
*
|
||||
* @param databaseInfoRequest 编辑参数
|
||||
* @author fengshuonan
|
||||
* @date 2020/11/1 21:47
|
||||
*/
|
||||
void edit(DatabaseInfoRequest databaseInfoRequest);
|
||||
|
||||
/**
|
||||
* 查询数据库信息详情
|
||||
|
@ -71,5 +70,4 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
|
|||
*/
|
||||
List<DatabaseInfo> findList(DatabaseInfoRequest databaseInfoRequest);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -9,11 +9,11 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
|||
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.dsctn.api.exception.DatasourceContainerException;
|
||||
import cn.stylefeng.roses.kernel.dsctn.api.pojo.request.DatabaseInfoRequest;
|
||||
import cn.stylefeng.roses.kernel.dsctn.context.DataSourceContext;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.entity.DatabaseInfo;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.factory.DruidPropertiesFactory;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.mapper.DatabaseInfoMapper;
|
||||
import cn.stylefeng.roses.kernel.dsctn.api.pojo.request.DatabaseInfoRequest;
|
||||
import cn.stylefeng.roses.kernel.dsctn.modular.service.DatabaseInfoService;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
|
@ -51,47 +51,19 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
|||
validateConnection(databaseInfoRequest);
|
||||
|
||||
// 数据库中插入记录
|
||||
DatabaseInfo entity = parseEntity(databaseInfoRequest);
|
||||
DatabaseInfo entity = new DatabaseInfo();
|
||||
BeanUtil.copyProperties(databaseInfoRequest, entity);
|
||||
this.save(entity);
|
||||
|
||||
// 往数据源容器文中添加数据源
|
||||
addDataSourceToContext(entity, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void edit(DatabaseInfoRequest databaseInfoRequest) {
|
||||
|
||||
DatabaseInfo oldEntity = this.getById(databaseInfoRequest.getDbId());
|
||||
if (oldEntity == null) {
|
||||
throw new DatasourceContainerException(EDIT_DATASOURCE_ERROR, databaseInfoRequest.getDbId());
|
||||
}
|
||||
|
||||
// 不能修改数据源的名称
|
||||
if (!databaseInfoRequest.getDbName().equals(oldEntity.getDbName())) {
|
||||
throw new DatasourceContainerException(EDIT_DATASOURCE_NAME_ERROR, oldEntity.getDbName());
|
||||
}
|
||||
|
||||
// 判断数据库连接是否可用
|
||||
validateConnection(databaseInfoRequest);
|
||||
|
||||
// 更新库中的记录
|
||||
BeanUtil.copyProperties(databaseInfoRequest, oldEntity);
|
||||
this.updateById(oldEntity);
|
||||
|
||||
// 往数据源容器文中添加数据源
|
||||
addDataSourceToContext(oldEntity, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void del(DatabaseInfoRequest databaseInfoRequest) {
|
||||
|
||||
DatabaseInfo databaseInfo = this.getById(databaseInfoRequest.getDbId());
|
||||
if (databaseInfo == null) {
|
||||
String userTip = StrUtil.format(DELETE_DATASOURCE_NOT_EXISTED_ERROR.getUserTip(), databaseInfoRequest.getDbId());
|
||||
throw new DatasourceContainerException(DELETE_DATASOURCE_NOT_EXISTED_ERROR, userTip);
|
||||
}
|
||||
DatabaseInfo databaseInfo = this.queryDatabaseInfoById(databaseInfoRequest);
|
||||
|
||||
// 如果是租户数据库不能删除
|
||||
if (databaseInfo.getDbName().startsWith(TENANT_DB_PREFIX)) {
|
||||
|
@ -100,7 +72,7 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
|||
|
||||
// 不能删除主数据源
|
||||
if (MASTER_DATASOURCE_NAME.equals(databaseInfo.getDbName())) {
|
||||
throw new DatasourceContainerException(MASTER_DATASOURCE_CANT_DELETE);
|
||||
throw new DatasourceContainerException(DATASOURCE_INFO_NOT_EXISTED);
|
||||
}
|
||||
|
||||
// 删除库中的数据源记录
|
||||
|
@ -113,6 +85,28 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
|||
DataSourceContext.removeDataSource(databaseInfo.getDbName());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void edit(DatabaseInfoRequest databaseInfoRequest) {
|
||||
|
||||
DatabaseInfo databaseInfo = this.queryDatabaseInfoById(databaseInfoRequest);
|
||||
|
||||
// 不能修改数据源的名称
|
||||
if (!databaseInfoRequest.getDbName().equals(databaseInfo.getDbName())) {
|
||||
throw new DatasourceContainerException(EDIT_DATASOURCE_NAME_ERROR, databaseInfo.getDbName());
|
||||
}
|
||||
|
||||
// 判断数据库连接是否可用
|
||||
validateConnection(databaseInfoRequest);
|
||||
|
||||
// 更新库中的记录
|
||||
BeanUtil.copyProperties(databaseInfoRequest, databaseInfo);
|
||||
this.updateById(databaseInfo);
|
||||
|
||||
// 往数据源容器文中添加数据源
|
||||
addDataSourceToContext(databaseInfo, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<DatabaseInfo> findPage(DatabaseInfoRequest databaseInfoRequest) {
|
||||
LambdaQueryWrapper<DatabaseInfo> queryWrapper = createWrapper(databaseInfoRequest);
|
||||
|
@ -139,14 +133,9 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
|||
|
||||
@Override
|
||||
public DatabaseInfo detail(DatabaseInfoRequest databaseInfoRequest) {
|
||||
|
||||
DatabaseInfo oldEntity = this.getById(databaseInfoRequest.getDbId());
|
||||
if (oldEntity == null) {
|
||||
throw new DatasourceContainerException(EDIT_DATASOURCE_ERROR, databaseInfoRequest.getDbId());
|
||||
}
|
||||
|
||||
oldEntity.setPassword("***");
|
||||
return oldEntity;
|
||||
DatabaseInfo databaseInfo = this.queryDatabaseInfoById(databaseInfoRequest);
|
||||
databaseInfo.setPassword("***");
|
||||
return databaseInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -174,18 +163,6 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* param转化为实体
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2020/11/1 21:50
|
||||
*/
|
||||
private DatabaseInfo parseEntity(DatabaseInfoRequest param) {
|
||||
DatabaseInfo entity = new DatabaseInfo();
|
||||
BeanUtil.copyProperties(param, entity);
|
||||
return entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* 往数据源容器文中添加数据源
|
||||
*
|
||||
|
@ -222,6 +199,19 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询数据库信息通过id
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/2/8 9:53
|
||||
*/
|
||||
private DatabaseInfo queryDatabaseInfoById(DatabaseInfoRequest databaseInfoRequest) {
|
||||
DatabaseInfo databaseInfo = this.getById(databaseInfoRequest.getDbId());
|
||||
if (databaseInfo == null) {
|
||||
throw new DatasourceContainerException(DATASOURCE_INFO_NOT_EXISTED, databaseInfoRequest.getDbId());
|
||||
}
|
||||
return databaseInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建wrapper
|
||||
|
@ -239,8 +229,7 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
|||
queryWrapper.like(ObjectUtil.isNotEmpty(dbName), DatabaseInfo::getDbName, dbName);
|
||||
|
||||
// 查询没被删除的
|
||||
queryWrapper.eq(DatabaseInfo::getDelFlag, YesOrNotEnum.N);
|
||||
|
||||
queryWrapper.eq(DatabaseInfo::getDelFlag, YesOrNotEnum.N.getCode());
|
||||
|
||||
return queryWrapper;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue