动态数据源,代码结构优化

pull/3/head
liuhanqing 2021-02-02 22:20:09 +08:00
parent 831525b71f
commit 297823d1db
7 changed files with 110 additions and 77 deletions

View File

@ -17,6 +17,13 @@
<dependencies>
<!--校验模块的api-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>validator-api</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>

View File

@ -1,5 +1,6 @@
package cn.stylefeng.roses.kernel.dsctn.api.exception;
import cn.hutool.core.util.StrUtil;
import cn.stylefeng.roses.kernel.dsctn.api.constants.DatasourceContainerConstants;
import cn.stylefeng.roses.kernel.rule.abstracts.AbstractExceptionEnum;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
@ -12,12 +13,12 @@ import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
*/
public class DatasourceContainerException extends ServiceException {
public DatasourceContainerException(AbstractExceptionEnum exception, Object... params) {
super(DatasourceContainerConstants.DS_CTN_MODULE_NAME, exception.getErrorCode(), StrUtil.format(exception.getUserTip(), params));
}
public DatasourceContainerException(AbstractExceptionEnum exception) {
super(DatasourceContainerConstants.DS_CTN_MODULE_NAME, exception);
}
public DatasourceContainerException(AbstractExceptionEnum exception, String userTip) {
super(DatasourceContainerConstants.DS_CTN_MODULE_NAME, exception.getErrorCode(), userTip);
}
}

View File

