From 6c1f4e123af924ef3e0ec091adfbf404053ca083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=AE=E5=85=89=EF=BC=9A=E5=9F=8E=E4=B8=AD=E5=9F=8E?= <806783409@qq.com> Date: Thu, 4 Jul 2019 21:52:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E9=97=AE=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/entity/DbDatasource.java | 144 + .../manage/mapper/DbDatasourceMapper.java | 16 + .../support/generator/CodeGenerator.java | 4 +- .../service/manage/DbDatasourceService.java | 16 + .../manage/impl/DbDatasourceServiceImpl.java | 20 + .../GeneratorDbDatasourceController.java | 20 + .../mapper/manage/DbDatasourceMapper.xml | 5 + zyplayer-doc-db/pom.xml | 10 + .../db/controller/DbDatasourceController.java | 95 + .../ApplicationListenerBean.java | 107 +- .../configuration/DatasourceUtil.java | 91 + .../db/bean/DatabaseFactoryBean.java | 152 +- .../sql/zyplayer_doc_manage.1.0.3.sql | 23 + .../src/common/lib/common/common.js | 2 +- .../console-ui/src/views/user/Login.vue | 2 +- zyplayer-doc-ui/db-ui/.babelrc | 3 + zyplayer-doc-ui/db-ui/.gitignore | 5 + zyplayer-doc-ui/db-ui/Makefile | 9 + zyplayer-doc-ui/db-ui/README.md | 50 + zyplayer-doc-ui/db-ui/package-lock.json | 7697 +++++++++++++++++ zyplayer-doc-ui/db-ui/package.json | 40 + zyplayer-doc-ui/db-ui/postcss.config.js | 5 + zyplayer-doc-ui/db-ui/src/App.vue | 250 + .../db-ui/src/assets/img/dubbo.png | Bin 0 -> 1337 bytes .../db-ui/src/common/config/apilist.js | 28 + .../db-ui/src/common/config/apimix.js | 52 + .../db-ui/src/common/config/global.js | 12 + .../db-ui/src/common/lib/common/common.js | 113 + .../db-ui/src/common/lib/common/toast.js | 40 + .../src/common/lib/jquery/jquery-3.1.0.min.js | 4 + .../db-ui/src/common/lib/jquery/qrcode.min.js | 1 + zyplayer-doc-ui/db-ui/src/doc-db.html | 14 + zyplayer-doc-ui/db-ui/src/index.html | 14 + zyplayer-doc-ui/db-ui/src/main.js | 59 + zyplayer-doc-ui/db-ui/src/routes.js | 50 + zyplayer-doc-ui/db-ui/src/vendor.js | 2 + .../db-ui/src/views/common/NoAuth.vue | 18 + zyplayer-doc-ui/db-ui/src/views/home/Home.vue | 111 + .../db-ui/src/views/table/Database.vue | 74 + .../db-ui/src/views/table/Info.vue | 127 + .../db-ui/src/views/table/RouterView.vue | 4 + .../db-ui/src/views/user/Login.vue | 88 + .../db-ui/src/views/user/MyInfo.vue | 49 + .../db-ui/src/views/user/RouterView.vue | 4 + zyplayer-doc-ui/db-ui/webpack.config.js | 75 + zyplayer-doc-ui/db-ui/yarn.lock | 4078 +++++++++ zyplayer-doc-ui/wiki-ui/src/App.vue | 8 +- .../wiki-ui/src/common/lib/common/common.js | 2 +- .../wiki-ui/src/views/user/Login.vue | 58 +- 49 files changed, 13653 insertions(+), 198 deletions(-) create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbDatasource.java create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbDatasourceMapper.java create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbDatasourceService.java create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbDatasourceServiceImpl.java create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/web/generator/GeneratorDbDatasourceController.java create mode 100644 zyplayer-doc-data/src/main/resources/mapper/manage/DbDatasourceMapper.xml create mode 100644 zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/controller/DbDatasourceController.java create mode 100644 zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/DatasourceUtil.java create mode 100644 zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.3.sql create mode 100644 zyplayer-doc-ui/db-ui/.babelrc create mode 100644 zyplayer-doc-ui/db-ui/.gitignore create mode 100644 zyplayer-doc-ui/db-ui/Makefile create mode 100644 zyplayer-doc-ui/db-ui/README.md create mode 100644 zyplayer-doc-ui/db-ui/package-lock.json create mode 100644 zyplayer-doc-ui/db-ui/package.json create mode 100644 zyplayer-doc-ui/db-ui/postcss.config.js create mode 100644 zyplayer-doc-ui/db-ui/src/App.vue create mode 100644 zyplayer-doc-ui/db-ui/src/assets/img/dubbo.png create mode 100644 zyplayer-doc-ui/db-ui/src/common/config/apilist.js create mode 100644 zyplayer-doc-ui/db-ui/src/common/config/apimix.js create mode 100644 zyplayer-doc-ui/db-ui/src/common/config/global.js create mode 100644 zyplayer-doc-ui/db-ui/src/common/lib/common/common.js create mode 100644 zyplayer-doc-ui/db-ui/src/common/lib/common/toast.js create mode 100644 zyplayer-doc-ui/db-ui/src/common/lib/jquery/jquery-3.1.0.min.js create mode 100644 zyplayer-doc-ui/db-ui/src/common/lib/jquery/qrcode.min.js create mode 100644 zyplayer-doc-ui/db-ui/src/doc-db.html create mode 100644 zyplayer-doc-ui/db-ui/src/index.html create mode 100644 zyplayer-doc-ui/db-ui/src/main.js create mode 100644 zyplayer-doc-ui/db-ui/src/routes.js create mode 100644 zyplayer-doc-ui/db-ui/src/vendor.js create mode 100644 zyplayer-doc-ui/db-ui/src/views/common/NoAuth.vue create mode 100644 zyplayer-doc-ui/db-ui/src/views/home/Home.vue create mode 100644 zyplayer-doc-ui/db-ui/src/views/table/Database.vue create mode 100644 zyplayer-doc-ui/db-ui/src/views/table/Info.vue create mode 100644 zyplayer-doc-ui/db-ui/src/views/table/RouterView.vue create mode 100644 zyplayer-doc-ui/db-ui/src/views/user/Login.vue create mode 100644 zyplayer-doc-ui/db-ui/src/views/user/MyInfo.vue create mode 100644 zyplayer-doc-ui/db-ui/src/views/user/RouterView.vue create mode 100644 zyplayer-doc-ui/db-ui/webpack.config.js create mode 100644 zyplayer-doc-ui/db-ui/yarn.lock diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbDatasource.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbDatasource.java new file mode 100644 index 00000000..ed26d2d2 --- /dev/null +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/DbDatasource.java @@ -0,0 +1,144 @@ +package com.zyplayer.doc.data.repository.manage.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; + +/** + *

+ * + *

+ * + * @author 暮光:城中城 + * @since 2019-07-04 + */ +public class DbDatasource implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键自增ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 数据源驱动类 + */ + private String driverClassName; + + /** + * 数据源地址 + */ + private String sourceUrl; + + /** + * 数据源用户名 + */ + private String sourceName; + + /** + * 数据源密码 + */ + private String sourcePassword; + + /** + * 创建人ID + */ + private Long createUserId; + + /** + * 创建人名字 + */ + private String createUserName; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 是否有效 0=无效 1=有效 + */ + private Integer yn; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public String getDriverClassName() { + return driverClassName; + } + + public void setDriverClassName(String driverClassName) { + this.driverClassName = driverClassName; + } + public String getSourceUrl() { + return sourceUrl; + } + + public void setSourceUrl(String sourceUrl) { + this.sourceUrl = sourceUrl; + } + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + public String getSourcePassword() { + return sourcePassword; + } + + public void setSourcePassword(String sourcePassword) { + this.sourcePassword = sourcePassword; + } + public Long getCreateUserId() { + return createUserId; + } + + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + public String getCreateUserName() { + return createUserName; + } + + public void setCreateUserName(String createUserName) { + this.createUserName = createUserName; + } + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + public Integer getYn() { + return yn; + } + + public void setYn(Integer yn) { + this.yn = yn; + } + + @Override + public String toString() { + return "DbDatasource{" + + "id=" + id + + ", driverClassName=" + driverClassName + + ", sourceUrl=" + sourceUrl + + ", sourceName=" + sourceName + + ", sourcePassword=" + sourcePassword + + ", createUserId=" + createUserId + + ", createUserName=" + createUserName + + ", createTime=" + createTime + + ", yn=" + yn + + "}"; + } +} diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbDatasourceMapper.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbDatasourceMapper.java new file mode 100644 index 00000000..1f8f01f9 --- /dev/null +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/DbDatasourceMapper.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.data.repository.manage.mapper; + +import com.zyplayer.doc.data.repository.manage.entity.DbDatasource; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 暮光:城中城 + * @since 2019-07-04 + */ +public interface DbDatasourceMapper extends BaseMapper { + +} diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java index 3a857a12..79f1d0ef 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/support/generator/CodeGenerator.java @@ -17,9 +17,9 @@ public class CodeGenerator { public static void main(String[] args) { final String moduleName = "manage"; -// final String[] tableName = { "zyplayer_storage", "auth_info", "user_auth", "user_info" }; +// final String[] tableName = { "zyplayer_storage", "auth_info", "user_auth", "user_info", "db_datasource" }; // final String[] tableName = { "wiki_space", "wiki_page", "wiki_page_content", "wiki_page_file", "wiki_page_comment", "wiki_page_zan" }; - final String[] tableName = { "wiki_page" }; + final String[] tableName = { "db_datasource" }; // 代码生成器 AutoGenerator mpg = new AutoGenerator(); diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbDatasourceService.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbDatasourceService.java new file mode 100644 index 00000000..0fc055f6 --- /dev/null +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/DbDatasourceService.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.data.service.manage; + +import com.zyplayer.doc.data.repository.manage.entity.DbDatasource; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author 暮光:城中城 + * @since 2019-07-04 + */ +public interface DbDatasourceService extends IService { + +} diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbDatasourceServiceImpl.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbDatasourceServiceImpl.java new file mode 100644 index 00000000..65950ee1 --- /dev/null +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/DbDatasourceServiceImpl.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.data.service.manage.impl; + +import com.zyplayer.doc.data.repository.manage.entity.DbDatasource; +import com.zyplayer.doc.data.repository.manage.mapper.DbDatasourceMapper; +import com.zyplayer.doc.data.service.manage.DbDatasourceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author 暮光:城中城 + * @since 2019-07-04 + */ +@Service +public class DbDatasourceServiceImpl extends ServiceImpl implements DbDatasourceService { + +} diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/web/generator/GeneratorDbDatasourceController.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/web/generator/GeneratorDbDatasourceController.java new file mode 100644 index 00000000..e79d53c8 --- /dev/null +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/web/generator/GeneratorDbDatasourceController.java @@ -0,0 +1,20 @@ +package com.zyplayer.doc.data.web.generator; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author 暮光:城中城 + * @since 2019-07-04 + */ +@RestController +@RequestMapping("/db-datasource") +public class GeneratorDbDatasourceController { + +} diff --git a/zyplayer-doc-data/src/main/resources/mapper/manage/DbDatasourceMapper.xml b/zyplayer-doc-data/src/main/resources/mapper/manage/DbDatasourceMapper.xml new file mode 100644 index 00000000..2dab3575 --- /dev/null +++ b/zyplayer-doc-data/src/main/resources/mapper/manage/DbDatasourceMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/zyplayer-doc-db/pom.xml b/zyplayer-doc-db/pom.xml index e4ad4774..7ccbb0b4 100644 --- a/zyplayer-doc-db/pom.xml +++ b/zyplayer-doc-db/pom.xml @@ -71,6 +71,16 @@ zyplayer-doc-core ${zyplayer.doc.version} + + com.zyplayer + zyplayer-doc-data + ${zyplayer.doc.version} + + + org.json + json + 20180813 + diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/controller/DbDatasourceController.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/controller/DbDatasourceController.java new file mode 100644 index 00000000..9b274001 --- /dev/null +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/controller/DbDatasourceController.java @@ -0,0 +1,95 @@ +package com.zyplayer.doc.db.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.zyplayer.doc.core.annotation.AuthMan; +import com.zyplayer.doc.data.config.security.DocUserDetails; +import com.zyplayer.doc.data.config.security.DocUserUtil; +import com.zyplayer.doc.data.repository.manage.entity.DbDatasource; +import com.zyplayer.doc.data.service.manage.DbDatasourceService; +import com.zyplayer.doc.db.framework.configuration.DatasourceUtil; +import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean; +import com.zyplayer.doc.db.framework.db.bean.DatabaseRegistrationBean; +import com.zyplayer.doc.db.framework.json.DocDbResponseJson; +import com.zyplayer.doc.db.framework.json.ResponseJson; +import org.apache.commons.lang.StringUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.*; + +/** + * 数据源控制器 + * + * @author 暮光:城中城 + * @since 2019年6月29日 + */ +@AuthMan +@RestController +@RequestMapping("/zyplayer-doc-db/datasource") +public class DbDatasourceController { + + @Resource + DatabaseRegistrationBean databaseRegistrationBean; + @Resource + DbDatasourceService dbDatasourceService; + + @PostMapping(value = "/list") + public ResponseJson list() { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("yn", 1); + List datasourceList = dbDatasourceService.list(wrapper); + return DocDbResponseJson.ok(datasourceList); + } + + @PostMapping(value = "/update") + public ResponseJson update(DbDatasource dbDatasource) { + if (StringUtils.isBlank(dbDatasource.getDriverClassName())) { + return DocDbResponseJson.warn("驱动类必选"); + } else if (StringUtils.isBlank(dbDatasource.getSourceUrl())) { + return DocDbResponseJson.warn("地址必填"); + } else if (StringUtils.isBlank(dbDatasource.getSourceName())) { + return DocDbResponseJson.warn("用户名必填"); + } else if (StringUtils.isBlank(dbDatasource.getSourcePassword())) { + return DocDbResponseJson.warn("密码必填"); + } + Long sourceId = Optional.ofNullable(dbDatasource.getId()).orElse(0L); + if (sourceId > 0) { + dbDatasourceService.updateById(dbDatasource); + } else { + DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + dbDatasource.setCreateTime(new Date()); + dbDatasource.setCreateUserId(currentUser.getUserId()); + dbDatasource.setYn(1); + dbDatasourceService.save(dbDatasource); + } + List newFactoryBeanList = new LinkedList<>(); + List databaseFactoryBeanList = databaseRegistrationBean.getDatabaseFactoryBeanList(); + for (DatabaseFactoryBean factoryBean : databaseFactoryBeanList) { + if (Objects.equals(factoryBean.getId(), sourceId)) { + try { + // 关闭旧的数据源 + factoryBean.getDataSource().close(); + factoryBean.getDataSource().destroy(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + newFactoryBeanList.add(factoryBean); + } + } + // 创建新的数据源 + DatabaseFactoryBean databaseFactoryBean = DatasourceUtil.createDatabaseFactoryBean(dbDatasource); + if (databaseFactoryBean != null) { + newFactoryBeanList.add(databaseFactoryBean); + } + databaseRegistrationBean.setDatabaseFactoryBeanList(newFactoryBeanList); + + if (databaseFactoryBean == null) { + return DocDbResponseJson.warn("创建数据源失败,请检查配置是否正确"); + } + return DocDbResponseJson.ok(); + } +} + diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/ApplicationListenerBean.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/ApplicationListenerBean.java index 5e6eb81f..a6176939 100644 --- a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/ApplicationListenerBean.java +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/ApplicationListenerBean.java @@ -1,36 +1,24 @@ package com.zyplayer.doc.db.framework.configuration; -import java.sql.DatabaseMetaData; -import java.util.LinkedList; -import java.util.List; -import java.util.Properties; -import java.util.concurrent.atomic.AtomicInteger; - -import javax.sql.DataSource; - -import com.zyplayer.doc.db.framework.db.bean.DbConfigBean; -import com.zyplayer.doc.db.framework.db.interceptor.SqlLogInterceptor; -import org.apache.ibatis.plugin.Interceptor; -import org.mybatis.spring.SqlSessionFactoryBean; -import org.mybatis.spring.SqlSessionTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.zyplayer.doc.data.repository.manage.entity.DbDatasource; +import com.zyplayer.doc.data.service.manage.DbDatasourceService; +import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean; +import com.zyplayer.doc.db.framework.db.bean.DatabaseRegistrationBean; import org.springframework.context.ApplicationListener; -import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean; import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.stereotype.Component; -import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean; -import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean.DatabaseProduct; -import com.zyplayer.doc.db.framework.db.bean.DatabaseRegistrationBean; +import java.util.LinkedList; +import java.util.List; @Component public class ApplicationListenerBean implements ApplicationListener { - @Autowired + @javax.annotation.Resource DatabaseRegistrationBean databaseRegistrationBean; + @javax.annotation.Resource + DbDatasourceService dbDatasourceService; private volatile static boolean IS_INIT = false; @@ -41,76 +29,15 @@ public class ApplicationListenerBean implements ApplicationListener databaseFactoryBeanList = new LinkedList<>(); - for (DbConfigBean dbConfigBean : databaseRegistrationBean.getDbConfigList()) { - try { - // 数据源配置 - Properties xaProperties = new Properties(); - xaProperties.setProperty("driverClassName", dbConfigBean.getDriverClassName()); - xaProperties.setProperty("url", dbConfigBean.getUrl()); - xaProperties.setProperty("username", dbConfigBean.getUsername()); - xaProperties.setProperty("password", dbConfigBean.getPassword()); - xaProperties.setProperty("maxActive", "500"); - xaProperties.setProperty("testOnBorrow", "true"); - xaProperties.setProperty("testWhileIdle", "true"); - xaProperties.setProperty("validationQuery", "select 'x'"); - // 数据源 - AtomikosDataSourceBean dataSource = new AtomikosDataSourceBean(); - dataSource.setXaProperties(xaProperties); - dataSource.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource"); - dataSource.setUniqueResourceName("zyplayer-doc-db" + (dataSourceIndex++)); - dataSource.setMaxPoolSize(500); - dataSource.setMinPoolSize(1); - dataSource.setMaxLifetime(60); - // 描述连接信息的对象 - DatabaseFactoryBean databaseFactoryBean = new DatabaseFactoryBean(); - DatabaseMetaData metaData = dataSource.getConnection().getMetaData(); - String productName = metaData.getDatabaseProductName().toLowerCase(); - Resource[] resources = null; - String dbUrl = metaData.getURL(); - PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); - if (productName.indexOf("mysql") >= 0) { - // jdbc:mysql://192.168.0.1:3306/user_info?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true - String[] urlParamArr = dbUrl.split("\\?"); - String[] urlDbNameArr = urlParamArr[0].split("/"); - if (urlDbNameArr.length >= 2) { - databaseFactoryBean.setDbName(urlDbNameArr[urlDbNameArr.length - 1]); - databaseFactoryBean.setHost(urlDbNameArr[urlDbNameArr.length - 2]); - } - databaseFactoryBean.setDatabaseProduct(DatabaseProduct.MYSQL); - resources = resolver.getResources("classpath:com/zyplayer/doc/db/framework/db/mapper/mysql/*.xml"); - } else if (productName.indexOf("sql server") >= 0) { - // jdbc:jtds:sqlserver://192.168.0.1:33434;socketTimeout=60;DatabaseName=user_info; - String[] urlParamArr = dbUrl.split(";"); - String[] urlDbNameArr = urlParamArr[0].split("/"); - databaseFactoryBean.setHost(urlDbNameArr[urlDbNameArr.length - 1]); - for (String urlParam : urlParamArr) { - String[] keyValArr = urlParam.split("="); - if (keyValArr.length >= 2 && keyValArr[0].equalsIgnoreCase("DatabaseName")) { - databaseFactoryBean.setDbName(keyValArr[1]); - } - } - databaseFactoryBean.setDatabaseProduct(DatabaseProduct.SQLSERVER); - resources = resolver.getResources("classpath:com/zyplayer/doc/db/framework/db/mapper/sqlserver/*.xml"); - } - if (resources == null) { - continue; - } - // 创建sqlSessionTemplate - SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); - sqlSessionFactoryBean.setDataSource(dataSource); - sqlSessionFactoryBean.setMapperLocations(resources); - sqlSessionFactoryBean.setPlugins(new Interceptor[]{sqlLogInterceptor}); - SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactoryBean.getObject()); - // 组装自定义的bean - databaseFactoryBean.setDataSource(dataSource); - databaseFactoryBean.setSqlSessionTemplate(sqlSessionTemplate); - databaseFactoryBean.setUrl(dbUrl); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("yn", 1); + List datasourceList = dbDatasourceService.list(wrapper); + for (DbDatasource dbDatasource : datasourceList) { + DatabaseFactoryBean databaseFactoryBean = DatasourceUtil.createDatabaseFactoryBean(dbDatasource); + if (databaseFactoryBean != null) { databaseFactoryBeanList.add(databaseFactoryBean); - } catch (Exception e) { - e.printStackTrace(); } } databaseRegistrationBean.setDatabaseFactoryBeanList(databaseFactoryBeanList); diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/DatasourceUtil.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/DatasourceUtil.java new file mode 100644 index 00000000..43eb1e19 --- /dev/null +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/DatasourceUtil.java @@ -0,0 +1,91 @@ +package com.zyplayer.doc.db.framework.configuration; + +import com.zyplayer.doc.data.repository.manage.entity.DbDatasource; +import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean; +import com.zyplayer.doc.db.framework.db.interceptor.SqlLogInterceptor; +import org.apache.ibatis.plugin.Interceptor; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; + +import java.sql.DatabaseMetaData; +import java.util.Properties; + +public class DatasourceUtil { + private static SqlLogInterceptor sqlLogInterceptor = new SqlLogInterceptor(); + + public static DatabaseFactoryBean createDatabaseFactoryBean(DbDatasource dbDatasource){ + try { + // 数据源配置 + Properties xaProperties = new Properties(); + xaProperties.setProperty("driverClassName", dbDatasource.getDriverClassName()); + xaProperties.setProperty("url", dbDatasource.getSourceUrl()); + xaProperties.setProperty("username", dbDatasource.getSourceName()); + xaProperties.setProperty("password", dbDatasource.getSourcePassword()); + xaProperties.setProperty("maxActive", "500"); + xaProperties.setProperty("breakAfterAcquireFailure", "true"); + xaProperties.setProperty("testOnBorrow", "true"); + xaProperties.setProperty("testWhileIdle", "true"); + xaProperties.setProperty("validationQuery", "select 'x'"); + // 数据源 + AtomikosDataSourceBean dataSource = new AtomikosDataSourceBean(); + dataSource.setXaProperties(xaProperties); + dataSource.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource"); + dataSource.setUniqueResourceName("zyplayer-doc-db" + dbDatasource.getId()); + dataSource.setMaxPoolSize(500); + dataSource.setMinPoolSize(1); + dataSource.setMaxLifetime(60); + // 描述连接信息的对象 + DatabaseFactoryBean databaseFactoryBean = new DatabaseFactoryBean(); + DatabaseMetaData metaData = dataSource.getConnection().getMetaData(); + String productName = metaData.getDatabaseProductName().toLowerCase(); + Resource[] resources = null; + String dbUrl = metaData.getURL(); + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + if (productName.indexOf("mysql") >= 0) { + // jdbc:mysql://192.168.0.1:3306/user_info?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true + String[] urlParamArr = dbUrl.split("\\?"); + String[] urlDbNameArr = urlParamArr[0].split("/"); + if (urlDbNameArr.length >= 2) { + databaseFactoryBean.setDbName(urlDbNameArr[urlDbNameArr.length - 1]); + databaseFactoryBean.setHost(urlDbNameArr[urlDbNameArr.length - 2]); + } + databaseFactoryBean.setDatabaseProduct(DatabaseFactoryBean.DatabaseProduct.MYSQL); + resources = resolver.getResources("classpath:com/zyplayer/doc/db/framework/db/mapper/mysql/*.xml"); + } else if (productName.indexOf("sql server") >= 0) { + // jdbc:jtds:sqlserver://192.168.0.1:33434;socketTimeout=60;DatabaseName=user_info; + String[] urlParamArr = dbUrl.split(";"); + String[] urlDbNameArr = urlParamArr[0].split("/"); + databaseFactoryBean.setHost(urlDbNameArr[urlDbNameArr.length - 1]); + for (String urlParam : urlParamArr) { + String[] keyValArr = urlParam.split("="); + if (keyValArr.length >= 2 && keyValArr[0].equalsIgnoreCase("DatabaseName")) { + databaseFactoryBean.setDbName(keyValArr[1]); + } + } + databaseFactoryBean.setDatabaseProduct(DatabaseFactoryBean.DatabaseProduct.SQLSERVER); + resources = resolver.getResources("classpath:com/zyplayer/doc/db/framework/db/mapper/sqlserver/*.xml"); + } + if (resources == null) { + return null; + } + // 创建sqlSessionTemplate + SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); + sqlSessionFactoryBean.setDataSource(dataSource); + sqlSessionFactoryBean.setMapperLocations(resources); + sqlSessionFactoryBean.setPlugins(new Interceptor[]{sqlLogInterceptor}); + SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactoryBean.getObject()); + // 组装自定义的bean + databaseFactoryBean.setId(dbDatasource.getId()); + databaseFactoryBean.setDataSource(dataSource); + databaseFactoryBean.setSqlSessionTemplate(sqlSessionTemplate); + databaseFactoryBean.setUrl(dbUrl); + return databaseFactoryBean; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/bean/DatabaseFactoryBean.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/bean/DatabaseFactoryBean.java index 93f6ba82..aca305a4 100644 --- a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/bean/DatabaseFactoryBean.java +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/db/bean/DatabaseFactoryBean.java @@ -1,72 +1,80 @@ -package com.zyplayer.doc.db.framework.db.bean; - -import javax.sql.DataSource; - -import org.mybatis.spring.SqlSessionTemplate; - -/** - * 描述连接信息的对象 - * @author 暮光:城中城 - * @since 2018年8月8日 - */ -public class DatabaseFactoryBean { - private DataSource dataSource; - private SqlSessionTemplate sqlSessionTemplate; - private String url; - private String host; - private String dbName; - private DatabaseProduct databaseProduct; - - public static enum DatabaseProduct { - MYSQL, SQLSERVER - } - - public DataSource getDataSource() { - return dataSource; - } - - public void setDataSource(DataSource dataSource) { - this.dataSource = dataSource; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public String getDbName() { - return dbName; - } - - public void setDbName(String dbName) { - this.dbName = dbName; - } - - public DatabaseProduct getDatabaseProduct() { - return databaseProduct; - } - - public void setDatabaseProduct(DatabaseProduct databaseProduct) { - this.databaseProduct = databaseProduct; - } - - public SqlSessionTemplate getSqlSessionTemplate() { - return sqlSessionTemplate; - } - - public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { - this.sqlSessionTemplate = sqlSessionTemplate; - } - -} +package com.zyplayer.doc.db.framework.db.bean; + +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean; + +/** + * 描述连接信息的对象 + * @author 暮光:城中城 + * @since 2018年8月8日 + */ +public class DatabaseFactoryBean { + private Long id; + private AtomikosDataSourceBean dataSource; + private SqlSessionTemplate sqlSessionTemplate; + private String url; + private String host; + private String dbName; + private DatabaseProduct databaseProduct; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public static enum DatabaseProduct { + MYSQL, SQLSERVER + } + + public AtomikosDataSourceBean getDataSource() { + return dataSource; + } + + public void setDataSource(AtomikosDataSourceBean dataSource) { + this.dataSource = dataSource; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public String getDbName() { + return dbName; + } + + public void setDbName(String dbName) { + this.dbName = dbName; + } + + public DatabaseProduct getDatabaseProduct() { + return databaseProduct; + } + + public void setDatabaseProduct(DatabaseProduct databaseProduct) { + this.databaseProduct = databaseProduct; + } + + public SqlSessionTemplate getSqlSessionTemplate() { + return sqlSessionTemplate; + } + + public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { + this.sqlSessionTemplate = sqlSessionTemplate; + } + +} diff --git a/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.3.sql b/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.3.sql new file mode 100644 index 00000000..9c83ab8b --- /dev/null +++ b/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.3.sql @@ -0,0 +1,23 @@ + +-- +-- !!重要说明!! +-- 1、本sql文件分为:从1.0.2版本升级 和 全新的库,即增量和全量的区分,请选择性执行 +-- 2、建议数据库版本:5.7.25 +-- + +-- 从1.0.2版本升级: +CREATE TABLE `db_datasource` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键自增ID', + `driver_class_name` varchar(50) DEFAULT NULL COMMENT '数据源驱动类', + `source_url` varchar(512) DEFAULT NULL COMMENT '数据源地址', + `source_name` varchar(50) DEFAULT NULL COMMENT '数据源用户名', + `source_password` varchar(50) DEFAULT NULL COMMENT '数据源密码', + `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建人ID', + `create_user_name` varchar(20) DEFAULT NULL COMMENT '创建人名字', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `yn` tinyint(4) DEFAULT NULL COMMENT '是否有效 0=无效 1=有效', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + + +-- ------------------------全新的库:------------------------ diff --git a/zyplayer-doc-ui/console-ui/src/common/lib/common/common.js b/zyplayer-doc-ui/console-ui/src/common/lib/common/common.js index 46402e8f..fa5f5587 100644 --- a/zyplayer-doc-ui/console-ui/src/common/lib/common/common.js +++ b/zyplayer-doc-ui/console-ui/src/common/lib/common/common.js @@ -22,9 +22,9 @@ export default { if (!!res.message) { global.vue.$message('请求错误:' + res.message); } else if (res.data.errCode == 400) { - global.vue.$message('请先登录'); var href = encodeURIComponent(window.location.href); if (global.vue.$router.currentRoute.path != '/user/login') { + global.vue.$message('请先登录'); global.vue.$router.push({path: '/user/login', query: {redirect: href}}); } } else if (res.data.errCode == 402) { diff --git a/zyplayer-doc-ui/console-ui/src/views/user/Login.vue b/zyplayer-doc-ui/console-ui/src/views/user/Login.vue index e3c6edc1..26f02718 100644 --- a/zyplayer-doc-ui/console-ui/src/views/user/Login.vue +++ b/zyplayer-doc-ui/console-ui/src/views/user/Login.vue @@ -1,5 +1,5 @@