Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
zhu
dataease
Commits
d3b15391
提交
d3b15391
authored
2月 20, 2021
作者:
taojinlong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
datasource
上级
ce527d00
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
463 行增加
和
22 行删除
+463
-22
Datasource.java
...end/src/main/java/io/dataease/base/domain/Datasource.java
+24
-0
DatasourceExample.java
.../main/java/io/dataease/base/domain/DatasourceExample.java
+0
-0
DatasourceMapper.java
...c/main/java/io/dataease/base/mapper/DatasourceMapper.java
+37
-0
DatasourceMapper.xml
...rc/main/java/io/dataease/base/mapper/DatasourceMapper.xml
+0
-0
WebSocketConfig.java
...end/src/main/java/io/dataease/config/WebSocketConfig.java
+0
-15
DatasourceTypes.java
...ava/io/dataease/datasource/constants/DatasourceTypes.java
+5
-0
DatasourceController.java
.../dataease/datasource/controller/DatasourceController.java
+51
-0
MysqlConfigrationDTO.java
...java/io/dataease/datasource/dto/MysqlConfigrationDTO.java
+25
-0
DatasourceProvider.java
...a/io/dataease/datasource/provider/DatasourceProvider.java
+47
-0
JdbcProvider.java
...in/java/io/dataease/datasource/provider/JdbcProvider.java
+105
-0
ProviderFactory.java
...java/io/dataease/datasource/provider/ProviderFactory.java
+33
-0
DatasourceService.java
...ava/io/dataease/datasource/service/DatasourceService.java
+67
-0
V6__datasource.sql
backend/src/main/resources/db/migration/V6__datasource.sql
+10
-0
generatorConfig.xml
backend/src/main/resources/generatorConfig.xml
+2
-5
router.js
frontend/src/business/components/settings/router.js
+5
-0
Datasource.vue
...nd/src/business/components/settings/system/Datasource.vue
+0
-0
zh-CN.js
frontend/src/i18n/zh-CN.js
+52
-2
没有找到文件。
backend/src/main/java/io/dataease/base/domain/Datasource.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
base
.
domain
;
import
java.io.Serializable
;
import
lombok.Data
;
@Data
public
class
Datasource
implements
Serializable
{
private
String
id
;
private
String
name
;
private
String
desc
;
private
String
type
;
private
Long
createTime
;
private
Long
updateTime
;
private
String
configuration
;
private
static
final
long
serialVersionUID
=
1L
;
}
\ No newline at end of file
backend/src/main/java/io/dataease/base/domain/DatasourceExample.java
0 → 100644
浏览文件 @
d3b15391
差异被折叠。
点击展开。
backend/src/main/java/io/dataease/base/mapper/DatasourceMapper.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
base
.
mapper
;
import
io.dataease.base.domain.Datasource
;
import
io.dataease.base.domain.DatasourceExample
;
import
java.util.List
;
import
org.apache.ibatis.annotations.Param
;
public
interface
DatasourceMapper
{
long
countByExample
(
DatasourceExample
example
);
int
deleteByExample
(
DatasourceExample
example
);
int
deleteByPrimaryKey
(
String
id
);
int
insert
(
Datasource
record
);
int
insertSelective
(
Datasource
record
);
List
<
Datasource
>
selectByExampleWithBLOBs
(
DatasourceExample
example
);
List
<
Datasource
>
selectByExample
(
DatasourceExample
example
);
Datasource
selectByPrimaryKey
(
String
id
);
int
updateByExampleSelective
(
@Param
(
"record"
)
Datasource
record
,
@Param
(
"example"
)
DatasourceExample
example
);
int
updateByExampleWithBLOBs
(
@Param
(
"record"
)
Datasource
record
,
@Param
(
"example"
)
DatasourceExample
example
);
int
updateByExample
(
@Param
(
"record"
)
Datasource
record
,
@Param
(
"example"
)
DatasourceExample
example
);
int
updateByPrimaryKeySelective
(
Datasource
record
);
int
updateByPrimaryKeyWithBLOBs
(
Datasource
record
);
int
updateByPrimaryKey
(
Datasource
record
);
}
\ No newline at end of file
backend/src/main/java/io/dataease/base/mapper/DatasourceMapper.xml
0 → 100644
浏览文件 @
d3b15391
差异被折叠。
点击展开。
backend/src/main/java/io/dataease/config/WebSocketConfig.java
deleted
100644 → 0
浏览文件 @
ce527d00
package
io
.
dataease
.
config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.socket.server.standard.ServerEndpointExporter
;
@Configuration
public
class
WebSocketConfig
{
@Bean
public
ServerEndpointExporter
serverEndpointExporter
()
{
return
new
ServerEndpointExporter
();
}
}
backend/src/main/java/io/dataease/datasource/constants/DatasourceTypes.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
datasource
.
constants
;
public
enum
DatasourceTypes
{
mysql
}
backend/src/main/java/io/dataease/datasource/controller/DatasourceController.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
datasource
.
controller
;
import
com.github.pagehelper.Page
;
import
com.github.pagehelper.PageHelper
;
import
io.dataease.base.domain.Datasource
;
import
io.dataease.commons.utils.PageUtils
;
import
io.dataease.commons.utils.Pager
;
import
io.dataease.datasource.service.DatasourceService
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.List
;
@RequestMapping
(
"datasource"
)
@RestController
public
class
DatasourceController
{
@Resource
private
DatasourceService
datasourceService
;
@PostMapping
(
"/add"
)
public
Datasource
addDatasource
(
@RequestBody
Datasource
Datasource
)
{
return
datasourceService
.
addDatasource
(
Datasource
);
}
@PostMapping
(
"/validate"
)
public
void
validate
(
@RequestBody
Datasource
Datasource
)
throws
Exception
{
datasourceService
.
validate
(
Datasource
);
}
@GetMapping
(
"/list"
)
public
List
<
Datasource
>
getDatasourceList
()
throws
Exception
{
return
datasourceService
.
getDatasourceList
(
new
Datasource
());
}
@PostMapping
(
"/list/{goPage}/{pageSize}"
)
public
Pager
<
List
<
Datasource
>>
getDatasourceList
(
@RequestBody
Datasource
request
,
@PathVariable
int
goPage
,
@PathVariable
int
pageSize
)
throws
Exception
{
Page
<
Object
>
page
=
PageHelper
.
startPage
(
goPage
,
pageSize
,
true
);
return
PageUtils
.
setPageInfo
(
page
,
datasourceService
.
getDatasourceList
(
request
));
}
@GetMapping
(
"/delete/{datasourceID}"
)
public
void
deleteDatasource
(
@PathVariable
(
value
=
"datasourceID"
)
String
datasourceID
)
{
datasourceService
.
deleteDatasource
(
datasourceID
);
}
@PostMapping
(
"/update"
)
public
void
updateDatasource
(
@RequestBody
Datasource
Datasource
)
{
datasourceService
.
updateDatasource
(
Datasource
);
}
}
backend/src/main/java/io/dataease/datasource/dto/MysqlConfigrationDTO.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
datasource
.
dto
;
import
lombok.Getter
;
import
lombok.Setter
;
import
org.apache.commons.lang3.StringUtils
;
@Getter
@Setter
public
class
MysqlConfigrationDTO
{
private
String
host
;
private
Integer
port
;
private
String
username
;
private
String
password
;
private
String
jdbc
;
private
String
dataBase
;
private
String
driver
=
"com.mysql.cj.jdbc.Driver"
;
public
String
getJdbc
(){
if
(
StringUtils
.
isNotEmpty
(
jdbc
)){
return
jdbc
;
}
else
{
return
"jdbc:mysql://HOSTNAME:PORT/DATABASE"
.
replace
(
"HOSTNAME"
,
host
).
replace
(
"PORT"
,
port
.
toString
()).
replace
(
"DATABASE"
,
dataBase
);
}
}
}
backend/src/main/java/io/dataease/datasource/provider/DatasourceProvider.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
datasource
.
provider
;
import
java.util.List
;
public
abstract
class
DatasourceProvider
{
protected
String
dataSourceConfigration
;
protected
String
type
;
public
String
getQuery
()
{
return
query
;
}
public
void
setQuery
(
String
query
)
{
this
.
query
=
query
;
}
protected
String
query
;
private
int
resultLimit
=
30000
;
public
String
getDataSourceConfigration
()
{
return
dataSourceConfigration
;
}
public
void
setDataSourceConfigration
(
String
dataSourceConfigration
)
{
this
.
dataSourceConfigration
=
dataSourceConfigration
;
}
public
String
getType
()
{
return
type
;
}
public
void
setType
(
String
type
)
{
this
.
type
=
type
;
}
abstract
public
List
<
String
[]>
getData
()
throws
Exception
;
abstract
public
List
<
String
>
getTables
()
throws
Exception
;
public
void
test
()
throws
Exception
{
getData
();
}
}
backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
datasource
.
provider
;
import
com.google.gson.Gson
;
import
io.dataease.datasource.constants.DatasourceTypes
;
import
io.dataease.datasource.dto.MysqlConfigrationDTO
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
java.sql.*
;
import
java.util.ArrayList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
io.dataease.datasource.constants.DatasourceTypes.*
;
import
java.util.Properties
;
@Service
(
"jdbc"
)
public
class
JdbcProvider
extends
DatasourceProvider
{
@Override
public
List
<
String
[]>
getData
()
throws
Exception
{
List
<
String
[]>
list
=
new
LinkedList
<>();
try
(
Connection
connection
=
getConnection
();
Statement
stat
=
connection
.
createStatement
();
ResultSet
rs
=
stat
.
executeQuery
(
getQuery
())
)
{
ResultSetMetaData
metaData
=
rs
.
getMetaData
();
int
columnCount
=
metaData
.
getColumnCount
();
while
(
rs
.
next
())
{
String
[]
row
=
new
String
[
columnCount
];
for
(
int
j
=
0
;
j
<
columnCount
;
j
++)
{
int
columType
=
metaData
.
getColumnType
(
j
+
1
);
switch
(
columType
)
{
case
java
.
sql
.
Types
.
DATE
:
row
[
j
]
=
rs
.
getDate
(
j
+
1
).
toString
();
break
;
default
:
row
[
j
]
=
rs
.
getString
(
j
+
1
);
break
;
}
}
list
.
add
(
row
);
}
}
catch
(
Exception
e
)
{
throw
new
Exception
(
"ERROR:"
+
e
.
getMessage
(),
e
);
}
return
list
;
}
@Override
public
List
<
String
>
getTables
()
throws
Exception
{
List
<
String
>
tables
=
new
ArrayList
<>();
String
queryStr
=
"show tables"
;
try
(
Connection
con
=
getConnection
();
Statement
ps
=
con
.
createStatement
())
{
ResultSet
resultSet
=
ps
.
executeQuery
(
queryStr
);
while
(
resultSet
.
next
()){
tables
.
add
(
resultSet
.
getString
(
1
));
}
}
catch
(
Exception
e
)
{
throw
new
Exception
(
"ERROR: "
+
e
.
getMessage
(),
e
);
}
return
tables
;
}
@Override
public
void
test
()
throws
Exception
{
String
queryStr
=
"show tables"
;
try
(
Connection
con
=
getConnection
();
Statement
ps
=
con
.
createStatement
())
{
ResultSet
resultSet
=
ps
.
executeQuery
(
queryStr
);
}
catch
(
Exception
e
)
{
throw
new
Exception
(
"ERROR: "
+
e
.
getMessage
(),
e
);
}
}
private
Connection
getConnection
()
throws
Exception
{
String
username
=
null
;
String
password
=
null
;
String
driver
=
null
;
String
jdbcurl
=
null
;
DatasourceTypes
datasourceType
=
DatasourceTypes
.
valueOf
(
getType
());
switch
(
datasourceType
){
case
mysql:
MysqlConfigrationDTO
mysqlConfigrationDTO
=
new
Gson
().
fromJson
(
getDataSourceConfigration
(),
MysqlConfigrationDTO
.
class
);
username
=
mysqlConfigrationDTO
.
getUsername
();
password
=
mysqlConfigrationDTO
.
getPassword
();
driver
=
mysqlConfigrationDTO
.
getDriver
();
jdbcurl
=
mysqlConfigrationDTO
.
getJdbc
();
break
;
default
:
break
;
}
Class
.
forName
(
driver
);
Properties
props
=
new
Properties
();
props
.
setProperty
(
"user"
,
username
);
if
(
StringUtils
.
isNotBlank
(
password
))
{
props
.
setProperty
(
"password"
,
password
);
}
return
DriverManager
.
getConnection
(
jdbcurl
,
props
);
}
}
backend/src/main/java/io/dataease/datasource/provider/ProviderFactory.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
datasource
.
provider
;
import
io.dataease.datasource.constants.DatasourceTypes
;
import
org.springframework.beans.BeansException
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.stereotype.Component
;
@Component
public
class
ProviderFactory
implements
ApplicationContextAware
{
private
static
ApplicationContext
context
;
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
this
.
context
=
applicationContext
;
}
public
static
DatasourceProvider
getProvider
(
String
type
){
DatasourceTypes
datasourceType
=
DatasourceTypes
.
valueOf
(
type
);
switch
(
datasourceType
){
case
mysql:
return
context
.
getBean
(
"jdbc"
,
DatasourceProvider
.
class
);
default
:
return
context
.
getBean
(
"jdbc"
,
DatasourceProvider
.
class
);
}
}
}
backend/src/main/java/io/dataease/datasource/service/DatasourceService.java
0 → 100644
浏览文件 @
d3b15391
package
io
.
dataease
.
datasource
.
service
;
import
com.google.gson.Gson
;
import
io.dataease.base.domain.*
;
import
io.dataease.base.mapper.*
;
import
io.dataease.datasource.dto.MysqlConfigrationDTO
;
import
io.dataease.datasource.provider.DatasourceProvider
;
import
io.dataease.datasource.provider.JdbcProvider
;
import
io.dataease.datasource.provider.ProviderFactory
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
@Service
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
class
DatasourceService
{
@Resource
private
DatasourceMapper
datasourceMapper
;
public
Datasource
addDatasource
(
Datasource
datasource
)
{
long
currentTimeMillis
=
System
.
currentTimeMillis
();
datasource
.
setId
(
UUID
.
randomUUID
().
toString
());
datasource
.
setUpdateTime
(
currentTimeMillis
);
datasource
.
setCreateTime
(
currentTimeMillis
);
datasourceMapper
.
insertSelective
(
datasource
);
return
datasource
;
}
public
List
<
Datasource
>
getDatasourceList
(
Datasource
request
)
throws
Exception
{
DatasourceExample
example
=
new
DatasourceExample
();
DatasourceExample
.
Criteria
criteria
=
example
.
createCriteria
();
if
(
StringUtils
.
isNotBlank
(
request
.
getName
()))
{
criteria
.
andNameLike
(
StringUtils
.
wrapIfMissing
(
request
.
getName
(),
"%"
));
}
if
(
StringUtils
.
isNotBlank
(
request
.
getType
()))
{
criteria
.
andTypeEqualTo
(
request
.
getType
());
}
example
.
setOrderByClause
(
"update_time desc"
);
return
datasourceMapper
.
selectByExample
(
example
);
}
public
void
deleteDatasource
(
String
datasourceId
)
{
datasourceMapper
.
deleteByPrimaryKey
(
datasourceId
);
}
public
void
updateDatasource
(
Datasource
datasource
)
{
datasource
.
setCreateTime
(
null
);
datasource
.
setUpdateTime
(
System
.
currentTimeMillis
());
datasourceMapper
.
updateByPrimaryKeySelective
(
datasource
);
}
public
void
validate
(
Datasource
datasource
)
throws
Exception
{
DatasourceProvider
datasourceProvider
=
ProviderFactory
.
getProvider
(
datasource
.
getType
());
datasourceProvider
.
setDataSourceConfigration
(
datasource
.
getConfiguration
());
datasourceProvider
.
test
();
}
}
backend/src/main/resources/db/migration/V6__datasource.sql
0 → 100644
浏览文件 @
d3b15391
CREATE
TABLE
`datasource`
(
`id`
varchar
(
50
)
NOT
NULL
DEFAULT
''
COMMENT
'ID'
,
`name`
varchar
(
50
)
NOT
NULL
COMMENT
'名称'
,
`desc`
varchar
(
50
)
NOT
NULL
COMMENT
'描述'
,
`type`
varchar
(
50
)
NOT
NULL
COMMENT
'类型'
,
`configuration`
longtext
NOT
NULL
COMMENT
'详细信息'
,
`create_time`
bigint
(
13
)
NOT
NULL
COMMENT
'Create timestamp'
,
`update_time`
bigint
(
13
)
NOT
NULL
COMMENT
'Update timestamp'
,
PRIMARY
KEY
(
`id`
)
)
backend/src/main/resources/generatorConfig.xml
浏览文件 @
d3b15391
...
@@ -64,11 +64,8 @@
...
@@ -64,11 +64,8 @@
<!--要生成的数据库表 -->
<!--要生成的数据库表 -->
<table
tableName=
"auth_source"
/>
<table
tableName=
"datasource"
/>
<table
tableName=
"swagger_url_project"
/>
<!--<table tableName="test_plan_api_scenario"/>-->
<!--<table tableName="test_plan"/>-->
<!--<table tableName="api_scenario_report"/>-->
</context>
</context>
</generatorConfiguration>
</generatorConfiguration>
frontend/src/business/components/settings/router.js
浏览文件 @
d3b15391
...
@@ -7,6 +7,11 @@ export default {
...
@@ -7,6 +7,11 @@ export default {
content
:
()
=>
import
(
'@/business/components/settings/Setting'
)
content
:
()
=>
import
(
'@/business/components/settings/Setting'
)
},
},
children
:
[
children
:
[
{
path
:
'datasource'
,
component
:
()
=>
import
(
'@/business/components/settings/system/Datasource'
),
meta
:
{
system
:
true
,
title
:
'commons.datasource'
}
},
{
{
path
:
'user'
,
path
:
'user'
,
component
:
()
=>
import
(
'@/business/components/settings/system/User'
),
component
:
()
=>
import
(
'@/business/components/settings/system/User'
),
...
...
frontend/src/business/components/settings/system/Datasource.vue
0 → 100644
浏览文件 @
d3b15391
差异被折叠。
点击展开。
frontend/src/i18n/zh-CN.js
浏览文件 @
d3b15391
...
@@ -192,7 +192,8 @@ export default {
...
@@ -192,7 +192,8 @@ export default {
module
:
{
module
:
{
select_module
:
"选择模块"
,
select_module
:
"选择模块"
,
default_module
:
"默认模块"
,
default_module
:
"默认模块"
,
}
},
datasource
:
'数据连接'
},
},
license
:
{
license
:
{
title
:
'授权管理'
,
title
:
'授权管理'
,
...
@@ -1521,5 +1522,54 @@ export default {
...
@@ -1521,5 +1522,54 @@ export default {
delete_prompt
:
'此操作会删除认证源,是否继续?'
,
delete_prompt
:
'此操作会删除认证源,是否继续?'
,
title
:
'认证设置'
,
title
:
'认证设置'
,
auth_name_valid
:
'名称不支持特殊字符'
,
auth_name_valid
:
'名称不支持特殊字符'
,
}
},
datasource
:
{
create
:
'新建数据连接'
,
type
:
'类型'
,
please_choose_type
:
'请选择数据源类型'
,
data_base
:
'数据库名称'
,
user_name
:
'用户名'
,
password
:
'密码'
,
host
:
'主机'
,
port
:
'端口'
,
please_input_data_base
:
'请输入数据库名称'
,
please_input_user_name
:
'请输入用户名'
,
please_input_password
:
'请输入密码'
,
please_input_host
:
'请输入主机'
,
please_input_port
:
'请输入端口'
,
modify
:
'修改组织'
,
delete
:
'删除组织'
,
delete_confirm
:
'删除该组织会关联删除该组织下的所有资源(如:相关工作空间,项目,测试用例等),确定要删除吗?'
,
input_name
:
'请输入名称'
,
input_desc
:
'请输入描述'
,
select_organization
:
'请选择组织'
,
search_by_name
:
'根据名称搜索'
,
special_characters_are_not_supported
:
'格式错误(不支持特殊字符,且不能以
\'
-
\'
开头结尾)'
,
none
:
'无组织'
,
select
:
'选择组织'
,
delete_warning
:
'删除该组织将同步删除该组织下所有相关工作空间和相关工作空间下的所有项目,以及项目中的所有用例、接口测试、性能测试等,确定要删除吗?'
,
service_integration
:
'服务集成'
,
defect_manage
:
'缺陷管理平台'
,
message_settings
:
'消息设置'
,
message
:
{
jenkins_task_notification
:
'Jenkins接口调用任务通知'
,
test_plan_task_notification
:
'测试计划任务通知'
,
test_review_task_notice
:
'测试评审任务通知'
,
create_new_notification
:
'创建新通知'
,
mail_template_example
:
'邮件模版'
,
robot_template
:
'机器人模版'
,
select_events
:
'选择事件'
,
defect_task_notification
:
'缺陷任务通知'
,
select_receiving_method
:
'选择接收方式'
,
mail
:
'邮件'
,
nail_robot
:
'钉钉机器人'
,
enterprise_wechat_robot
:
'企业微信机器人'
,
notes
:
'1.钉钉和企业群里新建一个自定义机器人,然后复制 webhook 地址在我们平台上;
\
n'
+
' 2.机器人选择为群机器人,安全验证选择“自定义关键词” :"任务通知";
\
n'
+
' 3.选择接收人时必须是你所建的群里包含的人,接收人手机号为必填项且为钉钉企业所使用的手机号,'
,
message
:
'事件,接收人,接收方式为必填项'
,
message_webhook
:
'接收方式为钉钉和企业机器人时,webhook为必填项'
,
template
:
"模版"
},
},
};
};
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论