【ds】整理多数据源模块

pull/3/head
fengshuonan 2021-02-08 10:07:45 +08:00
parent d4d0ca43ee
commit 6d84980b6f
4 changed files with 68 additions and 91 deletions

View File

@ -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为{}");
/**
*

View File

@ -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();
}
/**
*
*

View File

@ -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);
}

View File

@ -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;
}