@ -1,4 +1,4 @@
package cn.stylefeng.roses.kernel.dsctn.modular.pojo;
package cn.stylefeng.roses.kernel.dsctn.api.pojo.request;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.validator.validators.unique.TableUniqueValue;
@ -16,7 +16,7 @@ import javax.validation.constraints.NotNull;
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class DatabaseInfoParam extends BaseRequest {
public class DatabaseInfoRequest extends BaseRequest {
private static final long serialVersionUID = 1L;

View File

@ -32,14 +32,6 @@
<version>1.0.0</version>
</dependency>
<!--参数校验模块-->
<!--用在控制器,参数校验-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>validator-api</artifactId>
<version>1.0.0</version>
</dependency>
<!--数据库sdk-->
<!--数据库dao框架-->
<dependency>

View File

@ -2,7 +2,7 @@ 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.modular.pojo.DatabaseInfoParam;
import cn.stylefeng.roses.kernel.dsctn.api.pojo.request.DatabaseInfoRequest;
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;
@ -37,8 +37,8 @@ public class DatabaseInfoController {
* @date 2020/11/1 22:16
*/
@PostResource(name = "新增数据源", path = "/databaseInfo/add")
public ResponseData add(@RequestBody @Validated(BaseRequest.add.class) DatabaseInfoParam databaseInfoParam) {
databaseInfoService.add(databaseInfoParam);
public ResponseData add(@RequestBody @Validated(BaseRequest.add.class) DatabaseInfoRequest databaseInfoRequest) {
databaseInfoService.add(databaseInfoRequest);
return new SuccessResponseData();
}
@ -49,8 +49,8 @@ public class DatabaseInfoController {
* @date 2020/11/1 22:16
*/
@PostResource(name = "编辑数据源", path = "/databaseInfo/edit")
public ResponseData edit(@RequestBody @Validated(DatabaseInfoParam.edit.class) DatabaseInfoParam databaseInfoParam) {
databaseInfoService.edit(databaseInfoParam);
public ResponseData edit(@RequestBody @Validated(DatabaseInfoRequest.edit.class) DatabaseInfoRequest databaseInfoRequest) {
databaseInfoService.edit(databaseInfoRequest);
return new SuccessResponseData();
}
@ -61,8 +61,8 @@ public class DatabaseInfoController {
* @date 2020/11/1 22:18
*/
@PostResource(name = "删除数据源", path = "/databaseInfo/delete")
public ResponseData delete(@RequestBody @Validated(DatabaseInfoParam.delete.class) DatabaseInfoParam databaseInfoParam) {
databaseInfoService.delete(databaseInfoParam);
public ResponseData del(@RequestBody @Validated(DatabaseInfoRequest.delete.class) DatabaseInfoRequest databaseInfoRequest) {
databaseInfoService.del(databaseInfoRequest);
return new SuccessResponseData();
}
@ -73,8 +73,8 @@ public class DatabaseInfoController {
* @date 2020/11/1 22:18
*/
@GetResource(name = "查询数据源列表(带分页)", path = "/databaseInfo/page")
public ResponseData page(DatabaseInfoParam databaseInfoParam) {
PageResult<DatabaseInfo> pageResult = databaseInfoService.page(databaseInfoParam);
public ResponseData findPage(DatabaseInfoRequest databaseInfoRequest) {
PageResult<DatabaseInfo> pageResult = databaseInfoService.findPage(databaseInfoRequest);
return new SuccessResponseData(pageResult);
}
@ -85,8 +85,8 @@ public class DatabaseInfoController {
* @date 2021/1/23 20:29
*/
@GetResource(name = "查询数据源详情", path = "/databaseInfo/detail")
public ResponseData detail(@Validated(BaseRequest.detail.class) DatabaseInfoParam databaseInfoParam) {
DatabaseInfo databaseInfo = databaseInfoService.detail(databaseInfoParam);
public ResponseData detail(@Validated(BaseRequest.detail.class) DatabaseInfoRequest databaseInfoRequest) {
DatabaseInfo databaseInfo = databaseInfoService.detail(databaseInfoRequest);
return new SuccessResponseData(databaseInfo);
}

View File

@ -2,9 +2,11 @@ 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.modular.pojo.DatabaseInfoParam;
import cn.stylefeng.roses.kernel.dsctn.api.pojo.request.DatabaseInfoRequest;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
*
*
@ -16,47 +18,58 @@ public interface DatabaseInfoService extends IService<DatabaseInfo> {
/**
*
*
* @param databaseInfoParam
* @param databaseInfoRequest
* @author fengshuonan
* @date 2020/11/1 21:47
*/
void add(DatabaseInfoParam databaseInfoParam);
void add(DatabaseInfoRequest databaseInfoRequest);
/**
*
*
* @param databaseInfoParam
* @param databaseInfoRequest
* @author fengshuonan
* @date 2020/11/1 21:47
*/
void edit(DatabaseInfoParam databaseInfoParam);
void edit(DatabaseInfoRequest databaseInfoRequest);
/**
* service
*
* @param databaseInfoParam
* @param databaseInfoRequest
* @author fengshuonan
* @date 2020/11/1 21:47
*/
void delete(DatabaseInfoParam databaseInfoParam);
void del(DatabaseInfoRequest databaseInfoRequest);
/**
*
*
* @param databaseInfoParam
* @return
* @author fengshuonan
* @date 2020/11/1 21:47
*/
PageResult<DatabaseInfo> page(DatabaseInfoParam databaseInfoParam);
/**
*
*
* @param databaseInfoParam
* @param databaseInfoRequest
* @author fengshuonan
* @date 2021/1/23 20:30
*/
DatabaseInfo detail(DatabaseInfoParam databaseInfoParam);
DatabaseInfo detail(DatabaseInfoRequest databaseInfoRequest);
/**
*
*
* @param databaseInfoRequest
* @return
* @author fengshuonan
* @date 2020/11/1 21:47
*/
PageResult<DatabaseInfo> findPage(DatabaseInfoRequest databaseInfoRequest);
/**
*
*
* @param databaseInfoRequest
* @author liuhanqing
* @date 2021/2/2 21:21
*/
List<DatabaseInfo> findList(DatabaseInfoRequest databaseInfoRequest);
}

View File

@ -13,7 +13,7 @@ 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.modular.pojo.DatabaseInfoParam;
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;
@ -45,13 +45,13 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
@Override
@Transactional(rollbackFor = Exception.class)
public void add(DatabaseInfoParam databaseInfoParam) {
public void add(DatabaseInfoRequest databaseInfoRequest) {
// 判断数据库连接是否可用
validateConnection(databaseInfoParam);
validateConnection(databaseInfoRequest);
// 数据库中插入记录
DatabaseInfo entity = parseEntity(databaseInfoParam);
DatabaseInfo entity = parseEntity(databaseInfoRequest);
this.save(entity);
// 往数据源容器文中添加数据源
@ -60,25 +60,23 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
@Override
@Transactional(rollbackFor = Exception.class)
public void edit(DatabaseInfoParam databaseInfoParam) {
public void edit(DatabaseInfoRequest databaseInfoRequest) {
DatabaseInfo oldEntity = this.getById(databaseInfoParam.getDbId());
DatabaseInfo oldEntity = this.getById(databaseInfoRequest.getDbId());
if (oldEntity == null) {
String userTip = StrUtil.format(EDIT_DATASOURCE_ERROR.getUserTip(), databaseInfoParam.getDbId());
throw new DatasourceContainerException(EDIT_DATASOURCE_ERROR, userTip);
throw new DatasourceContainerException(EDIT_DATASOURCE_ERROR, databaseInfoRequest.getDbId());
}
// 不能修改数据源的名称
if (!databaseInfoParam.getDbName().equals(oldEntity.getDbName())) {
String userTip = StrUtil.format(EDIT_DATASOURCE_NAME_ERROR.getUserTip(), oldEntity.getDbName());
throw new DatasourceContainerException(EDIT_DATASOURCE_NAME_ERROR, userTip);
if (!databaseInfoRequest.getDbName().equals(oldEntity.getDbName())) {
throw new DatasourceContainerException(EDIT_DATASOURCE_NAME_ERROR, oldEntity.getDbName());
}
// 判断数据库连接是否可用
validateConnection(databaseInfoParam);
validateConnection(databaseInfoRequest);
// 更新库中的记录
BeanUtil.copyProperties(databaseInfoParam, oldEntity);
BeanUtil.copyProperties(databaseInfoRequest, oldEntity);
this.updateById(oldEntity);
// 往数据源容器文中添加数据源
@ -87,11 +85,11 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(DatabaseInfoParam databaseInfoParam) {
public void del(DatabaseInfoRequest databaseInfoRequest) {
DatabaseInfo databaseInfo = this.getById(databaseInfoParam.getDbId());
DatabaseInfo databaseInfo = this.getById(databaseInfoRequest.getDbId());
if (databaseInfo == null) {
String userTip = StrUtil.format(DELETE_DATASOURCE_NOT_EXISTED_ERROR.getUserTip(), databaseInfoParam.getDbId());
String userTip = StrUtil.format(DELETE_DATASOURCE_NOT_EXISTED_ERROR.getUserTip(), databaseInfoRequest.getDbId());
throw new DatasourceContainerException(DELETE_DATASOURCE_NOT_EXISTED_ERROR, userTip);
}
@ -108,7 +106,7 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
// 删除库中的数据源记录
LambdaUpdateWrapper<DatabaseInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(DatabaseInfo::getDelFlag, YesOrNotEnum.Y.getCode());
updateWrapper.eq(DatabaseInfo::getDbId, databaseInfoParam.getDbId());
updateWrapper.eq(DatabaseInfo::getDbId, databaseInfoRequest.getDbId());
this.update(updateWrapper);
// 删除容器中的数据源记录
@ -116,16 +114,8 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
}
@Override
public PageResult<DatabaseInfo> page(DatabaseInfoParam databaseInfoParam) {
LambdaQueryWrapper<DatabaseInfo> queryWrapper = new LambdaQueryWrapper<>();
// 根据名称模糊查询
if (ObjectUtil.isNotNull(databaseInfoParam) && ObjectUtil.isNotEmpty(databaseInfoParam.getDbName())) {
queryWrapper.like(DatabaseInfo::getDbName, databaseInfoParam.getDbName());
}
// 查询没被删除的
queryWrapper.eq(DatabaseInfo::getDelFlag, YesOrNotEnum.N);
public PageResult<DatabaseInfo> findPage(DatabaseInfoRequest databaseInfoRequest) {
LambdaQueryWrapper<DatabaseInfo> queryWrapper = createWrapper(databaseInfoRequest);
// 查询分页结果
Page<DatabaseInfo> result = this.page(PageFactory.defaultPage(), queryWrapper);
@ -139,13 +129,20 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
return PageResultFactory.createPageResult(result);
}
@Override
public DatabaseInfo detail(DatabaseInfoParam databaseInfoParam) {
DatabaseInfo oldEntity = this.getById(databaseInfoParam.getDbId());
@Override
public List<DatabaseInfo> findList(DatabaseInfoRequest databaseInfoRequest) {
LambdaQueryWrapper<DatabaseInfo> wrapper = createWrapper(databaseInfoRequest);
return this.list(wrapper);
}
@Override
public DatabaseInfo detail(DatabaseInfoRequest databaseInfoRequest) {
DatabaseInfo oldEntity = this.getById(databaseInfoRequest.getDbId());
if (oldEntity == null) {
String userTip = StrUtil.format(EDIT_DATASOURCE_ERROR.getUserTip(), databaseInfoParam.getDbId());
throw new DatasourceContainerException(EDIT_DATASOURCE_ERROR, userTip);
throw new DatasourceContainerException(EDIT_DATASOURCE_ERROR, databaseInfoRequest.getDbId());
}
oldEntity.setPassword("***");
@ -158,7 +155,7 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
* @author fengshuonan
* @date 2020/11/1 21:50
*/
private void validateConnection(DatabaseInfoParam param) {
private void validateConnection(DatabaseInfoRequest param) {
Connection conn = null;
try {
Class.forName(param.getJdbcDriver());
@ -183,7 +180,7 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
* @author fengshuonan
* @date 2020/11/1 21:50
*/
private DatabaseInfo parseEntity(DatabaseInfoParam param) {
private DatabaseInfo parseEntity(DatabaseInfoRequest param) {
DatabaseInfo entity = new DatabaseInfo();
BeanUtil.copyProperties(param, entity);
return entity;
@ -225,4 +222,27 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
}
}
/**
* wrapper
*
* @author liuhanqing
* @date 2021/1/8 14:16
*/
private LambdaQueryWrapper<DatabaseInfo> createWrapper(DatabaseInfoRequest databaseInfoRequest) {
LambdaQueryWrapper<DatabaseInfo> queryWrapper = new LambdaQueryWrapper<>();
// 根据名称模糊查询
String dbName = databaseInfoRequest.getDbName();
// 拼接sql 条件
queryWrapper.like(ObjectUtil.isNotEmpty(dbName), DatabaseInfo::getDbName, dbName);
// 查询没被删除的
queryWrapper.eq(DatabaseInfo::getDelFlag, YesOrNotEnum.N);
return queryWrapper;
}
}