mirror of
https://gitee.com/dromara/dbswitch.git
synced 2025-09-09 05:29:10 +00:00
version for 1.6.8
This commit is contained in:
24
README.md
24
README.md
@@ -38,7 +38,7 @@
|
||||
|
||||
- 源端oracle/SqlServer/MySQL/MariaDB/PostgreSQL/DB2/DM/Kingbase8/HighGo/Hive向目的端为Kingbase8的迁移(**支持绝大多数常规类型字段...**)
|
||||
|
||||
** 注:** 目前Hive只支持账号密码方式认证。
|
||||
** 注:** 目前Hive只支持Hive version 3.x的账号密码方式认证。
|
||||
|
||||
### 4、结构设计
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
- 环境要求:
|
||||
|
||||
**JDK**:>=1.8
|
||||
**JDK**:>=1.8 (建议用JDK 1.8)
|
||||
|
||||
**maven**:>=3.6
|
||||
> Maven 仓库默认在国外, 国内使用难免很慢,可以更换为阿里云的仓库。 参考教程: [配置阿里云的仓库教程](https://www.runoob.com/maven/maven-repositories.html)
|
||||
@@ -101,7 +101,7 @@ cd dbswitch/
|
||||
sh ./docker-maven-build.sh
|
||||
```
|
||||
|
||||
**特别注意:** 在Java9及以上版本默认情况下不允许应用程序查看来自JDK的所有类,但在dbswitch中利用反射计算对象的字节大小,所以需要在JVM启动时(bin/datasync.sh脚本)需要增加如下参数:
|
||||
**特别注意:** 在Java9及以上版本默认情况下不允许应用程序查看来自JDK的所有类,但在dbswitch中利用反射计算对象的字节大小,所以需要在JVM启动时需要增加如下参数:
|
||||
```
|
||||
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED
|
||||
```
|
||||
@@ -110,15 +110,15 @@ sh ./docker-maven-build.sh
|
||||
|
||||
(1) 当编译打包命令执行完成后,会在dbswitch/target/目录下生成dbswitch-relase-x.x.x.tar.gz的打包文件,将文件拷贝到已安装JRE的部署机器上解压即可。
|
||||
|
||||
(2) 基于docker-compose提供linux联网环境下的**一键安装**:
|
||||
(2) 基于docker-compose提供linux联网环境下的**一键安装**,安装命令见 [发行版链接地址](https://gitee.com/inrgihc/dbswitch/releases)
|
||||
|
||||
详见文档: [build-docker/install/README.md](build-docker/install)
|
||||
|
||||
## 三、工具使用
|
||||
|
||||
> dbswitch工具提供基于```conf/config.yml```配置的启动方式和基于```conf/application.yml```的WEB端使用方式;
|
||||
> dbswitch工具提供基于```conf/config.yml```配置的dbswitch-data模块启动方式和基于```conf/application.yml```的dbswitch-admin模块的WEB端使用方式;
|
||||
|
||||
### 1、基于conf/config.yml配置启动的命令操作方式
|
||||
### 1、基于conf/config.yml配置的dbswitch-data模块启动命令操作方式
|
||||
|
||||
#### (1)、配置文件
|
||||
|
||||
@@ -319,7 +319,7 @@ dbswitch.target.writer-engine-insert=true
|
||||
|
||||
> 注:如果待同步的两端表结构已经一致或源端字段是目的端字段的子集,也可直接用步骤B配置进行变更同步
|
||||
|
||||
### 2、基于conf/application.yml配置启动的WEB使用方式
|
||||
### 2、基于conf/application.yml配置的dbswitch-admin模块启动的WEB使用方式
|
||||
|
||||
#### (1)、准备一个MySQL(建议为:版本为 5.7+ )的数据库
|
||||
|
||||
@@ -386,7 +386,7 @@ bin/startup.sh
|
||||
|
||||
- dbswitch-admin服务启动时会基于flyway自动建库建表,需要保证配置的mysql连接账号具有建库建表等权限;
|
||||
|
||||
- dbswitch离线同步工具提供各种数据库间表结构转换RESTful类型的在线API接口如下:(详见[接口文档](/INTERFACE.md))
|
||||
- dbswitch离线同步工具提供各种数据库间表结构转换RESTful在线API接口如下:(详见[接口文档](/INTERFACE.md))
|
||||
|
||||
> Swagger在线接口地址: http://127.0.0.1:9088/swagger-ui/
|
||||
|
||||
@@ -419,7 +419,7 @@ bin/startup.sh
|
||||
|
||||
### 3、两种方式的适用场景
|
||||
|
||||
- 方式一:基于conf/config.yml配置启动的命令操作方式式
|
||||
- 方式一:基于conf/config.yml配置的dbswitch-data模块启动的命令操作方式式
|
||||
|
||||
**优点:**
|
||||
|
||||
@@ -433,7 +433,7 @@ bin/startup.sh
|
||||
|
||||
> 不支持CRON表达式的周期执行;
|
||||
|
||||
- 方式二:基于conf/application.yml配置启动的WEB使用方式
|
||||
- 方式二:基于conf/application.yml配置的dbswitch-admin模块启动的WEB使用方式
|
||||
|
||||
**优点:**
|
||||
|
||||
@@ -449,7 +449,7 @@ bin/startup.sh
|
||||
|
||||
> 多个任务并发执行不易于分析任务错误原因;
|
||||
|
||||
## 四、模块集成与二次开发
|
||||
## 四、模块集成开发说明
|
||||
|
||||
### 1、dbswitch安装到本地仓库
|
||||
|
||||
@@ -474,7 +474,7 @@ cd dbswitch && mvn clean install
|
||||
DbswichProperties properties = new DbswichProperties();
|
||||
properties.setXXXX();
|
||||
|
||||
// 将参数传递给dbswitch引起并执行
|
||||
// 将参数传递给dbswitch启动同步方式执行
|
||||
MigrationService service = new MigrationService(properties);
|
||||
service.run();
|
||||
```
|
||||
|
@@ -386,7 +386,7 @@ export default {
|
||||
this.$http.delete(
|
||||
"/dbswitch/admin/api/v1/connection/delete/" + row.id
|
||||
).then(res => {
|
||||
console.log(res);
|
||||
//console.log(res);
|
||||
if (0 === res.data.code) {
|
||||
this.loadData();
|
||||
} else {
|
||||
@@ -403,7 +403,7 @@ export default {
|
||||
this.$http.get(
|
||||
"/dbswitch/admin/api/v1/connection/test/" + row.id
|
||||
).then(res => {
|
||||
console.log(res);
|
||||
//console.log(res);
|
||||
if (0 === res.data.code) {
|
||||
alert("测试连接成功!");
|
||||
} else {
|
||||
@@ -415,7 +415,7 @@ export default {
|
||||
let driverClass = "";
|
||||
if (this.databaseType.length > 0) {
|
||||
for (let i = 0; i < this.databaseType.length; i++) {
|
||||
console.log(this.databaseType[i])
|
||||
//console.log(this.databaseType[i])
|
||||
if (this.databaseType[i].type == this.createform.type) {
|
||||
driverClass = this.databaseType[i].driver;
|
||||
break;
|
||||
@@ -462,7 +462,7 @@ export default {
|
||||
let driverClass = "";
|
||||
if (this.databaseType.length > 0) {
|
||||
for (let i = 0; i < this.databaseType.length; i++) {
|
||||
console.log(this.databaseType[i])
|
||||
//console.log(this.databaseType[i])
|
||||
if (this.databaseType[i].type == this.updateform.type) {
|
||||
driverClass = this.databaseType[i].driver;
|
||||
break;
|
||||
|
@@ -256,7 +256,9 @@ export default {
|
||||
},
|
||||
mounted () {
|
||||
window.addEventListener('resize', () => {
|
||||
if (this.myChart && typeof this.myChart.resize == 'function') {
|
||||
this.myChart.resize();
|
||||
}
|
||||
});
|
||||
},
|
||||
updated () {
|
||||
|
@@ -3,7 +3,8 @@
|
||||
<el-card>
|
||||
<div class="flex-between">
|
||||
<div class="tree-container">
|
||||
<el-tree class="el-scrollbar"
|
||||
<el-scrollbar style="height:100%">
|
||||
<el-tree class="scroller"
|
||||
:props="props"
|
||||
:load="loadNode"
|
||||
:expand-on-click-node="true"
|
||||
@@ -13,6 +14,7 @@
|
||||
@node-click="handleNodeClick"
|
||||
lazy>
|
||||
</el-tree>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
<div class="table-container">
|
||||
<span>当前表:{{currentNode.schemaName}} / {{currentNode.tableName}}</span>
|
||||
@@ -27,13 +29,6 @@
|
||||
<el-descriptions-item label="表名称">{{tableMeta.tableName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="表类型">{{tableMeta.type}}</el-descriptions-item>
|
||||
<el-descriptions-item label="模式名">{{tableMeta.schemaName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="建表DDL">
|
||||
<el-input type="textarea"
|
||||
:rows="16"
|
||||
v-model="tableMeta.createSql"
|
||||
auto-complete="off"
|
||||
:readonly=true></el-input>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="表注释">
|
||||
<el-input type="textarea"
|
||||
:rows="2"
|
||||
@@ -41,6 +36,13 @@
|
||||
auto-complete="off"
|
||||
:readonly=true></el-input>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="建表DDL">
|
||||
<el-input type="textarea"
|
||||
:rows="16"
|
||||
v-model="tableMeta.createSql"
|
||||
auto-complete="off"
|
||||
:readonly=true></el-input>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="字段信息"
|
||||
@@ -51,7 +53,7 @@
|
||||
border
|
||||
style="width: 100%">
|
||||
<template slot="empty">
|
||||
<span>单击左侧展开"数据源导航数"来查看表的元数据记录</span>
|
||||
<span>单击左侧展开"数据源导航树"来查看表的元数据记录</span>
|
||||
</template>
|
||||
<el-table-column prop="fieldName"
|
||||
min-width="20%"
|
||||
@@ -104,7 +106,7 @@
|
||||
:data="sampleData.rows"
|
||||
border>
|
||||
<template slot="empty">
|
||||
<span>单击左侧展开"数据源导航数"来查看表的数据记录</span>
|
||||
<span>单击左侧展开"数据源导航树"来查看表的数据记录</span>
|
||||
</template>
|
||||
<el-table-column v-for="(item,index) in sampleData.columns"
|
||||
:prop="item"
|
||||
@@ -380,7 +382,11 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.el-card,
|
||||
.el-card {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.el-message {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@@ -389,17 +395,15 @@ export default {
|
||||
.flex-between {
|
||||
display: flex;
|
||||
}
|
||||
.tree-container {
|
||||
overflow: hidden;
|
||||
background: #f1ecec;
|
||||
}
|
||||
.el-scrollbar .el-scrollbar__wrap {overflow-x: hidden;}
|
||||
.tree-container .el-tree {
|
||||
min-width: 350px;
|
||||
max-width: 350px;
|
||||
position: relative;
|
||||
cursor: default;
|
||||
background: #f3f1f1;
|
||||
color: #242425;
|
||||
}
|
||||
.scroller {
|
||||
min-width: 100%;
|
||||
}
|
||||
.tree-container .tree {
|
||||
overflow: auto;
|
||||
|
@@ -9,11 +9,20 @@
|
||||
</div>
|
||||
<div class="navsBox">
|
||||
<ul>
|
||||
<li v-for="(item,index) in allTaskAssignments"
|
||||
<li v-for="(item,index) in pageTaskAssignments"
|
||||
:key="index"
|
||||
@click="handleChooseClick(item.id,index)"
|
||||
:class="{active:index==isActive}">[{{item.id}}]{{item.name}}</li>
|
||||
</ul>
|
||||
<el-pagination small
|
||||
layout="sizes, prev, pager, next"
|
||||
@current-change="handleLoadPageTaskAssignments"
|
||||
:current-page="currentTaskAssignmentPage"
|
||||
:page-sizes="[10, 15, 20]"
|
||||
@size-change="handleLoadPageTaskAssignmentsSizeChange"
|
||||
:page-size="currentTaskAssignmentPageSize"
|
||||
:total="pageTaskAssignmentsTotalCount">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
@@ -23,7 +32,7 @@
|
||||
size="small"
|
||||
border>
|
||||
<template slot="empty">
|
||||
<span>单击左侧任务列表记录来查看作业调度记录</span>
|
||||
<span>记录为空,或者单击左侧任务列表记录来查看作业调度记录</span>
|
||||
</template>
|
||||
<el-table-column type="expand">
|
||||
<template slot-scope="props">
|
||||
@@ -110,7 +119,10 @@ export default {
|
||||
currentPage: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
allTaskAssignments: [],
|
||||
currentTaskAssignmentPage: 1,
|
||||
currentTaskAssignmentPageSize: 10,
|
||||
pageTaskAssignments: [],
|
||||
pageTaskAssignmentsTotalCount: 0,
|
||||
taskId: '请选择一个任务安排',
|
||||
jobTableData: [],
|
||||
jobScheduleTime: '',
|
||||
@@ -119,13 +131,14 @@ export default {
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
loadAllTaskAssignments: function () {
|
||||
loadPageTaskAssignments: function () {
|
||||
this.$http({
|
||||
method: "GET",
|
||||
url: "/dbswitch/admin/api/v1/assignment/list/1/10000"
|
||||
url: "/dbswitch/admin/api/v1/assignment/list/" + this.currentTaskAssignmentPage + "/" + this.currentTaskAssignmentPageSize
|
||||
}).then(res => {
|
||||
if (0 === res.data.code) {
|
||||
this.allTaskAssignments = res.data.data;
|
||||
this.pageTaskAssignments = res.data.data;
|
||||
this.pageTaskAssignmentsTotalCount = res.data.pagination.total;
|
||||
} else {
|
||||
if (res.data.message) {
|
||||
alert("初始化任务安排信息失败:" + res.data.message);
|
||||
@@ -134,6 +147,14 @@ export default {
|
||||
}
|
||||
);
|
||||
},
|
||||
handleLoadPageTaskAssignments: function (currentPage) {
|
||||
this.currentTaskAssignmentPage = currentPage;
|
||||
this.loadPageTaskAssignments();
|
||||
},
|
||||
handleLoadPageTaskAssignmentsSizeChange: function (pageSize) {
|
||||
this.currentTaskAssignmentPageSize = pageSize;
|
||||
this.loadPageTaskAssignments();
|
||||
},
|
||||
handleClose: function () { },
|
||||
handleSizeChange: function (pageSize) {
|
||||
this.loading = true;
|
||||
@@ -182,7 +203,7 @@ export default {
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.loadAllTaskAssignments();
|
||||
this.loadPageTaskAssignments();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -265,4 +286,5 @@ export default {
|
||||
padding: 10px;
|
||||
width: calc(100% - 250px);
|
||||
}
|
||||
|
||||
</style>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-admin</artifactId>
|
||||
@@ -118,19 +118,19 @@
|
||||
<dependency>
|
||||
<groupId>org.mybatis.spring.boot</groupId>
|
||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||
<version>2.1.1</version>
|
||||
<version>2.2.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>tk.mybatis</groupId>
|
||||
<artifactId>mapper-spring-boot-starter</artifactId>
|
||||
<version>2.1.5</version>
|
||||
<version>4.2.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.github.pagehelper</groupId>
|
||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||
<version>1.2.12</version>
|
||||
<version>1.4.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
@@ -114,8 +114,10 @@ public class DbConnectionController {
|
||||
@TokenCheck
|
||||
@ApiOperation(value = "连接名称")
|
||||
@GetMapping(value = "/list/name", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
public Result<DbConnectionNameResponse> getNameList() {
|
||||
return databaseConnectionService.getNameList();
|
||||
public PageResult<DbConnectionNameResponse> getNameList(
|
||||
@RequestParam(value = "page", required = false) Integer page,
|
||||
@RequestParam(value = "size", required = false) Integer size) {
|
||||
return databaseConnectionService.getNameList(page, size);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -61,7 +61,7 @@ public class DbConnectionService {
|
||||
|
||||
String host = matcher.group("host");
|
||||
String port = matcher.group("port");
|
||||
if (null == port) {
|
||||
if (StringUtils.isBlank(port)) {
|
||||
port = String.valueOf(supportDbType.getPort());
|
||||
}
|
||||
|
||||
@@ -144,8 +144,8 @@ public class DbConnectionService {
|
||||
|
||||
public Result<DbConnectionDetailResponse> addDatabaseConnection(
|
||||
DbConnectionCreateRequest request) {
|
||||
if (Objects.isNull(request.getName())) {
|
||||
return Result.failed(ResultCode.ERROR_INVALID_ARGUMENT, "name is null");
|
||||
if (StringUtils.isBlank(request.getName())) {
|
||||
return Result.failed(ResultCode.ERROR_INVALID_ARGUMENT, "name is empty");
|
||||
}
|
||||
|
||||
if (Objects.nonNull(databaseConnectionDAO.getByName(request.getName()))) {
|
||||
@@ -153,6 +153,7 @@ public class DbConnectionService {
|
||||
}
|
||||
|
||||
DatabaseConnectionEntity conn = request.toDatabaseConnection();
|
||||
validJdbcUrlFormat(conn);
|
||||
databaseConnectionDAO.insert(conn);
|
||||
|
||||
return Result.success(ConverterFactory.getConverter(DbConnectionDetailConverter.class)
|
||||
@@ -166,7 +167,13 @@ public class DbConnectionService {
|
||||
return Result.failed(ResultCode.ERROR_RESOURCE_NOT_EXISTS, "id=" + request.getId());
|
||||
}
|
||||
|
||||
DatabaseConnectionEntity exist = databaseConnectionDAO.getByName(request.getName());
|
||||
if (Objects.nonNull(exist) && !exist.getId().equals(request.getId())) {
|
||||
return Result.failed(ResultCode.ERROR_RESOURCE_ALREADY_EXISTS, "name=" + request.getName());
|
||||
}
|
||||
|
||||
DatabaseConnectionEntity conn = request.toDatabaseConnection();
|
||||
validJdbcUrlFormat(conn);
|
||||
databaseConnectionDAO.updateById(conn);
|
||||
|
||||
return Result.success(ConverterFactory.getConverter(DbConnectionDetailConverter.class)
|
||||
@@ -177,12 +184,15 @@ public class DbConnectionService {
|
||||
databaseConnectionDAO.deleteById(id);
|
||||
}
|
||||
|
||||
public Result<DbConnectionNameResponse> getNameList() {
|
||||
public PageResult<DbConnectionNameResponse> getNameList(Integer page, Integer size) {
|
||||
Supplier<List<DbConnectionNameResponse>> method = () -> {
|
||||
List<DatabaseConnectionEntity> lists = databaseConnectionDAO.listAll(null);
|
||||
List<DbConnectionNameResponse> ret = lists.parallelStream()
|
||||
return lists.stream()
|
||||
.map(c -> new DbConnectionNameResponse(c.getId(), c.getName()))
|
||||
.collect(Collectors.toList());
|
||||
return Result.success(ret);
|
||||
};
|
||||
|
||||
return PageUtils.getPage(method, page, size);
|
||||
}
|
||||
|
||||
public DatabaseConnectionEntity getDatabaseConnectionById(Long id) {
|
||||
@@ -193,4 +203,30 @@ public class DbConnectionService {
|
||||
|
||||
return dbConn;
|
||||
}
|
||||
|
||||
private void validJdbcUrlFormat(DatabaseConnectionEntity conn) {
|
||||
String typeName = conn.getType().getName().toUpperCase();
|
||||
SupportDbTypeEnum supportDbType = SupportDbTypeEnum.valueOf(typeName);
|
||||
if (!conn.getUrl().startsWith(supportDbType.getUrlPrefix())) {
|
||||
throw new DbswitchException(ResultCode.ERROR_INVALID_JDBC_URL, conn.getUrl());
|
||||
}
|
||||
|
||||
for (int i = 0; i < supportDbType.getUrl().length; ++i) {
|
||||
String pattern = supportDbType.getUrl()[i];
|
||||
Matcher matcher = JDBCURL.getPattern(pattern).matcher(conn.getUrl());
|
||||
if (!matcher.matches()) {
|
||||
if (i == supportDbType.getUrl().length - 1) {
|
||||
throw new DbswitchException(ResultCode.ERROR_INVALID_JDBC_URL, conn.getUrl());
|
||||
}
|
||||
} else {
|
||||
if (supportDbType.hasDatabaseName() && StringUtils.isBlank(matcher.group("database"))) {
|
||||
throw new DbswitchException(ResultCode.ERROR_INVALID_JDBC_URL,
|
||||
"库名没有指定 :" + conn.getUrl());
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -17,24 +17,42 @@ import org.springframework.util.StringUtils;
|
||||
@AllArgsConstructor
|
||||
public enum SupportDbTypeEnum {
|
||||
|
||||
MYSQL(1, "mysql", "com.mysql.jdbc.Driver", 3306, "/* ping */ SELECT 1",
|
||||
MYSQL(1, "mysql", "com.mysql.jdbc.Driver", 3306,
|
||||
"/* ping */ SELECT 1",
|
||||
"jdbc:mysql://",
|
||||
new String[]{"jdbc:mysql://{host}[:{port}]/[{database}][\\?{params}]"}),
|
||||
MARIADB(2, "mariadb", "org.mariadb.jdbc.Driver", 3306, "SELECT 1",
|
||||
MARIADB(2, "mariadb", "org.mariadb.jdbc.Driver", 3306,
|
||||
"SELECT 1",
|
||||
"jdbc:mariadb://",
|
||||
new String[]{"jdbc:mariadb://{host}[:{port}]/[{database}][\\?{params}]"}),
|
||||
ORACLE(3, "oracle", "oracle.jdbc.driver.OracleDriver", 1521, "SELECT 'Hello' from DUAL",
|
||||
new String[]{"jdbc:oracle:thin:@{host}:{port}:{name}",
|
||||
"jdbc:oracle:thin:@//{host}[:{port}]/{name}"}),
|
||||
SQLSERVER(4, "sqlserver", "com.microsoft.sqlserver.jdbc.SQLServerDriver", 1433, "SELECT 1+2 as a",
|
||||
new String[]{"jdbc:sqlserver://{host}[:{port}][;databaseName={database}][;{params}]"}),
|
||||
POSTGRESQL(5, "postgresql", "org.postgresql.Driver", 5432, "SELECT 1",
|
||||
ORACLE(3, "oracle", "oracle.jdbc.driver.OracleDriver", 1521,
|
||||
"SELECT 'Hello' from DUAL",
|
||||
"jdbc:oracle:thin:@",
|
||||
new String[]{"jdbc:oracle:thin:@{host}:{port}:{database}",
|
||||
"jdbc:oracle:thin:@//{host}[:{port}]/{database}"}),
|
||||
SQLSERVER(4, "sqlserver", "com.microsoft.sqlserver.jdbc.SQLServerDriver", 1433,
|
||||
"SELECT 1+2 as a",
|
||||
"jdbc:sqlserver://",
|
||||
new String[]{"jdbc:sqlserver://{host}[:{port}][;DatabaseName={database}][;{params}]"}),
|
||||
POSTGRESQL(5, "postgresql", "org.postgresql.Driver", 5432,
|
||||
"SELECT 1",
|
||||
"jdbc:postgresql://",
|
||||
new String[]{"jdbc:postgresql://{host}[:{port}]/[{database}][\\?{params}]"}),
|
||||
DB2(6, "db2", "com.ibm.db2.jcc.DB2Driver", 50000, "SELECT 1 FROM SYSIBM.SYSDUMMY1",
|
||||
DB2(6, "db2", "com.ibm.db2.jcc.DB2Driver", 50000,
|
||||
"SELECT 1 FROM SYSIBM.SYSDUMMY1",
|
||||
"jdbc:db2://",
|
||||
new String[]{"jdbc:db2://{host}:{port}/{database}[:{params}]"}),
|
||||
DM(7, "dm", "dm.jdbc.driver.DmDriver", 5236, "SELECT 'Hello' from DUAL",
|
||||
DM(7, "dm", "dm.jdbc.driver.DmDriver", 5236,
|
||||
"SELECT 'Hello' from DUAL",
|
||||
"jdbc:dm://",
|
||||
new String[]{"jdbc:dm://{host}:{port}[/{database}][\\?{params}]"}),
|
||||
KINGBASE(8, "kingbase", "com.kingbase8.Driver", 54321, "SELECT 1",
|
||||
KINGBASE(8, "kingbase", "com.kingbase8.Driver", 54321,
|
||||
"SELECT 1",
|
||||
"jdbc:kingbase8://",
|
||||
new String[]{"jdbc:kingbase8://{host}[:{port}]/[{database}][\\?{params}]"}),
|
||||
HIVE(1, "hive", "org.apache.hive.jdbc.HiveDriver", 10000, "SELECT 1",
|
||||
HIVE(1, "hive", "org.apache.hive.jdbc.HiveDriver", 10000,
|
||||
"SELECT 1",
|
||||
"jdbc:hive2://",
|
||||
new String[]{"jdbc:hive2://{host}[:{port}]/[{database}][\\?{params}]"}),
|
||||
;
|
||||
|
||||
@@ -43,8 +61,13 @@ public enum SupportDbTypeEnum {
|
||||
private String driver;
|
||||
private int port;
|
||||
private String sql;
|
||||
private String urlPrefix;
|
||||
private String[] url;
|
||||
|
||||
public boolean hasDatabaseName() {
|
||||
return this != DM;
|
||||
}
|
||||
|
||||
public static SupportDbTypeEnum of(String name) {
|
||||
if (!StringUtils.isEmpty(name)) {
|
||||
for (SupportDbTypeEnum type : SupportDbTypeEnum.values()) {
|
||||
|
@@ -206,10 +206,10 @@ public class JDBCURL {
|
||||
}
|
||||
|
||||
// 6、Microsoft SQLServer数据库
|
||||
// jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;user=MyUserName;password=123456;
|
||||
// jdbc:sqlserver://localhost:1433;DatabaseName=AdventureWorks;user=MyUserName;password=123456;
|
||||
final Matcher matcher5 = JDBCURL
|
||||
.getPattern("jdbc:sqlserver://{host}[:{port}][;databaseName={database}][;{params}]")
|
||||
.matcher("jdbc:sqlserver://localhost:1433;databaseName=master;user=MyUserName");
|
||||
.getPattern("jdbc:sqlserver://{host}[:{port}][;DatabaseName={database}][;{params}]")
|
||||
.matcher("jdbc:sqlserver://localhost:1433;DatabaseName=master;user=MyUserName");
|
||||
if (matcher5.matches()) {
|
||||
System.out.println("sqlserver host:" + matcher5.group("host"));
|
||||
System.out.println("sqlserver port:" + matcher5.group("port"));
|
||||
|
@@ -1 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>异构数据迁移工具</title><link href=/static/css/app.5ecc6abf3a20668fd115c18e59dc362b.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.cbc4b16180a8bf2afd41.js></script><script type=text/javascript src=/static/js/vendor.d6c2f50c2f02bf33c8cf.js></script><script type=text/javascript src=/static/js/app.418d956a43293c6e0efb.js></script></body></html>
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>异构数据迁移工具</title><link href=/static/css/app.bc83f5316094e8a72597c94a4443f6b3.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.80c42f725fd3b643f80d.js></script><script type=text/javascript src=/static/js/vendor.d6c2f50c2f02bf33c8cf.js></script><script type=text/javascript src=/static/js/app.2dd7015ae4fe3dd7fe2e.js></script></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
webpackJsonp([11],{"0eSS":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var l={data:function(){return{loading:!0,lists:[],currentPage:1,pageSize:10,totalCount:0}},methods:{loadData:function(){var e=this;this.$http.get("/dbswitch/admin/api/v1/syslog/list/2/"+this.currentPage+"/"+this.pageSize).then(function(t){e.loading=!1,0===t.data.code?(e.currentPage=t.data.pagination.page,e.pageSize=t.data.pagination.size,e.totalCount=t.data.pagination.total,e.lists=t.data.data):alert("加载数据失败:"+t.data.message)},function(t){e.$message({showClose:!0,message:"数据加载错误",type:"error"})})},boolFormat:function(e,t){return!0===e.failed?"是":"否"},handleSizeChange:function(e){this.loading=!0,this.pageSize=e,this.loadData()},handleCurrentChange:function(e){this.loading=!0,this.currentPage=e,this.loadData()},handleDetail:function(e,t){this.$message({showClose:!0,message:"查看日志详情"+e+" "+t,type:"info"})}},created:function(){this.loadData()}},o={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{"margin-top":"15px"}},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{"element-loading-text":"拼命加载中","element-loading-spinner":"el-icon-loading","element-loading-background":"rgba(0, 0, 0, 0.8)",data:e.lists,stripe:"",size:"small",border:""}},[a("el-table-column",{attrs:{type:"expand"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-form",{staticClass:"demo-table-expand",attrs:{"label-position":"left",inline:""}},[a("el-form-item",{attrs:{label:"日志编号:"}},[a("span",[e._v(e._s(t.row.id))])]),e._v(" "),a("el-form-item",{attrs:{label:"日志时间:"}},[a("span",[e._v(e._s(t.row.createTime))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作用户:"}},[a("span",[e._v(e._s(t.row.username))])]),e._v(" "),a("el-form-item",{attrs:{label:"请求IP地址:"}},[a("span",[e._v(e._s(t.row.ipAddress))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作模块:"}},[a("span",[e._v(e._s(t.row.moduleName))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作描述:"}},[a("span",[e._v(e._s(t.row.content))])]),e._v(" "),a("el-form-item",{attrs:{label:"处理耗时(ms):"}},[a("span",[e._v(e._s(t.row.elapseSeconds))])]),e._v(" "),a("el-form-item",{attrs:{label:"请求路径:"}},[a("span",[e._v(e._s(t.row.urlPath))])]),e._v(" "),a("el-form-item",{attrs:{label:"异常状态:"}},[a("span",[e._v(e._s(t.row.failed))])]),e._v(" "),a("el-form-item",{attrs:{label:""}},[a("span")]),e._v(" "),a("el-form-item",{attrs:{label:"异常日志:"}},[a("el-input",{staticStyle:{"font-size":"12px",width:"700px"},attrs:{type:"textarea",autosize:{minRows:2,maxRows:5}},model:{value:t.row.exception,callback:function(a){e.$set(t.row,"exception",a)},expression:"props.row.exception"}})],1)],1)]}}])}),e._v(" "),a("el-table-column",{attrs:{prop:"createTime",label:"日志时间","min-width":"15%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"username",label:"操作用户","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"ipAddress",label:"请求IP","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"moduleName",label:"操作类型","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"elapseSeconds",label:"耗时(ms)","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"urlPath",label:"请求路径","min-width":"20%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"failed",label:"异常",formatter:e.boolFormat,"min-width":"10%","show-overflow-tooltip":!0}})],1),e._v(" "),a("div",{staticClass:"page",attrs:{align:"right"}},[a("el-pagination",{attrs:{"current-page":e.currentPage,"page-sizes":[5,10,20,40],"page-size":e.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:e.totalCount},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}})],1)],1)},staticRenderFns:[]};var n=a("VU/8")(l,o,!1,function(e){a("sACR")},"data-v-5a0d71c9",null);t.default=n.exports},sACR:function(e,t){}});
|
||||
//# sourceMappingURL=11.f892b415a253bac53fa8.js.map
|
||||
webpackJsonp([10],{"0eSS":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var l={data:function(){return{loading:!0,lists:[],currentPage:1,pageSize:10,totalCount:0}},methods:{loadData:function(){var e=this;this.$http.get("/dbswitch/admin/api/v1/syslog/list/2/"+this.currentPage+"/"+this.pageSize).then(function(t){e.loading=!1,0===t.data.code?(e.currentPage=t.data.pagination.page,e.pageSize=t.data.pagination.size,e.totalCount=t.data.pagination.total,e.lists=t.data.data):alert("加载数据失败:"+t.data.message)},function(t){e.$message({showClose:!0,message:"数据加载错误",type:"error"})})},boolFormat:function(e,t){return!0===e.failed?"是":"否"},handleSizeChange:function(e){this.loading=!0,this.pageSize=e,this.loadData()},handleCurrentChange:function(e){this.loading=!0,this.currentPage=e,this.loadData()},handleDetail:function(e,t){this.$message({showClose:!0,message:"查看日志详情"+e+" "+t,type:"info"})}},created:function(){this.loadData()}},o={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticStyle:{"margin-top":"15px"}},[a("el-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],staticStyle:{width:"100%"},attrs:{"element-loading-text":"拼命加载中","element-loading-spinner":"el-icon-loading","element-loading-background":"rgba(0, 0, 0, 0.8)",data:e.lists,stripe:"",size:"small",border:""}},[a("el-table-column",{attrs:{type:"expand"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-form",{staticClass:"demo-table-expand",attrs:{"label-position":"left",inline:""}},[a("el-form-item",{attrs:{label:"日志编号:"}},[a("span",[e._v(e._s(t.row.id))])]),e._v(" "),a("el-form-item",{attrs:{label:"日志时间:"}},[a("span",[e._v(e._s(t.row.createTime))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作用户:"}},[a("span",[e._v(e._s(t.row.username))])]),e._v(" "),a("el-form-item",{attrs:{label:"请求IP地址:"}},[a("span",[e._v(e._s(t.row.ipAddress))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作模块:"}},[a("span",[e._v(e._s(t.row.moduleName))])]),e._v(" "),a("el-form-item",{attrs:{label:"操作描述:"}},[a("span",[e._v(e._s(t.row.content))])]),e._v(" "),a("el-form-item",{attrs:{label:"处理耗时(ms):"}},[a("span",[e._v(e._s(t.row.elapseSeconds))])]),e._v(" "),a("el-form-item",{attrs:{label:"请求路径:"}},[a("span",[e._v(e._s(t.row.urlPath))])]),e._v(" "),a("el-form-item",{attrs:{label:"异常状态:"}},[a("span",[e._v(e._s(t.row.failed))])]),e._v(" "),a("el-form-item",{attrs:{label:""}},[a("span")]),e._v(" "),a("el-form-item",{attrs:{label:"异常日志:"}},[a("el-input",{staticStyle:{"font-size":"12px",width:"700px"},attrs:{type:"textarea",autosize:{minRows:2,maxRows:5}},model:{value:t.row.exception,callback:function(a){e.$set(t.row,"exception",a)},expression:"props.row.exception"}})],1)],1)]}}])}),e._v(" "),a("el-table-column",{attrs:{prop:"createTime",label:"日志时间","min-width":"15%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"username",label:"操作用户","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"ipAddress",label:"请求IP","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"moduleName",label:"操作类型","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"elapseSeconds",label:"耗时(ms)","min-width":"10%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"urlPath",label:"请求路径","min-width":"20%","show-overflow-tooltip":!0}}),e._v(" "),a("el-table-column",{attrs:{prop:"failed",label:"异常",formatter:e.boolFormat,"min-width":"10%","show-overflow-tooltip":!0}})],1),e._v(" "),a("div",{staticClass:"page",attrs:{align:"right"}},[a("el-pagination",{attrs:{"current-page":e.currentPage,"page-sizes":[5,10,20,40],"page-size":e.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:e.totalCount},on:{"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}})],1)],1)},staticRenderFns:[]};var n=a("VU/8")(l,o,!1,function(e){a("sACR")},"data-v-5a0d71c9",null);t.default=n.exports},sACR:function(e,t){}});
|
||||
//# sourceMappingURL=10.ec3b8253b1c336df3447.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
|
||||
webpackJsonp([13],{"mKp/":function(t,a,e){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var s={data:function(){return{loading:!0,currentPage:1,pageSize:10,totalCount:0,allTaskAssignments:[],taskId:"请选择一个任务安排",jobTableData:[],jobScheduleTime:"",isActive:-1,array:[]}},methods:{loadAllTaskAssignments:function(){var t=this;this.$http({method:"GET",url:"/dbswitch/admin/api/v1/assignment/list/1/10000"}).then(function(a){0===a.data.code?t.allTaskAssignments=a.data.data:a.data.message&&alert("初始化任务安排信息失败:"+a.data.message)})},handleClose:function(){},handleSizeChange:function(t){this.loading=!0,this.pageSize=t,this.loadJobsData()},handleCurrentChange:function(t){this.loading=!0,this.currentPage=t,this.loadJobsData()},loadJobsData:function(){var t=this;this.$http.get("/dbswitch/admin/api/v1/ops/jobs/list/"+this.currentPage+"/"+this.pageSize+"?id="+this.taskId).then(function(a){0===a.data.code?(t.currentPage=a.data.pagination.page,t.pageSize=a.data.pagination.size,t.totalCount=a.data.pagination.total,t.jobTableData=a.data.data):a.data.message&&alert("查询JOB执行历史纪录失败,"+a.data.message)})},handleChooseClick:function(t,a){this.isActive=a,this.taskId=t,this.loadJobsData()},handleCancelJob:function(t){var a=this;this.$http.get("/dbswitch/admin/api/v1/ops/job/cancel?id="+t).then(function(t){0===t.data.code?(a.$message("停止JOB成功"),a.loadJobsData()):t.data.message&&alert("JOB停止失败,"+t.data.message)})}},created:function(){this.loadAllTaskAssignments()}},l={render:function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("div",[e("el-card",[e("div",{staticClass:"container"},[e("el-card",{staticClass:"box-card"},[e("div",{staticClass:"clearfix",attrs:{slot:"header"},slot:"header"},[e("span",[t._v("任务安排列表")])]),t._v(" "),e("div",{staticClass:"navsBox"},[e("ul",t._l(t.allTaskAssignments,function(a,s){return e("li",{key:s,class:{active:s==t.isActive},on:{click:function(e){return t.handleChooseClick(a.id,s)}}},[t._v("["+t._s(a.id)+"]"+t._s(a.name))])}),0)])]),t._v(" "),e("div",{staticClass:"contentBox"},[e("el-table",{attrs:{"header-cell-style":{background:"#eef1f6",color:"#606266"},data:t.jobTableData,size:"small",border:""}},[e("template",{slot:"empty"},[e("span",[t._v("单击左侧任务列表记录来查看作业调度记录")])]),t._v(" "),e("el-table-column",{attrs:{type:"expand"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-form",{staticClass:"demo-table-expand",attrs:{"label-position":"left",inline:""}},[e("el-form-item",{attrs:{label:"JOB编号:"}},[e("span",[t._v(t._s(a.row.jobId))])]),t._v(" "),e("el-form-item",{attrs:{label:"调度方式:"}},[e("span",[t._v(t._s(a.row.scheduleMode))])]),t._v(" "),e("el-form-item",{attrs:{label:"开始时间:"}},[e("span",[t._v(t._s(a.row.startTime))])]),t._v(" "),e("el-form-item",{attrs:{label:"结束时间:"}},[e("span",[t._v(t._s(a.row.finishTime))])]),t._v(" "),e("el-form-item",{attrs:{label:"执行状态:"}},[e("span",[t._v(t._s(a.row.jobStatus))])]),t._v(" "),e("el-form-item",{attrs:{label:"操作:"}},["1"==a.row.status?e("el-button",{attrs:{size:"small",type:"danger"},on:{click:function(e){return t.handleCancelJob(a.row.jobId)}}},[t._v("\n 停止\n ")]):t._e()],1),t._v(" "),e("el-form-item",{attrs:{label:"异常日志:"}},[e("el-input",{staticStyle:{"font-size":"12px",width:"700px"},attrs:{type:"textarea",autosize:{minRows:2,maxRows:5}},model:{value:a.row.errorLog,callback:function(e){t.$set(a.row,"errorLog",e)},expression:"props.row.errorLog"}})],1)],1)]}}])}),t._v(" "),e("el-table-column",{attrs:{property:"jobId",label:"ID",width:"60"}}),t._v(" "),e("el-table-column",{attrs:{property:"assignmentId",label:"任务ID",width:"80"}}),t._v(" "),e("el-table-column",{attrs:{property:"scheduleMode",label:"调度方式",width:"80"}}),t._v(" "),e("el-table-column",{attrs:{property:"startTime",label:"开始时间",width:"160"}}),t._v(" "),e("el-table-column",{attrs:{property:"finishTime",label:"结束时间",width:"160"}}),t._v(" "),e("el-table-column",{attrs:{property:"duration",label:"持续时长(s)",width:"100"}}),t._v(" "),e("el-table-column",{attrs:{property:"jobStatus",label:"执行状态",width:"100"}})],2),t._v(" "),e("div",{staticClass:"page",attrs:{align:"right"}},[e("el-pagination",{attrs:{"current-page":t.currentPage,"page-sizes":[5,10,20,40],"page-size":t.pageSize,layout:"total, sizes, prev, pager, next, jumper",total:t.totalCount},on:{"size-change":t.handleSizeChange,"current-change":t.handleCurrentChange}})],1)],1)],1)])],1)},staticRenderFns:[]};var n=e("VU/8")(s,l,!1,function(t){e("sSvd")},"data-v-315acdde",null);a.default=n.exports},sSvd:function(t,a){}});
|
||||
//# sourceMappingURL=13.a95a8fc1f81d32bcfc9c.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
webpackJsonp([17],{NHnr:function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=t("//Fk"),r=t.n(o),a=t("7+uW"),u={render:function(){var n=this.$createElement,e=this._self._c||n;return e("div",{staticClass:"body-wrapper"},[e("router-view")],1)},staticRenderFns:[]};var c=t("VU/8")({name:"App"},u,!1,function(n){t("Pibb")},"data-v-a97617c2",null).exports,i=t("/ocq");a.default.use(i.a);var l=new i.a({routes:[{path:"/",name:"首页",component:function(){return t.e(4).then(t.bind(null,"4er+"))},redirect:"/dashboard",children:[{path:"/dashboard",name:"概览",icon:"el-icon-menu",component:function(){return Promise.all([t.e(0),t.e(8)]).then(t.bind(null,"ARoL"))}},{path:"/connection",name:"连接管理",icon:"el-icon-s-order",component:function(){return Promise.all([t.e(0),t.e(10)]).then(t.bind(null,"qdtB"))}},{path:"/metadata",name:"数据目录",icon:"el-icon-coin",component:function(){return t.e(1).then(t.bind(null,"PJ2q"))}},{path:"/task",name:"任务管理",icon:"el-icon-s-tools",component:function(){return t.e(6).then(t.bind(null,"4KEO"))},children:[{path:"/task/assignment",name:"任务安排",icon:"el-icon-eleme",component:function(){return Promise.all([t.e(0),t.e(14)]).then(t.bind(null,"D0I9"))}},{path:"/task/schedule",name:"调度记录",icon:"el-icon-pie-chart",component:function(){return t.e(13).then(t.bind(null,"mKp/"))}}]},{path:"/log",name:"审计日志",icon:"el-icon-platform-eleme",component:function(){return t.e(7).then(t.bind(null,"QWih"))},children:[{path:"/log/access",name:"登录日志",icon:"el-icon-eleme",component:function(){return t.e(15).then(t.bind(null,"oQRv"))}},{path:"/log/action",name:"操作日志",icon:"el-icon-s-check",component:function(){return t.e(11).then(t.bind(null,"0eSS"))}}]},{path:"/about",name:"关于系统",icon:"el-icon-s-custom",component:function(){return t.e(2).then(t.bind(null,"m25N"))}},{path:"/user/personal",name:"个人中心",hidden:!0,component:function(){return t.e(3).then(t.bind(null,"uTKz"))}},{path:"/task/create",name:"创建任务",hidden:!0,component:function(){return Promise.all([t.e(0),t.e(12)]).then(t.bind(null,"/rCC"))}},{path:"/task/update",name:"修改任务",hidden:!0,component:function(){return Promise.all([t.e(0),t.e(9)]).then(t.bind(null,"txod"))}}]},{path:"/login",name:"登录",component:function(){return t.e(5).then(t.bind(null,"T+/8"))}}]}),p=t("mtWM"),s=t.n(p).a.create();s.interceptors.request.use(function(n){return n.url=""+n.url,n});var d=s,m=t("zL8q"),h=t.n(m),f=(t("muQq"),t("tvR6"),t("7Vno")),b=t.n(f),v=t("XLwt"),g=t.n(v);a.default.use(d),a.default.use(h.a),a.default.use(b.a),a.default.prototype.$http=d,a.default.config.productionTip=!1,a.default.prototype.$echarts=g.a,d.interceptors.request.use(function(n){var e=sessionStorage.getItem("token");return e&&(n.headers.Authorization="Bearer "+e),n},function(n){return r.a.reject(n)}),d.interceptors.response.use(function(n){return!n.data||401!==n.data.code&&403!==n.data.code&&404!==n.data.code||l.push({path:"/login"}),n},function(n){return console.log(n),r.a.reject(n.response)}),new a.default({el:"#app",router:l,components:{App:c},template:"<App/>"})},Pibb:function(n,e){},muQq:function(n,e){},tvR6:function(n,e){}},["NHnr"]);
|
||||
//# sourceMappingURL=app.418d956a43293c6e0efb.js.map
|
||||
webpackJsonp([17],{NHnr:function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=t("//Fk"),r=t.n(o),a=t("7+uW"),u={render:function(){var n=this.$createElement,e=this._self._c||n;return e("div",{staticClass:"body-wrapper"},[e("router-view")],1)},staticRenderFns:[]};var c=t("VU/8")({name:"App"},u,!1,function(n){t("Pibb")},"data-v-a97617c2",null).exports,i=t("/ocq");a.default.use(i.a);var l=new i.a({routes:[{path:"/",name:"首页",component:function(){return t.e(4).then(t.bind(null,"4er+"))},redirect:"/dashboard",children:[{path:"/dashboard",name:"概览",icon:"el-icon-menu",component:function(){return Promise.all([t.e(0),t.e(8)]).then(t.bind(null,"ARoL"))}},{path:"/connection",name:"连接管理",icon:"el-icon-s-order",component:function(){return Promise.all([t.e(0),t.e(12)]).then(t.bind(null,"qdtB"))}},{path:"/metadata",name:"数据目录",icon:"el-icon-coin",component:function(){return t.e(1).then(t.bind(null,"PJ2q"))}},{path:"/task",name:"任务管理",icon:"el-icon-s-tools",component:function(){return t.e(6).then(t.bind(null,"4KEO"))},children:[{path:"/task/assignment",name:"任务安排",icon:"el-icon-eleme",component:function(){return Promise.all([t.e(0),t.e(14)]).then(t.bind(null,"D0I9"))}},{path:"/task/schedule",name:"调度记录",icon:"el-icon-pie-chart",component:function(){return t.e(13).then(t.bind(null,"mKp/"))}}]},{path:"/log",name:"审计日志",icon:"el-icon-platform-eleme",component:function(){return t.e(7).then(t.bind(null,"QWih"))},children:[{path:"/log/access",name:"登录日志",icon:"el-icon-eleme",component:function(){return t.e(15).then(t.bind(null,"oQRv"))}},{path:"/log/action",name:"操作日志",icon:"el-icon-s-check",component:function(){return t.e(10).then(t.bind(null,"0eSS"))}}]},{path:"/about",name:"关于系统",icon:"el-icon-s-custom",component:function(){return t.e(2).then(t.bind(null,"m25N"))}},{path:"/user/personal",name:"个人中心",hidden:!0,component:function(){return t.e(3).then(t.bind(null,"uTKz"))}},{path:"/task/create",name:"创建任务",hidden:!0,component:function(){return Promise.all([t.e(0),t.e(11)]).then(t.bind(null,"/rCC"))}},{path:"/task/update",name:"修改任务",hidden:!0,component:function(){return Promise.all([t.e(0),t.e(9)]).then(t.bind(null,"txod"))}}]},{path:"/login",name:"登录",component:function(){return t.e(5).then(t.bind(null,"T+/8"))}}]}),p=t("mtWM"),s=t.n(p).a.create();s.interceptors.request.use(function(n){return n.url=""+n.url,n});var d=s,m=t("zL8q"),h=t.n(m),f=(t("muQq"),t("tvR6"),t("7Vno")),b=t.n(f),v=t("XLwt"),g=t.n(v);a.default.use(d),a.default.use(h.a),a.default.use(b.a),a.default.prototype.$http=d,a.default.config.productionTip=!1,a.default.prototype.$echarts=g.a,d.interceptors.request.use(function(n){var e=sessionStorage.getItem("token");return e&&(n.headers.Authorization="Bearer "+e),n},function(n){return r.a.reject(n)}),d.interceptors.response.use(function(n){return!n.data||401!==n.data.code&&403!==n.data.code&&404!==n.data.code||l.push({path:"/login"}),n},function(n){return console.log(n),r.a.reject(n.response)}),new a.default({el:"#app",router:l,components:{App:c},template:"<App/>"})},Pibb:function(n,e){},muQq:function(n,e){},tvR6:function(n,e){}},["NHnr"]);
|
||||
//# sourceMappingURL=app.2dd7015ae4fe3dd7fe2e.js.map
|
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
||||
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,o,c){for(var f,d,i,u=0,s=[];u<r.length;u++)d=r[u],t[d]&&s.push(t[d][0]),t[d]=0;for(f in o)Object.prototype.hasOwnProperty.call(o,f)&&(e[f]=o[f]);for(n&&n(r,o,c);s.length;)s.shift()();if(c)for(u=0;u<c.length;u++)i=a(a.s=c[u]);return i};var r={},t={18:0};function a(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,a){n=t[e]=[r,a]});n[2]=r;var o=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,a.nc&&c.setAttribute("nonce",a.nc),c.src=a.p+"static/js/"+e+"."+{0:"ca67e87d8c000a42e592",1:"bd90a7e98064156140b6",2:"45757fdd22b0c905f12a",3:"d4c1dc7b68edb49b61d2",4:"c4abd62fbe15189d37a5",5:"837a4a67f1fcf6ee6c6a",6:"7f56c2238fb7e4ee2ecd",7:"d5dc80a855f66a3208ff",8:"2bf951413fb931374230",9:"729e286f79df81fea7d3",10:"ec3b8253b1c336df3447",11:"698a50794af7c9a68ca6",12:"5d3ab6a26a8047df4873",13:"eaa4da512adb13b7d4fd",14:"cadc6af4835efe7c42e4",15:"dec790aca8fa0a8e930a"}[e]+".js";var f=setTimeout(d,12e4);function d(){c.onerror=c.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return c.onerror=c.onload=d,o.appendChild(c),r},a.m=e,a.c=r,a.d=function(e,n,r){a.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="/",a.oe=function(e){throw console.error(e),e}}([]);
|
||||
//# sourceMappingURL=manifest.80c42f725fd3b643f80d.js.map
|
File diff suppressed because one or more lines are too long
@@ -1,2 +0,0 @@
|
||||
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,o){for(var f,d,i,u=0,s=[];u<r.length;u++)d=r[u],t[d]&&s.push(t[d][0]),t[d]=0;for(f in c)Object.prototype.hasOwnProperty.call(c,f)&&(e[f]=c[f]);for(n&&n(r,c,o);s.length;)s.shift()();if(o)for(u=0;u<o.length;u++)i=a(a.s=o[u]);return i};var r={},t={18:0};function a(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,a){n=t[e]=[r,a]});n[2]=r;var c=document.getElementsByTagName("head")[0],o=document.createElement("script");o.type="text/javascript",o.charset="utf-8",o.async=!0,o.timeout=12e4,a.nc&&o.setAttribute("nonce",a.nc),o.src=a.p+"static/js/"+e+"."+{0:"ca67e87d8c000a42e592",1:"e3d4daa7d15a531ade81",2:"45757fdd22b0c905f12a",3:"d4c1dc7b68edb49b61d2",4:"c4abd62fbe15189d37a5",5:"837a4a67f1fcf6ee6c6a",6:"7f56c2238fb7e4ee2ecd",7:"d5dc80a855f66a3208ff",8:"07c5486141568381ea3e",9:"729e286f79df81fea7d3",10:"f5b649582844e192d384",11:"f892b415a253bac53fa8",12:"de5a454fa0c65c9c60a4",13:"a95a8fc1f81d32bcfc9c",14:"cadc6af4835efe7c42e4",15:"dec790aca8fa0a8e930a"}[e]+".js";var f=setTimeout(d,12e4);function d(){o.onerror=o.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return o.onerror=o.onload=d,c.appendChild(o),r},a.m=e,a.c=r,a.d=function(e,n,r){a.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="/",a.oe=function(e){throw console.error(e),e}}([]);
|
||||
//# sourceMappingURL=manifest.cbc4b16180a8bf2afd41.js.map
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-common</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-core</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-data</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-dbchange</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-dbcommon</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-dbsynch</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-dbwriter</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-pgwriter</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>dbswitch-sql</artifactId>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>package-tool</artifactId>
|
||||
|
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.gitee.dbswitch</groupId>
|
||||
<artifactId>dbswitch-parent</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<version>1.6.8</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>dbswitch</name>
|
||||
<description>database switch project</description>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
@echo off
|
||||
|
||||
set APP_VERSION=1.6.7
|
||||
set APP_VERSION=1.6.8
|
||||
|
||||
echo "Clean Project ..."
|
||||
call mvn clean -f pom.xml
|
||||
|
Reference in New Issue
Block a user