Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小九先生
TDengine
提交
940b5653
TDengine
项目概览
小九先生
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
940b5653
编写于
6月 16, 2021
作者:
S
Shengliang Guan
提交者:
GitHub
6月 16, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #6500 from taosdata/fix/TD-4696
sync from develop to master
上级
bda6a93f
1e92fa7d
变更
10
显示空白变更内容
内联
并排
Showing
10 changed file
with
96 addition
and
47 deletion
+96
-47
cmake/install.inc
cmake/install.inc
+1
-1
src/connector/jdbc/CMakeLists.txt
src/connector/jdbc/CMakeLists.txt
+2
-4
src/connector/jdbc/deploy-pom.xml
src/connector/jdbc/deploy-pom.xml
+1
-1
src/connector/jdbc/pom.xml
src/connector/jdbc/pom.xml
+2
-1
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulConnection.java
...src/main/java/com/taosdata/jdbc/rs/RestfulConnection.java
+8
-1
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDriver.java
...dbc/src/main/java/com/taosdata/jdbc/rs/RestfulDriver.java
+4
-8
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
+3
-3
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/HttpClientPoolUtil.java
...main/java/com/taosdata/jdbc/utils/HttpClientPoolUtil.java
+15
-25
src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
...rc/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
+1
-3
src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/ConnectMultiTaosdByRestfulWithDifferentTokenTest.java
...ses/ConnectMultiTaosdByRestfulWithDifferentTokenTest.java
+59
-0
未找到文件。
cmake/install.inc
浏览文件 @
940b5653
...
...
@@ -32,7 +32,7 @@ ELSEIF (TD_WINDOWS)
#INSTALL(TARGETS taos RUNTIME DESTINATION driver)
#INSTALL(TARGETS shell RUNTIME DESTINATION .)
IF
(
TD_MVN_INSTALLED
)
INSTALL
(
FILES
$
{
LIBRARY_OUTPUT_PATH
}
/
taos
-
jdbcdriver
-
2.0.
29
.
jar
DESTINATION
connector
/
jdbc
)
INSTALL
(
FILES
$
{
LIBRARY_OUTPUT_PATH
}
/
taos
-
jdbcdriver
-
2.0.
31
.
jar
DESTINATION
connector
/
jdbc
)
ENDIF
()
ELSEIF
(
TD_DARWIN
)
SET
(
TD_MAKE_INSTALL_SH
"${TD_COMMUNITY_DIR}/packaging/tools/make_install.sh"
)
...
...
src/connector/jdbc/CMakeLists.txt
浏览文件 @
940b5653
...
...
@@ -8,10 +8,8 @@ IF (TD_MVN_INSTALLED)
ADD_CUSTOM_COMMAND
(
OUTPUT
${
JDBC_CMD_NAME
}
POST_BUILD
COMMAND mvn -Dmaven.test.skip=true install -f
${
CMAKE_CURRENT_SOURCE_DIR
}
/pom.xml
COMMAND
${
CMAKE_COMMAND
}
-E copy
${
CMAKE_CURRENT_SOURCE_DIR
}
/target/taos-jdbcdriver-2.0.
29
.jar
${
LIBRARY_OUTPUT_PATH
}
COMMAND
${
CMAKE_COMMAND
}
-E copy
${
CMAKE_CURRENT_SOURCE_DIR
}
/target/taos-jdbcdriver-2.0.
31
.jar
${
LIBRARY_OUTPUT_PATH
}
COMMAND mvn -Dmaven.test.skip=true clean -f
${
CMAKE_CURRENT_SOURCE_DIR
}
/pom.xml
COMMENT
"build jdbc driver"
)
ADD_CUSTOM_TARGET
(
${
JDBC_TARGET_NAME
}
ALL WORKING_DIRECTORY
${
EXECUTABLE_OUTPUT_PATH
}
DEPENDS
${
JDBC_CMD_NAME
}
)
ENDIF
()
\ No newline at end of file
src/connector/jdbc/deploy-pom.xml
浏览文件 @
940b5653
...
...
@@ -5,7 +5,7 @@
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
2.0.
29
</version>
<version>
2.0.
31
</version>
<packaging>
jar
</packaging>
<name>
JDBCDriver
</name>
...
...
src/connector/jdbc/pom.xml
浏览文件 @
940b5653
...
...
@@ -3,7 +3,7 @@
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.taosdata.jdbc
</groupId>
<artifactId>
taos-jdbcdriver
</artifactId>
<version>
2.0.
29
</version>
<version>
2.0.
31
</version>
<packaging>
jar
</packaging>
<name>
JDBCDriver
</name>
<url>
https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
</url>
...
...
@@ -123,6 +123,7 @@
<exclude>
**/InvalidResultSetPointerTest.java
</exclude>
<exclude>
**/RestfulConnectionTest.java
</exclude>
<exclude>
**/TD4144Test.java
</exclude>
<exclude>
**/ConnectMultiTaosdByRestfulWithDifferentTokenTest.java
</exclude>
</excludes>
<testFailureIgnore>
true
</testFailureIgnore>
</configuration>
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulConnection.java
浏览文件 @
940b5653
...
...
@@ -17,16 +17,18 @@ public class RestfulConnection extends AbstractConnection {
private
final
int
port
;
private
final
String
url
;
private
volatile
String
database
;
private
final
String
token
;
/******************************************************/
private
boolean
isClosed
;
private
final
DatabaseMetaData
metadata
;
public
RestfulConnection
(
String
host
,
String
port
,
Properties
props
,
String
database
,
String
url
)
{
public
RestfulConnection
(
String
host
,
String
port
,
Properties
props
,
String
database
,
String
url
,
String
token
)
{
super
(
props
);
this
.
host
=
host
;
this
.
port
=
Integer
.
parseInt
(
port
);
this
.
database
=
database
;
this
.
url
=
url
;
this
.
token
=
token
;
this
.
metadata
=
new
RestfulDatabaseMetaData
(
url
,
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_USER
),
this
);
}
...
...
@@ -66,6 +68,7 @@ public class RestfulConnection extends AbstractConnection {
return
this
.
metadata
;
}
// getters
public
String
getHost
()
{
return
host
;
}
...
...
@@ -81,4 +84,8 @@ public class RestfulConnection extends AbstractConnection {
public
String
getUrl
()
{
return
url
;
}
public
String
getToken
()
{
return
token
;
}
}
\ No newline at end of file
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDriver.java
浏览文件 @
940b5653
...
...
@@ -38,15 +38,11 @@ public class RestfulDriver extends AbstractDriver {
String
port
=
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_PORT
,
"6041"
);
String
database
=
props
.
containsKey
(
TSDBDriver
.
PROPERTY_KEY_DBNAME
)
?
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_DBNAME
)
:
null
;
String
loginUrl
=
"http://"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_HOST
)
+
":"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_PORT
)
+
"/rest/login/"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_USER
)
+
"/"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_PASSWORD
)
+
""
;
String
loginUrl
=
"http://"
+
host
+
":"
+
port
+
"/rest/login/"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_USER
)
+
"/"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_PASSWORD
)
+
""
;
try
{
String
user
=
URLEncoder
.
encode
(
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_USER
),
"UTF-8"
);
String
password
=
URLEncoder
.
encode
(
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_PASSWORD
),
"UTF-8"
);
loginUrl
=
"http://"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_HOST
)
+
":"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_PORT
)
+
"/rest/login/"
+
user
+
"/"
+
password
+
""
;
loginUrl
=
"http://"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_HOST
)
+
":"
+
props
.
getProperty
(
TSDBDriver
.
PROPERTY_KEY_PORT
)
+
"/rest/login/"
+
user
+
"/"
+
password
+
""
;
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -55,12 +51,12 @@ public class RestfulDriver extends AbstractDriver {
JSONObject
jsonResult
=
JSON
.
parseObject
(
result
);
String
status
=
jsonResult
.
getString
(
"status"
);
String
token
=
jsonResult
.
getString
(
"desc"
);
HttpClientPoolUtil
.
token
=
token
;
if
(!
status
.
equals
(
"succ"
))
{
throw
new
SQLException
(
jsonResult
.
getString
(
"desc"
));
}
RestfulConnection
conn
=
new
RestfulConnection
(
host
,
port
,
props
,
database
,
url
);
RestfulConnection
conn
=
new
RestfulConnection
(
host
,
port
,
props
,
database
,
url
,
token
);
if
(
database
!=
null
&&
!
database
.
trim
().
replaceAll
(
"\\s"
,
""
).
isEmpty
())
{
Statement
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"use "
+
database
);
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
浏览文件 @
940b5653
...
...
@@ -83,7 +83,7 @@ public class RestfulStatement extends AbstractStatement {
}
if
(
SqlSyntaxValidator
.
isUseSql
(
sql
))
{
HttpClientPoolUtil
.
execute
(
url
,
sql
);
HttpClientPoolUtil
.
execute
(
url
,
sql
,
this
.
conn
.
getToken
()
);
this
.
database
=
sql
.
trim
().
replace
(
"use"
,
""
).
trim
();
this
.
conn
.
setCatalog
(
this
.
database
);
result
=
false
;
...
...
@@ -116,7 +116,7 @@ public class RestfulStatement extends AbstractStatement {
if
(
"UTC"
.
equalsIgnoreCase
(
timestampFormat
))
url
=
"http://"
+
conn
.
getHost
()
+
":"
+
conn
.
getPort
()
+
"/rest/sqlutc"
;
String
result
=
HttpClientPoolUtil
.
execute
(
url
,
sql
);
String
result
=
HttpClientPoolUtil
.
execute
(
url
,
sql
,
this
.
conn
.
getToken
()
);
JSONObject
resultJson
=
JSON
.
parseObject
(
result
);
if
(
resultJson
.
getString
(
"status"
).
equals
(
"error"
))
{
throw
TSDBError
.
createSQLException
(
resultJson
.
getInteger
(
"code"
),
resultJson
.
getString
(
"desc"
));
...
...
@@ -130,7 +130,7 @@ public class RestfulStatement extends AbstractStatement {
if
(!
SqlSyntaxValidator
.
isValidForExecuteUpdate
(
sql
))
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_FOR_EXECUTE_UPDATE
,
"not a valid sql for executeUpdate: "
+
sql
);
String
result
=
HttpClientPoolUtil
.
execute
(
url
,
sql
);
String
result
=
HttpClientPoolUtil
.
execute
(
url
,
sql
,
this
.
conn
.
getToken
()
);
JSONObject
jsonObject
=
JSON
.
parseObject
(
result
);
if
(
jsonObject
.
getString
(
"status"
).
equals
(
"error"
))
{
throw
TSDBError
.
createSQLException
(
jsonObject
.
getInteger
(
"code"
),
jsonObject
.
getString
(
"desc"
));
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/HttpClientPoolUtil.java
浏览文件 @
940b5653
...
...
@@ -20,39 +20,29 @@ import java.nio.charset.Charset;
public
class
HttpClientPoolUtil
{
public
static
PoolingHttpClientConnectionManager
cm
=
null
;
public
static
CloseableHttpClient
httpClient
=
null
;
public
static
String
token
=
"cm9vdDp0YW9zZGF0YQ=="
;
/**
* 默认content 类型
*/
private
static
final
String
DEFAULT_CONTENT_TYPE
=
"application/json"
;
/**
* 默认请求超时时间30s
*/
private
static
final
String
DEFAULT_TOKEN
=
"cm9vdDp0YW9zZGF0YQ=="
;
private
static
final
int
DEFAULT_TIME_OUT
=
15000
;
private
static
final
int
count
=
32
;
private
static
final
int
totalCount
=
1000
;
private
static
final
int
Http_Default_Keep_Time
=
15000
;
private
static
final
int
DEFAULT_MAX_PER_ROUTE
=
32
;
private
static
final
int
DEFAULT_MAX_TOTAL
=
1000
;
private
static
final
int
DEFAULT_HTTP_KEEP_TIME
=
15000
;
private
static
PoolingHttpClientConnectionManager
connectionManager
;
private
static
CloseableHttpClient
httpClient
;
/**
* 初始化连接池
*/
private
static
synchronized
void
initPools
()
{
if
(
httpClient
==
null
)
{
c
m
=
new
PoolingHttpClientConnectionManager
();
c
m
.
setDefaultMaxPerRoute
(
count
);
c
m
.
setMaxTotal
(
totalCount
);
httpClient
=
HttpClients
.
custom
().
setKeepAliveStrategy
(
defaultStrategy
).
setConnectionManager
(
cm
).
build
();
c
onnectionManager
=
new
PoolingHttpClientConnectionManager
();
c
onnectionManager
.
setDefaultMaxPerRoute
(
DEFAULT_MAX_PER_ROUTE
);
c
onnectionManager
.
setMaxTotal
(
DEFAULT_MAX_TOTAL
);
httpClient
=
HttpClients
.
custom
().
setKeepAliveStrategy
(
DEFAULT_KEEP_ALIVE_STRATEGY
).
setConnectionManager
(
connectionManager
).
build
();
}
}
/**
* Http connection keepAlive 设置
*/
private
static
ConnectionKeepAliveStrategy
defaultStrategy
=
(
response
,
context
)
->
{
private
static
ConnectionKeepAliveStrategy
DEFAULT_KEEP_ALIVE_STRATEGY
=
(
response
,
context
)
->
{
HeaderElementIterator
it
=
new
BasicHeaderElementIterator
(
response
.
headerIterator
(
HTTP
.
CONN_KEEP_ALIVE
));
int
keepTime
=
Http_Default_Keep_Time
*
1000
;
int
keepTime
=
DEFAULT_HTTP_KEEP_TIME
*
1000
;
while
(
it
.
hasNext
())
{
HeaderElement
headerElement
=
it
.
nextElement
();
String
param
=
headerElement
.
getName
();
...
...
@@ -76,7 +66,7 @@ public class HttpClientPoolUtil {
* @param data 请求数据
* @return responseBody
*/
public
static
String
execute
(
String
uri
,
String
data
)
{
public
static
String
execute
(
String
uri
,
String
data
,
String
token
)
{
long
startTime
=
System
.
currentTimeMillis
();
HttpEntity
httpEntity
=
null
;
HttpEntityEnclosingRequestBase
method
=
null
;
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
浏览文件 @
940b5653
...
...
@@ -28,9 +28,7 @@ public class BatchInsertTest {
@Before
public
void
before
()
{
try
{
Class
.
forName
(
"com.taosdata.jdbc.TSDBDriver"
);
Properties
properties
=
new
Properties
();
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_HOST
,
host
);
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_CHARSET
,
"UTF-8"
);
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_LOCALE
,
"en_US.UTF-8"
);
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_TIME_ZONE
,
"UTC-8"
);
...
...
@@ -44,7 +42,7 @@ public class BatchInsertTest {
String
createTableSql
=
"create table "
+
stbName
+
"(ts timestamp, f1 int, f2 int, f3 int) tags(areaid int, loc binary(20))"
;
statement
.
executeUpdate
(
createTableSql
);
// create tables
for
(
int
i
=
0
;
i
<
numOfTables
;
i
++)
{
for
(
int
i
=
0
;
i
<
numOfTables
;
i
++)
{
String
loc
=
i
%
2
==
0
?
"beijing"
:
"shanghai"
;
String
createSubTalbesSql
=
"create table "
+
tablePrefix
+
i
+
" using "
+
stbName
+
" tags("
+
i
+
", '"
+
loc
+
"')"
;
statement
.
executeUpdate
(
createSubTalbesSql
);
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/ConnectMultiTaosdByRestfulWithDifferentTokenTest.java
0 → 100644
浏览文件 @
940b5653
package
com.taosdata.jdbc.cases
;
import
com.taosdata.jdbc.TSDBDriver
;
import
org.junit.Before
;
import
org.junit.Test
;
import
java.sql.*
;
import
java.util.Properties
;
public
class
ConnectMultiTaosdByRestfulWithDifferentTokenTest
{
private
static
String
host1
=
"192.168.17.156"
;
private
static
String
user1
=
"root"
;
private
static
String
password1
=
"tqueue"
;
private
Connection
conn1
;
private
static
String
host2
=
"192.168.17.82"
;
private
static
String
user2
=
"root"
;
private
static
String
password2
=
"taosdata"
;
private
Connection
conn2
;
@Test
public
void
test
()
{
//when
executeSelectStatus
(
conn1
);
executeSelectStatus
(
conn2
);
executeSelectStatus
(
conn1
);
}
private
void
executeSelectStatus
(
Connection
connection
)
{
try
(
Statement
stmt
=
connection
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select server_status()"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
while
(
rs
.
next
())
{
for
(
int
i
=
1
;
i
<=
meta
.
getColumnCount
();
i
++)
{
System
.
out
.
println
(
meta
.
getColumnLabel
(
i
)
+
": "
+
rs
.
getString
(
i
));
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@Before
public
void
before
()
{
Properties
properties
=
new
Properties
();
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_CHARSET
,
"UTF-8"
);
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_LOCALE
,
"en_US.UTF-8"
);
properties
.
setProperty
(
TSDBDriver
.
PROPERTY_KEY_TIME_ZONE
,
"UTC-8"
);
String
url1
=
"jdbc:TAOS-RS://"
+
host1
+
":6041/?user="
+
user1
+
"&password="
+
password1
;
String
url2
=
"jdbc:TAOS-RS://"
+
host2
+
":6041/?user="
+
user2
+
"&password="
+
password2
;
try
{
conn1
=
DriverManager
.
getConnection
(
url1
,
properties
);
conn2
=
DriverManager
.
getConnection
(
url2
,
properties
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录