mirror of https://gitee.com/stylefeng/roses
【dbs】整理dbs模块的字段和业务
parent
fd374e81fa
commit
3e0b4e60a8
|
@ -1,9 +1,9 @@
|
||||||
package cn.stylefeng.roses.kernel.db.api.factory;
|
package cn.stylefeng.roses.kernel.db.api.factory;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.druid.pool.DruidDataSource;
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.enums.DbTypeEnum;
|
import cn.stylefeng.roses.kernel.db.api.enums.DbTypeEnum;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
||||||
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
@ -15,7 +15,7 @@ import java.sql.SQLException;
|
||||||
* @date 2020/10/16 15:59
|
* @date 2020/10/16 15:59
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class DruidFactory {
|
public class DruidDatasourceFactory {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建druid连接池
|
* 创建druid连接池
|
|
@ -1,8 +1,8 @@
|
||||||
package cn.stylefeng.roses.kernel.db.starter;
|
package cn.stylefeng.roses.kernel.db.starter;
|
||||||
|
|
||||||
import com.alibaba.druid.pool.DruidDataSource;
|
import cn.stylefeng.roses.kernel.db.api.factory.DruidDatasourceFactory;
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.DruidFactory;
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
||||||
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||||
|
@ -32,7 +32,7 @@ public class GunsDataSourceAutoConfiguration {
|
||||||
@Bean(initMethod = "init")
|
@Bean(initMethod = "init")
|
||||||
@ConditionalOnMissingBean(DataSource.class)
|
@ConditionalOnMissingBean(DataSource.class)
|
||||||
public DruidDataSource druidDataSource(DruidProperties druidProperties) {
|
public DruidDataSource druidDataSource(DruidProperties druidProperties) {
|
||||||
return DruidFactory.createDruidDataSource(druidProperties);
|
return DruidDatasourceFactory.createDruidDataSource(druidProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package cn.stylefeng.roses.kernel.dsctn.modular.entity;
|
package cn.stylefeng.roses.kernel.dsctn.modular.entity;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@ public class DatabaseInfo extends BaseEntity {
|
||||||
/**
|
/**
|
||||||
* 主键id
|
* 主键id
|
||||||
*/
|
*/
|
||||||
@TableId(value = "id", type = IdType.ASSIGN_ID)
|
@TableId(value = "db_id", type = IdType.ASSIGN_ID)
|
||||||
private Long id;
|
private Long dbId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据库名称(英文名称)
|
* 数据库名称(英文名称)
|
||||||
|
@ -39,11 +39,17 @@ public class DatabaseInfo extends BaseEntity {
|
||||||
@TableField("jdbc_driver")
|
@TableField("jdbc_driver")
|
||||||
private String jdbcDriver;
|
private String jdbcDriver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jdbc的url
|
||||||
|
*/
|
||||||
|
@TableField("jdbc_url")
|
||||||
|
private String jdbcUrl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据库连接的账号
|
* 数据库连接的账号
|
||||||
*/
|
*/
|
||||||
@TableField("user_name")
|
@TableField("username")
|
||||||
private String userName;
|
private String username;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据库连接密码
|
* 数据库连接密码
|
||||||
|
@ -51,16 +57,16 @@ public class DatabaseInfo extends BaseEntity {
|
||||||
@TableField("password")
|
@TableField("password")
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
/**
|
|
||||||
* jdbc的url
|
|
||||||
*/
|
|
||||||
@TableField("jdbc_url")
|
|
||||||
private String jdbcUrl;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注,摘要
|
* 备注,摘要
|
||||||
*/
|
*/
|
||||||
@TableField("remarks")
|
@TableField("remarks")
|
||||||
private String remarks;
|
private String remarks;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否删除,Y-被删除,N-未删除
|
||||||
|
*/
|
||||||
|
@TableField("del_flag")
|
||||||
|
private String delFlag;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import cn.stylefeng.roses.kernel.dsctn.modular.entity.DatabaseInfo;
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2020/11/1 21:44
|
* @date 2020/11/1 21:44
|
||||||
*/
|
*/
|
||||||
public class DruidFactory {
|
public class DruidPropertiesFactory {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建druid配置
|
* 创建druid配置
|
||||||
|
@ -20,7 +20,7 @@ public class DruidFactory {
|
||||||
public static DruidProperties createDruidProperties(DatabaseInfo databaseInfo) {
|
public static DruidProperties createDruidProperties(DatabaseInfo databaseInfo) {
|
||||||
DruidProperties druidProperties = new DruidProperties();
|
DruidProperties druidProperties = new DruidProperties();
|
||||||
druidProperties.setDriverClassName(databaseInfo.getJdbcDriver());
|
druidProperties.setDriverClassName(databaseInfo.getJdbcDriver());
|
||||||
druidProperties.setUsername(databaseInfo.getUserName());
|
druidProperties.setUsername(databaseInfo.getUsername());
|
||||||
druidProperties.setPassword(databaseInfo.getPassword());
|
druidProperties.setPassword(databaseInfo.getPassword());
|
||||||
druidProperties.setUrl(databaseInfo.getJdbcUrl());
|
druidProperties.setUrl(databaseInfo.getJdbcUrl());
|
||||||
return druidProperties;
|
return druidProperties;
|
|
@ -7,7 +7,6 @@ import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据库信息表
|
* 数据库信息表
|
||||||
|
@ -24,15 +23,15 @@ public class DatabaseInfoParam extends BaseRequest {
|
||||||
/**
|
/**
|
||||||
* 主键id
|
* 主键id
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "id不能为空,请检查id参数", groups = {edit.class, delete.class, detail.class})
|
@NotNull(message = "dbId不能为空", groups = {edit.class, delete.class, detail.class})
|
||||||
private Long id;
|
private Long dbId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据库名称(英文名称)
|
* 数据库名称(英文名称)
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "数据库名称不能为空,请检查dbName参数", groups = {add.class, edit.class})
|
@NotBlank(message = "数据库名称不能为空", groups = {add.class, edit.class})
|
||||||
@TableUniqueValue(
|
@TableUniqueValue(
|
||||||
message = "数据库名称存在重复,请检查dbName参数",
|
message = "数据库名称存在重复",
|
||||||
groups = {add.class, edit.class},
|
groups = {add.class, edit.class},
|
||||||
tableName = "sys_database_info",
|
tableName = "sys_database_info",
|
||||||
columnName = "db_name")
|
columnName = "db_name")
|
||||||
|
@ -41,9 +40,15 @@ public class DatabaseInfoParam extends BaseRequest {
|
||||||
/**
|
/**
|
||||||
* jdbc的驱动类型
|
* jdbc的驱动类型
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "jdbc的驱动类型,请检查jdbcDriver参数", groups = {add.class, edit.class})
|
@NotBlank(message = "jdbc的驱动类型为空", groups = {add.class, edit.class})
|
||||||
private String jdbcDriver;
|
private String jdbcDriver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jdbc的url
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "jdbc的url,请检查jdbcUrl参数", groups = {add.class, edit.class})
|
||||||
|
private String jdbcUrl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据库连接的账号
|
* 数据库连接的账号
|
||||||
*/
|
*/
|
||||||
|
@ -56,20 +61,9 @@ public class DatabaseInfoParam extends BaseRequest {
|
||||||
@NotBlank(message = "数据库连接密码,请检查password参数", groups = {add.class, edit.class})
|
@NotBlank(message = "数据库连接密码,请检查password参数", groups = {add.class, edit.class})
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
/**
|
|
||||||
* jdbc的url
|
|
||||||
*/
|
|
||||||
@NotBlank(message = "jdbc的url,请检查jdbcUrl参数", groups = {add.class, edit.class})
|
|
||||||
private String jdbcUrl;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注,摘要
|
* 备注,摘要
|
||||||
*/
|
*/
|
||||||
private String remarks;
|
private String remarks;
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建时间
|
|
||||||
*/
|
|
||||||
private Date createTime;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,21 +3,24 @@ package cn.stylefeng.roses.kernel.dsctn.modular.service.impl;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.stylefeng.roses.kernel.dsctn.modular.entity.DatabaseInfo;
|
import cn.stylefeng.roses.kernel.db.api.factory.DruidDatasourceFactory;
|
||||||
import cn.stylefeng.roses.kernel.dsctn.modular.factory.DruidFactory;
|
|
||||||
import com.alibaba.druid.pool.DruidDataSource;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
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.druid.DruidProperties;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
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.exception.DatasourceContainerException;
|
||||||
import cn.stylefeng.roses.kernel.dsctn.context.DataSourceContext;
|
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.mapper.DatabaseInfoMapper;
|
||||||
import cn.stylefeng.roses.kernel.dsctn.modular.pojo.DatabaseInfoParam;
|
import cn.stylefeng.roses.kernel.dsctn.modular.pojo.DatabaseInfoParam;
|
||||||
import cn.stylefeng.roses.kernel.dsctn.modular.service.DatabaseInfoService;
|
import cn.stylefeng.roses.kernel.dsctn.modular.service.DatabaseInfoService;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||||
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
@ -51,35 +54,17 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
||||||
DatabaseInfo entity = parseEntity(databaseInfoParam);
|
DatabaseInfo entity = parseEntity(databaseInfoParam);
|
||||||
this.save(entity);
|
this.save(entity);
|
||||||
|
|
||||||
// 先判断context中是否有了这个数据源
|
// 往数据源容器文中添加数据源
|
||||||
DataSource dataSource = DataSourceContext.getDataSources().get(databaseInfoParam.getDbName());
|
addDataSourceToContext(entity, false);
|
||||||
if (dataSource != null) {
|
|
||||||
String userTip = StrUtil.format(DATASOURCE_NAME_REPEAT.getUserTip(), databaseInfoParam.getDbName());
|
|
||||||
throw new DatasourceContainerException(DATASOURCE_NAME_REPEAT, userTip);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 往上下文中添加数据源
|
|
||||||
DruidProperties druidProperties = DruidFactory.createDruidProperties(entity);
|
|
||||||
DruidDataSource druidDataSource = cn.stylefeng.roses.kernel.db.api.factory.DruidFactory.createDruidDataSource(druidProperties);
|
|
||||||
DataSourceContext.addDataSource(databaseInfoParam.getDbName(), druidDataSource, druidProperties);
|
|
||||||
|
|
||||||
// 初始化数据源
|
|
||||||
try {
|
|
||||||
druidDataSource.init();
|
|
||||||
} catch (SQLException exception) {
|
|
||||||
log.error("初始化数据源异常!", exception);
|
|
||||||
String userTip = StrUtil.format(INIT_DATASOURCE_ERROR.getUserTip(), exception.getMessage());
|
|
||||||
throw new DatasourceContainerException(INIT_DATASOURCE_ERROR, userTip);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void edit(DatabaseInfoParam databaseInfoParam) {
|
public void edit(DatabaseInfoParam databaseInfoParam) {
|
||||||
|
|
||||||
DatabaseInfo oldEntity = this.getById(databaseInfoParam.getId());
|
DatabaseInfo oldEntity = this.getById(databaseInfoParam.getDbId());
|
||||||
if (oldEntity == null) {
|
if (oldEntity == null) {
|
||||||
String userTip = StrUtil.format(EDIT_DATASOURCE_ERROR.getUserTip(), databaseInfoParam.getId());
|
String userTip = StrUtil.format(EDIT_DATASOURCE_ERROR.getUserTip(), databaseInfoParam.getDbId());
|
||||||
throw new DatasourceContainerException(EDIT_DATASOURCE_ERROR, userTip);
|
throw new DatasourceContainerException(EDIT_DATASOURCE_ERROR, userTip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,32 +81,17 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
||||||
BeanUtil.copyProperties(databaseInfoParam, oldEntity);
|
BeanUtil.copyProperties(databaseInfoParam, oldEntity);
|
||||||
this.updateById(oldEntity);
|
this.updateById(oldEntity);
|
||||||
|
|
||||||
// 删除容器中的数据源记录
|
// 往数据源容器文中添加数据源
|
||||||
DataSourceContext.removeDataSource(oldEntity.getDbName());
|
addDataSourceToContext(oldEntity, true);
|
||||||
|
|
||||||
// 往上下文中添加数据源
|
|
||||||
DruidProperties druidProperties = DruidFactory.createDruidProperties(oldEntity);
|
|
||||||
DruidDataSource druidDataSource = cn.stylefeng.roses.kernel.db.api.factory.DruidFactory.createDruidDataSource(druidProperties);
|
|
||||||
DataSourceContext.addDataSource(databaseInfoParam.getDbName(), druidDataSource, druidProperties);
|
|
||||||
|
|
||||||
// 初始化数据源
|
|
||||||
try {
|
|
||||||
druidDataSource.init();
|
|
||||||
} catch (SQLException exception) {
|
|
||||||
log.error("初始化数据源异常!", exception);
|
|
||||||
String userTip = StrUtil.format(INIT_DATASOURCE_ERROR.getUserTip(), exception.getMessage());
|
|
||||||
throw new DatasourceContainerException(INIT_DATASOURCE_ERROR, userTip);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void delete(DatabaseInfoParam param) {
|
public void delete(DatabaseInfoParam databaseInfoParam) {
|
||||||
|
|
||||||
DatabaseInfo databaseInfo = this.getById(param.getId());
|
DatabaseInfo databaseInfo = this.getById(databaseInfoParam.getDbId());
|
||||||
if (databaseInfo == null) {
|
if (databaseInfo == null) {
|
||||||
String userTip = StrUtil.format(DELETE_DATASOURCE_NOT_EXISTED_ERROR.getUserTip(), param.getId());
|
String userTip = StrUtil.format(DELETE_DATASOURCE_NOT_EXISTED_ERROR.getUserTip(), databaseInfoParam.getDbId());
|
||||||
throw new DatasourceContainerException(DELETE_DATASOURCE_NOT_EXISTED_ERROR, userTip);
|
throw new DatasourceContainerException(DELETE_DATASOURCE_NOT_EXISTED_ERROR, userTip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +106,10 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除库中的数据源记录
|
// 删除库中的数据源记录
|
||||||
this.removeById(param.getId());
|
LambdaUpdateWrapper<DatabaseInfo> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
|
updateWrapper.set(DatabaseInfo::getDelFlag, YesOrNotEnum.Y.getCode());
|
||||||
|
updateWrapper.eq(DatabaseInfo::getDbId, databaseInfoParam.getDbId());
|
||||||
|
this.update(updateWrapper);
|
||||||
|
|
||||||
// 删除容器中的数据源记录
|
// 删除容器中的数据源记录
|
||||||
DataSourceContext.removeDataSource(databaseInfo.getDbName());
|
DataSourceContext.removeDataSource(databaseInfo.getDbName());
|
||||||
|
@ -151,6 +124,9 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
||||||
queryWrapper.like(DatabaseInfo::getDbName, databaseInfoParam.getDbName());
|
queryWrapper.like(DatabaseInfo::getDbName, databaseInfoParam.getDbName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 查询没被删除的
|
||||||
|
queryWrapper.eq(DatabaseInfo::getDelFlag, YesOrNotEnum.N);
|
||||||
|
|
||||||
// 查询分页结果
|
// 查询分页结果
|
||||||
Page<DatabaseInfo> result = this.page(PageFactory.defaultPage(), queryWrapper);
|
Page<DatabaseInfo> result = this.page(PageFactory.defaultPage(), queryWrapper);
|
||||||
|
|
||||||
|
@ -200,4 +176,40 @@ public class DatabaseInfoServiceImpl extends ServiceImpl<DatabaseInfoMapper, Dat
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 往数据源容器文中添加数据源
|
||||||
|
*
|
||||||
|
* @param databaseInfo 数据库信息实体
|
||||||
|
* @author fengshuonan
|
||||||
|
* @date 2020/12/19 16:16
|
||||||
|
*/
|
||||||
|
private void addDataSourceToContext(DatabaseInfo databaseInfo, Boolean removeOldDatasource) {
|
||||||
|
|
||||||
|
// 删除容器中的数据源记录
|
||||||
|
if (removeOldDatasource) {
|
||||||
|
DataSourceContext.removeDataSource(databaseInfo.getDbName());
|
||||||
|
} else {
|
||||||
|
// 先判断context中是否有了这个数据源
|
||||||
|
DataSource dataSource = DataSourceContext.getDataSources().get(databaseInfo.getDbName());
|
||||||
|
if (dataSource != null) {
|
||||||
|
String userTip = StrUtil.format(DATASOURCE_NAME_REPEAT.getUserTip(), databaseInfo.getDbName());
|
||||||
|
throw new DatasourceContainerException(DATASOURCE_NAME_REPEAT, userTip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 往数据源容器文中添加数据源
|
||||||
|
DruidProperties druidProperties = DruidPropertiesFactory.createDruidProperties(databaseInfo);
|
||||||
|
DruidDataSource druidDataSource = DruidDatasourceFactory.createDruidDataSource(druidProperties);
|
||||||
|
DataSourceContext.addDataSource(databaseInfo.getDbName(), druidDataSource, druidProperties);
|
||||||
|
|
||||||
|
// 初始化数据源
|
||||||
|
try {
|
||||||
|
druidDataSource.init();
|
||||||
|
} catch (SQLException exception) {
|
||||||
|
log.error("初始化数据源异常!", exception);
|
||||||
|
String userTip = StrUtil.format(INIT_DATASOURCE_ERROR.getUserTip(), exception.getMessage());
|
||||||
|
throw new DatasourceContainerException(INIT_DATASOURCE_ERROR, userTip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package cn.stylefeng.roses.kernel.dsctn.context;
|
package cn.stylefeng.roses.kernel.dsctn.context;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.db.api.factory.DruidDatasourceFactory;
|
||||||
|
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
||||||
import cn.stylefeng.roses.kernel.dsctn.persist.DataBaseInfoPersistence;
|
import cn.stylefeng.roses.kernel.dsctn.persist.DataBaseInfoPersistence;
|
||||||
import com.alibaba.druid.pool.DruidDataSource;
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.DruidFactory;
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -136,7 +136,7 @@ public class DataSourceContext {
|
||||||
//添加到全局配置里
|
//添加到全局配置里
|
||||||
DATA_SOURCES_CONF.put(dataSourceName, druidProperties);
|
DATA_SOURCES_CONF.put(dataSourceName, druidProperties);
|
||||||
|
|
||||||
return DruidFactory.createDruidDataSource(druidProperties);
|
return DruidDatasourceFactory.createDruidDataSource(druidProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,11 @@ package cn.stylefeng.roses.kernel.dsctn.listener;
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.stylefeng.roses.kernel.dsctn.context.DataSourceContext;
|
import cn.stylefeng.roses.kernel.db.api.factory.DruidDatasourceFactory;
|
||||||
import com.alibaba.druid.pool.DruidDataSource;
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.DruidFactory;
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
||||||
import cn.stylefeng.roses.kernel.dsctn.api.exception.DatasourceContainerException;
|
import cn.stylefeng.roses.kernel.dsctn.api.exception.DatasourceContainerException;
|
||||||
|
import cn.stylefeng.roses.kernel.dsctn.context.DataSourceContext;
|
||||||
|
import com.alibaba.druid.pool.DruidDataSource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.context.event.ApplicationContextInitializedEvent;
|
import org.springframework.boot.context.event.ApplicationContextInitializedEvent;
|
||||||
import org.springframework.context.ApplicationListener;
|
import org.springframework.context.ApplicationListener;
|
||||||
|
@ -64,7 +64,7 @@ public class DataSourceInitListener implements ApplicationListener<ApplicationCo
|
||||||
druidProperties.setPassword(dataSourcePassword);
|
druidProperties.setPassword(dataSourcePassword);
|
||||||
|
|
||||||
// 创建主数据源
|
// 创建主数据源
|
||||||
DruidDataSource druidDataSource = DruidFactory.createDruidDataSource(druidProperties);
|
DruidDataSource druidDataSource = DruidDatasourceFactory.createDruidDataSource(druidProperties);
|
||||||
|
|
||||||
// 初始化数据源容器
|
// 初始化数据源容器
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue