diff --git a/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/util/SqlExe.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/SqlExe.java similarity index 99% rename from kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/util/SqlExe.java rename to kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/SqlExe.java index db99ca7ab..4e4c7d5df 100644 --- a/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/util/SqlExe.java +++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/SqlExe.java @@ -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; diff --git a/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/util/SqlUtil.java b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/SqlUtil.java similarity index 98% rename from kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/util/SqlUtil.java rename to kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/SqlUtil.java index 97b0ece39..3e6238678 100644 --- a/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/util/SqlUtil.java +++ b/kernel-d-db/db-api/src/main/java/cn/stylefeng/roses/kernel/db/api/util/SqlUtil.java @@ -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; diff --git a/kernel-d-db/db-sdk-init/pom.xml b/kernel-d-db/db-sdk-init/pom.xml deleted file mode 100644 index bf4b8f532..000000000 --- a/kernel-d-db/db-sdk-init/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - - cn.stylefeng.roses - kernel-d-db - 7.6.0 - ../pom.xml - - - db-sdk-init - - jar - - - - - - cn.stylefeng.roses - db-api - ${roses.version} - - - - - - cn.stylefeng.roses - auth-api - ${roses.version} - - - - - cn.stylefeng.roses - ds-container-api - ${roses.version} - - - - diff --git a/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/actuator/DbInitializer.java b/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/actuator/DbInitializer.java deleted file mode 100644 index d5eb74628..000000000 --- a/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/actuator/DbInitializer.java +++ /dev/null @@ -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 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 tableFields = DatabaseUtil.getTableFields(druidProperties, getTableName()); - if (tableFields != null && !tableFields.isEmpty()) { - - //用于保存实体中不存在的字段的名称集合 - List fieldsNotInClass = new ArrayList<>(); - - //反射获取字段的所有字段名称 - List 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 getClassFields() { - Class entityClass = this.getEntityClass(); - Field[] declaredFields = ClassUtil.getDeclaredFields(entityClass); - ArrayList 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(); - -} diff --git a/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/listener/InitTableListener.java b/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/listener/InitTableListener.java deleted file mode 100644 index 0de4fce0c..000000000 --- a/kernel-d-db/db-sdk-init/src/main/java/cn/stylefeng/roses/kernel/db/init/listener/InitTableListener.java +++ /dev/null @@ -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 beansOfType = event.getApplicationContext().getBeansOfType(DbInitializer.class); - for (Map.Entry entry : beansOfType.entrySet()) { - DbInitializer value = entry.getValue(); - value.dbInit(); - } - } - - @Override - public int getOrder() { - return Ordered.LOWEST_PRECEDENCE - 200; - } - -} diff --git a/kernel-d-db/db-spring-boot-starter/pom.xml b/kernel-d-db/db-spring-boot-starter/pom.xml index 1544482cb..f8489aa3d 100644 --- a/kernel-d-db/db-spring-boot-starter/pom.xml +++ b/kernel-d-db/db-spring-boot-starter/pom.xml @@ -24,13 +24,6 @@ ${roses.version} - - - cn.stylefeng.roses - db-sdk-init - ${roses.version} - - cn.stylefeng.roses diff --git a/kernel-d-db/pom.xml b/kernel-d-db/pom.xml index f0b2d4544..424179bf2 100644 --- a/kernel-d-db/pom.xml +++ b/kernel-d-db/pom.xml @@ -18,7 +18,6 @@ db-api db-sdk-flyway - db-sdk-init db-sdk-mp db-spring-boot-starter diff --git a/kernel-s-customer/customer-business/pom.xml b/kernel-s-customer/customer-business/pom.xml index b2b4d30d6..e27fa6339 100644 --- a/kernel-s-customer/customer-business/pom.xml +++ b/kernel-s-customer/customer-business/pom.xml @@ -80,14 +80,6 @@ ${roses.version} - - - - cn.stylefeng.roses - db-sdk-init - ${roses.version} - - diff --git a/kernel-s-dict/dict-business/pom.xml b/kernel-s-dict/dict-business/pom.xml index 7ec112018..b346d874b 100644 --- a/kernel-s-dict/dict-business/pom.xml +++ b/kernel-s-dict/dict-business/pom.xml @@ -44,15 +44,7 @@ cn.stylefeng.roses - validator-api - ${roses.version} - - - - - - cn.stylefeng.roses - db-sdk-init + validator-api-table-unique ${roses.version} diff --git a/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/init/DictInitializer.java b/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/init/DictInitializer.java deleted file mode 100644 index 537bbe65a..000000000 --- a/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/init/DictInitializer.java +++ /dev/null @@ -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; - } -} diff --git a/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/init/DictTypeInitializer.java b/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/init/DictTypeInitializer.java deleted file mode 100644 index f53b19ee7..000000000 --- a/kernel-s-dict/dict-business/src/main/java/cn/stylefeng/roses/kernel/dict/modular/init/DictTypeInitializer.java +++ /dev/null @@ -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; - } -}