mirror of https://gitee.com/stylefeng/roses
【7.6.0】【框架改造】【db】删除db-sdk-init模块,转移基础类到db-api
parent
81223aada6
commit
d8bb55de8b
|
@ -22,7 +22,7 @@
|
|||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.db.init.util;
|
||||
package cn.stylefeng.roses.kernel.db.api.util;
|
||||
|
||||
import cn.hutool.db.DbUtil;
|
||||
import cn.hutool.db.handler.RsHandler;
|
|
@ -22,7 +22,7 @@
|
|||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.db.init.util;
|
||||
package cn.stylefeng.roses.kernel.db.api.util;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>kernel-d-db</artifactId>
|
||||
<version>7.6.0</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>db-sdk-init</artifactId>
|
||||
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<!--db操作的api-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>db-api</artifactId>
|
||||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--auth鉴权模块的api-->
|
||||
<!--需要用auth模块的LoginContext获取当前登录用户,然后填充到create_user这类字段里-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>auth-api</artifactId>
|
||||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--数据源容器的api-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>ds-container-api</artifactId>
|
||||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</project>
|
|
@ -1,210 +0,0 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.db.init.actuator;
|
||||
|
||||
import cn.hutool.core.util.ClassUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.stylefeng.roses.kernel.db.api.exception.enums.DbInitEnum;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.db.TableFieldInfo;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.db.TableInfo;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
||||
import cn.stylefeng.roses.kernel.db.api.util.DatabaseUtil;
|
||||
import cn.stylefeng.roses.kernel.db.init.util.SqlExe;
|
||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 数据库初始化,可初始化表,校验字段,校验表名是否存在等
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2018-07-29 22:05
|
||||
*/
|
||||
@Slf4j
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class DbInitializer {
|
||||
|
||||
/**
|
||||
* 如果为true,则数据库校验失败会抛出异常
|
||||
*/
|
||||
private Boolean fieldValidatorExceptionFlag = true;
|
||||
|
||||
public DbInitializer() {
|
||||
|
||||
}
|
||||
|
||||
public DbInitializer(Boolean fieldValidatorExceptionFlag) {
|
||||
this.fieldValidatorExceptionFlag = fieldValidatorExceptionFlag;
|
||||
}
|
||||
|
||||
@Resource
|
||||
@Getter
|
||||
private DruidProperties druidProperties;
|
||||
|
||||
/**
|
||||
* 初始化数据库
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2018/7/30 上午10:30
|
||||
*/
|
||||
public void dbInit() {
|
||||
|
||||
// 初始化表
|
||||
initTable();
|
||||
|
||||
// 校验实体和对应表结构是否有不一致的
|
||||
fieldsValidate();
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化表结构
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2018/7/30 上午10:24
|
||||
*/
|
||||
private void initTable() {
|
||||
|
||||
// 校验参数
|
||||
String tableName = this.getTableName();
|
||||
String tableInitSql = this.getTableInitSql();
|
||||
if (ObjectUtil.isEmpty(tableName) || ObjectUtil.isEmpty(tableInitSql)) {
|
||||
if (fieldValidatorExceptionFlag) {
|
||||
throw new ServiceException(DbInitEnum.INIT_TABLE_EMPTY_PARAMS);
|
||||
}
|
||||
}
|
||||
|
||||
// 列出数据库中所有的表
|
||||
List<TableInfo> tableInfos = DatabaseUtil.selectTables(druidProperties);
|
||||
boolean haveSmsTableFlag = false;
|
||||
for (TableInfo tableInfo : tableInfos) {
|
||||
if (tableInfo.getTableName().equalsIgnoreCase(tableName)) {
|
||||
haveSmsTableFlag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 判断数据库中是否有这张表,如果没有就初始化
|
||||
if (!haveSmsTableFlag) {
|
||||
SqlExe.update(tableInitSql);
|
||||
log.info("初始化" + getTableName() + "成功!");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验实体和对应表结构是否有不一致的
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2018/7/30 上午10:24
|
||||
*/
|
||||
private void fieldsValidate() {
|
||||
|
||||
//检查数据库中的字段,是否和实体字段一致
|
||||
List<TableFieldInfo> tableFields = DatabaseUtil.getTableFields(druidProperties, getTableName());
|
||||
if (tableFields != null && !tableFields.isEmpty()) {
|
||||
|
||||
//用于保存实体中不存在的字段的名称集合
|
||||
List<String> fieldsNotInClass = new ArrayList<>();
|
||||
|
||||
//反射获取字段的所有字段名称
|
||||
List<String> classFields = this.getClassFields();
|
||||
for (TableFieldInfo tableField : tableFields) {
|
||||
String fieldName = tableField.getColumnName();
|
||||
if (!classFields.contains(fieldName.toLowerCase())) {
|
||||
fieldsNotInClass.add(fieldName);
|
||||
}
|
||||
}
|
||||
|
||||
//如果集合不为空,代表有实体和数据库不一致的数据
|
||||
if (!fieldsNotInClass.isEmpty()) {
|
||||
log.error("实体中和数据库字段不一致的字段如下:" + JSON.toJSONString(fieldsNotInClass));
|
||||
if (fieldValidatorExceptionFlag) {
|
||||
throw new ServiceException(DbInitEnum.FIELD_VALIDATE_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 反射获取类的所有字段
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2018/7/30 上午10:06
|
||||
*/
|
||||
private List<String> getClassFields() {
|
||||
Class<?> entityClass = this.getEntityClass();
|
||||
Field[] declaredFields = ClassUtil.getDeclaredFields(entityClass);
|
||||
ArrayList<String> filedNamesUnderlineCase = new ArrayList<>();
|
||||
for (Field declaredField : declaredFields) {
|
||||
String fieldName = StrUtil.toUnderlineCase(declaredField.getName());
|
||||
filedNamesUnderlineCase.add(fieldName);
|
||||
}
|
||||
|
||||
// 获取父类的所有字段名称
|
||||
Field[] superfields = ReflectUtil.getFields(entityClass.getSuperclass());
|
||||
for (Field superfield : superfields) {
|
||||
String fieldName = StrUtil.toUnderlineCase(superfield.getName());
|
||||
filedNamesUnderlineCase.add(fieldName);
|
||||
}
|
||||
|
||||
return filedNamesUnderlineCase;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取表的初始化语句
|
||||
*
|
||||
* @author stylefeng
|
||||
* @since 2018/7/29 22:10
|
||||
*/
|
||||
protected abstract String getTableInitSql();
|
||||
|
||||
/**
|
||||
* 获取表的名称
|
||||
*
|
||||
* @author stylefeng
|
||||
* @since 2018/7/29 22:10
|
||||
*/
|
||||
protected abstract String getTableName();
|
||||
|
||||
/**
|
||||
* 获取表对应的实体
|
||||
*
|
||||
* @author stylefeng
|
||||
* @since 2018/7/29 22:49
|
||||
*/
|
||||
protected abstract Class<?> getEntityClass();
|
||||
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.db.init.listener;
|
||||
|
||||
import cn.stylefeng.roses.kernel.db.init.actuator.DbInitializer;
|
||||
import cn.stylefeng.roses.kernel.rule.listener.ApplicationReadyListener;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.core.Ordered;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 初始化 创建字典表
|
||||
*
|
||||
* @author wangzhongqiang
|
||||
* @since 2018/4/23 9:57
|
||||
*/
|
||||
@Slf4j
|
||||
public class InitTableListener extends ApplicationReadyListener implements Ordered {
|
||||
|
||||
@Override
|
||||
public void eventCallback(ApplicationReadyEvent event) {
|
||||
Map<String, DbInitializer> beansOfType = event.getApplicationContext().getBeansOfType(DbInitializer.class);
|
||||
for (Map.Entry<String, DbInitializer> entry : beansOfType.entrySet()) {
|
||||
DbInitializer value = entry.getValue();
|
||||
value.dbInit();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return Ordered.LOWEST_PRECEDENCE - 200;
|
||||
}
|
||||
|
||||
}
|
|
@ -24,13 +24,6 @@
|
|||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--数据库初始化模块-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>db-sdk-init</artifactId>
|
||||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--flyway数据同步-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
<modules>
|
||||
<module>db-api</module>
|
||||
<module>db-sdk-flyway</module>
|
||||
<module>db-sdk-init</module>
|
||||
<module>db-sdk-mp</module>
|
||||
<module>db-spring-boot-starter</module>
|
||||
</modules>
|
||||
|
|
|
@ -80,14 +80,6 @@
|
|||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--数据库sdk-->
|
||||
<!--数据库初始化-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>db-sdk-init</artifactId>
|
||||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--数据库sdk-->
|
||||
<!--数据库dao框架-->
|
||||
<dependency>
|
||||
|
|
|
@ -44,15 +44,7 @@
|
|||
<!--用在控制器,参数校验-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>validator-api</artifactId>
|
||||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!--数据库sdk-->
|
||||
<!--数据库初始化-->
|
||||
<dependency>
|
||||
<groupId>cn.stylefeng.roses</groupId>
|
||||
<artifactId>db-sdk-init</artifactId>
|
||||
<artifactId>validator-api-table-unique</artifactId>
|
||||
<version>${roses.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.dict.modular.init;
|
||||
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
||||
import cn.stylefeng.roses.kernel.db.api.sqladapter.AbstractSql;
|
||||
import cn.stylefeng.roses.kernel.db.init.actuator.DbInitializer;
|
||||
import cn.stylefeng.roses.kernel.dict.modular.entity.SysDict;
|
||||
import cn.stylefeng.roses.kernel.dict.modular.sqladapter.DictSql;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 字典数据库初始化程序
|
||||
*
|
||||
* @author majianguo
|
||||
* @since 2020/12/9 上午11:02
|
||||
* @see AbstractSql
|
||||
*/
|
||||
@Component
|
||||
public class DictInitializer extends DbInitializer {
|
||||
|
||||
@Override
|
||||
protected String getTableInitSql() {
|
||||
DruidProperties druidProperties = getDruidProperties();
|
||||
return new DictSql().getSql(druidProperties.getUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTableName() {
|
||||
return "sys_dict";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<?> getEntityClass() {
|
||||
return SysDict.class;
|
||||
}
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
/*
|
||||
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||
*/
|
||||
package cn.stylefeng.roses.kernel.dict.modular.init;
|
||||
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.druid.DruidProperties;
|
||||
import cn.stylefeng.roses.kernel.db.api.sqladapter.AbstractSql;
|
||||
import cn.stylefeng.roses.kernel.db.init.actuator.DbInitializer;
|
||||
import cn.stylefeng.roses.kernel.dict.modular.entity.SysDictType;
|
||||
import cn.stylefeng.roses.kernel.dict.modular.sqladapter.DictTypeSql;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 字典数据库初始化程序
|
||||
*
|
||||
* @author majianguo
|
||||
* @since 2020/12/9 上午11:02
|
||||
* @see AbstractSql
|
||||
*/
|
||||
@Component
|
||||
public class DictTypeInitializer extends DbInitializer {
|
||||
|
||||
@Override
|
||||
protected String getTableInitSql() {
|
||||
DruidProperties druidProperties = getDruidProperties();
|
||||
return new DictTypeSql().getSql(druidProperties.getUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTableName() {
|
||||
return "sys_dict_type";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<?> getEntityClass() {
|
||||
return SysDictType.class;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue