...
|
...
|
@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; |
11
|
11
|
import org.thingsboard.server.common.data.yunteng.dto.TkDbConnectDTO;
|
12
|
12
|
import org.thingsboard.server.common.data.yunteng.dto.TkDbConnectSshDTO;
|
13
|
13
|
import org.thingsboard.server.common.data.yunteng.dto.TkDbConnectSslDTO;
|
|
14
|
+import org.thingsboard.server.common.data.yunteng.enums.DbConnectTypeEnum;
|
14
|
15
|
import org.thingsboard.server.dao.yunteng.service.BaseDbConnectService;
|
15
|
16
|
|
16
|
17
|
import javax.net.ssl.SSLContext;
|
...
|
...
|
@@ -23,11 +24,11 @@ import java.util.List; |
23
|
24
|
import java.util.Properties;
|
24
|
25
|
|
25
|
26
|
/**
|
26
|
|
- * mySql类型数据库连接查询
|
|
27
|
+ * 最终数据库连接查询
|
27
|
28
|
*/
|
28
|
|
-@Service("MySql")
|
29
|
29
|
@Slf4j
|
30
|
|
-public class MySqlDbConnectServiceImpl implements BaseDbConnectService {
|
|
30
|
+@Service("baseConnect")
|
|
31
|
+public class BaseDbConnectServiceImpl implements BaseDbConnectService {
|
31
|
32
|
|
32
|
33
|
private static SSLContext sslContext = null;
|
33
|
34
|
|
...
|
...
|
@@ -47,6 +48,11 @@ public class MySqlDbConnectServiceImpl implements BaseDbConnectService { |
47
|
48
|
}
|
48
|
49
|
|
49
|
50
|
private Object sshAndSslConnect(TkDbConnectDTO tkDbConnectDTO) {
|
|
51
|
+ // 只有mySql类型可以配置ssl通道
|
|
52
|
+ if (!DbConnectTypeEnum.MySql.equals(tkDbConnectDTO.getType())) {
|
|
53
|
+ return sshConnect(tkDbConnectDTO);
|
|
54
|
+ }
|
|
55
|
+
|
50
|
56
|
try {
|
51
|
57
|
// 1. 建立SSH隧道
|
52
|
58
|
int localPort = setupSSHTunnel(tkDbConnectDTO.getSsh(), tkDbConnectDTO);
|
...
|
...
|
@@ -56,9 +62,9 @@ public class MySqlDbConnectServiceImpl implements BaseDbConnectService { |
56
|
62
|
sslContext = createSSLContext(ssl.getClientCert(), ssl.getClientKey());
|
57
|
63
|
}
|
58
|
64
|
|
59
|
|
- String jdbcUrl = "jdbc:mysql://localhost:" + localPort + "/" + tkDbConnectDTO.getDbName() +
|
60
|
|
- "?useSSL=true" +
|
61
|
|
- "&requireSSL=true" +
|
|
65
|
+ String jdbcUrl = "jdbc:mysql://localhost:" +
|
|
66
|
+ localPort + "/" + tkDbConnectDTO.getDbName() +
|
|
67
|
+ "?useSSL=true" + "&requireSSL=true" +
|
62
|
68
|
"&verifyServerCertificate=" + ssl.isVerifyCaCert() +
|
63
|
69
|
"&enabledTLSProtocols=TLSv1.2,TLSv1.3";
|
64
|
70
|
tkDbConnectDTO.setUrl(jdbcUrl);
|
...
|
...
|
@@ -72,6 +78,11 @@ public class MySqlDbConnectServiceImpl implements BaseDbConnectService { |
72
|
78
|
}
|
73
|
79
|
|
74
|
80
|
private Object sslConnect(TkDbConnectDTO tkDbConnectDTO) {
|
|
81
|
+ // 只有mySql类型可以配置ssl通道
|
|
82
|
+ if (!DbConnectTypeEnum.MySql.equals(tkDbConnectDTO.getType())) {
|
|
83
|
+ return commonConnect(tkDbConnectDTO);
|
|
84
|
+ }
|
|
85
|
+
|
75
|
86
|
try {
|
76
|
87
|
TkDbConnectSslDTO ssl = tkDbConnectDTO.getSsl();
|
77
|
88
|
// 配置SSL
|
...
|
...
|
@@ -113,7 +124,22 @@ public class MySqlDbConnectServiceImpl implements BaseDbConnectService { |
113
|
124
|
try {
|
114
|
125
|
// 1. 建立SSH隧道
|
115
|
126
|
int localPort = setupSSHTunnel(tkDbConnectDTO.getSsh(), tkDbConnectDTO);
|
116
|
|
- tkDbConnectDTO.setUrl("jdbc:mysql://localhost:" + localPort + "/" + tkDbConnectDTO.getDbName());
|
|
127
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
128
|
+ if (DbConnectTypeEnum.MySql.equals(tkDbConnectDTO.getType())) {
|
|
129
|
+ stringBuilder.append("jdbc:mysql://localhost:")
|
|
130
|
+ .append(localPort).append("/").append(tkDbConnectDTO.getDbName());
|
|
131
|
+ } else if (DbConnectTypeEnum.Postgresql.equals(tkDbConnectDTO.getType())) {
|
|
132
|
+ stringBuilder.append("jdbc:postgresql://localhost:")
|
|
133
|
+ .append(localPort).append("/").append(tkDbConnectDTO.getDbName());
|
|
134
|
+ } else if (DbConnectTypeEnum.Oracle.equals(tkDbConnectDTO.getType())) {
|
|
135
|
+ stringBuilder.append("jdbc:oracle:thin:@//localhost:")
|
|
136
|
+ .append(localPort).append("/").append(tkDbConnectDTO.getDbName());
|
|
137
|
+ } else if (DbConnectTypeEnum.SQLServer.equals(tkDbConnectDTO.getType())) {
|
|
138
|
+ stringBuilder.append("jdbc:sqlserver://localhost:")
|
|
139
|
+ .append(localPort).append(";databaseName=").append(tkDbConnectDTO.getDbName());
|
|
140
|
+ }
|
|
141
|
+
|
|
142
|
+ tkDbConnectDTO.setUrl(stringBuilder.toString());
|
117
|
143
|
return commonConnect(tkDbConnectDTO);
|
118
|
144
|
} catch (Exception e) {
|
119
|
145
|
log.info("sshConnect occur error!", e);
|
...
|
...
|
@@ -158,7 +184,15 @@ public class MySqlDbConnectServiceImpl implements BaseDbConnectService { |
158
|
184
|
config.setJdbcUrl(tkDbConnectDTO.getUrl());
|
159
|
185
|
config.setUsername(tkDbConnectDTO.getUserName());
|
160
|
186
|
config.setPassword(tkDbConnectDTO.getPassword());
|
161
|
|
- config.setDriverClassName("com.mysql.cj.jdbc.Driver");
|
|
187
|
+ if (DbConnectTypeEnum.MySql.equals(tkDbConnectDTO.getType())) {
|
|
188
|
+ config.setDriverClassName("com.mysql.cj.jdbc.Driver");
|
|
189
|
+ } else if (DbConnectTypeEnum.Postgresql.equals(tkDbConnectDTO.getType())) {
|
|
190
|
+ config.setDriverClassName("org.postgresql.Driver");
|
|
191
|
+ } else if (DbConnectTypeEnum.Oracle.equals(tkDbConnectDTO.getType())) {
|
|
192
|
+ config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
|
|
193
|
+ } else if (DbConnectTypeEnum.SQLServer.equals(tkDbConnectDTO.getType())) {
|
|
194
|
+ config.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
|
|
195
|
+ }
|
162
|
196
|
|
163
|
197
|
// SSL配置
|
164
|
198
|
if (sslContext != null) {
|
...
|
...
|
|