1
1
package com .openblocks .plugin .mysql ;
2
2
3
- import static com .openblocks .sdk .exception .PluginCommonError .QUERY_EXECUTION_ERROR ;
4
3
import static org .apache .commons .lang3 .StringUtils .isNotBlank ;
5
4
6
- import java .time .Duration ;
7
- import java .util .HashSet ;
8
5
import java .util .Map ;
9
- import java .util .Set ;
10
- import java .util .concurrent .TimeUnit ;
11
- import java .util .function .Supplier ;
12
6
13
7
import javax .annotation .Nonnull ;
14
8
15
9
import org .apache .commons .lang3 .StringUtils ;
16
10
import org .pf4j .Extension ;
17
- import org .springframework .beans .factory .annotation .Autowired ;
18
11
19
- import com .openblocks .sdk .config .dynamic .ConfigCenter ;
20
- import com .openblocks .sdk .exception .PluginException ;
21
- import com .openblocks .sdk .models .DatasourceTestResult ;
22
- import com .openblocks .sdk .plugin .common .BlockingDatasourceConnector ;
23
- import com .openblocks .sdk .plugin .common .sql .HikariPerfWrapper ;
12
+ import com .openblocks .plugin .sql .SqlBasedConnector ;
13
+ import com .openblocks .sdk .plugin .common .sql .SqlBasedDatasourceConnectionConfig ;
24
14
import com .openblocks .sdk .plugin .mysql .MysqlDatasourceConfig ;
25
15
import com .zaxxer .hikari .HikariConfig ;
26
- import com .zaxxer .hikari .HikariDataSource ;
27
16
28
17
@ Extension
29
- public class MysqlConnector extends BlockingDatasourceConnector < HikariPerfWrapper , MysqlDatasourceConfig > {
18
+ public class MysqlConnector extends SqlBasedConnector {
30
19
31
20
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver" ;
32
- private static final long LEAK_DETECTION_THRESHOLD_MS = Duration .ofSeconds (30 ).toMillis ();
33
- private static final long MAX_LIFETIME_MS = TimeUnit .MINUTES .toMillis (30 );
34
- private static final long KEEPALIVE_TIME_MS = TimeUnit .MINUTES .toMillis (3 );
35
- private static final long CONNECTION_TIMEOUT_MS = TimeUnit .SECONDS .toMillis (5 );
36
- private static final long VALIDATION_TIMEOUT_MS = TimeUnit .SECONDS .toMillis (3 );
37
- private static final long INITIALIZATION_FAIL_TIMEOUT = TimeUnit .SECONDS .toMillis (4 );
38
- private final Supplier <Long > connectionPoolIdleTimeoutMillis ;
39
- private final Supplier <Integer > connectionPoolMaxPoolSize ;
40
21
41
- public MysqlConnector (@ Autowired ConfigCenter configCenter ) {
42
- this .connectionPoolIdleTimeoutMillis = configCenter .mysqlPlugin ().ofInteger ("connectionPoolIdleTimeoutMinutes" , 6 )
43
- .then (Duration ::ofMinutes )
44
- .then (Duration ::toMillis );
45
- this .connectionPoolMaxPoolSize = configCenter .mysqlPlugin ().ofInteger ("connectionPoolMaxPoolSize" , 50 );
22
+ public MysqlConnector () {
23
+ super (50 );
46
24
}
47
25
48
26
@ Nonnull
49
27
@ Override
50
- protected HikariPerfWrapper blockingCreateConnection (MysqlDatasourceConfig connectionConfig ) {
51
- try {
52
- Class .forName (JDBC_DRIVER );
53
- } catch (ClassNotFoundException e ) {
54
- throw new PluginException (QUERY_EXECUTION_ERROR , "LOAD_MYSQL_JDBC_ERROR" );
55
- }
56
-
57
- return createHikariDataSource (connectionConfig );
28
+ public MysqlDatasourceConfig resolveConfig (Map <String , Object > configMap ) {
29
+ return MysqlDatasourceConfig .buildFrom (configMap );
58
30
}
59
31
60
- private HikariPerfWrapper createHikariDataSource (MysqlDatasourceConfig datasourceConfig ) {
61
-
62
- HikariConfig config = new HikariConfig ();
63
- config .setDriverClassName (JDBC_DRIVER );
64
- config .setMinimumIdle (1 );
65
- config .setMaxLifetime (MAX_LIFETIME_MS );
66
- config .setKeepaliveTime (KEEPALIVE_TIME_MS );
67
- config .setIdleTimeout (connectionPoolIdleTimeoutMillis .get ());
68
- config .setMaximumPoolSize (connectionPoolMaxPoolSize .get ());
69
- config .setLeakDetectionThreshold (LEAK_DETECTION_THRESHOLD_MS );
70
- config .setConnectionTimeout (CONNECTION_TIMEOUT_MS );
71
- config .setValidationTimeout (VALIDATION_TIMEOUT_MS );
72
- config .setInitializationFailTimeout (INITIALIZATION_FAIL_TIMEOUT );
32
+ @ Override
33
+ protected String getJdbcDriver () {
34
+ return JDBC_DRIVER ;
35
+ }
73
36
37
+ @ Override
38
+ protected void setUpConfigs (SqlBasedDatasourceConnectionConfig datasourceConfig , HikariConfig config ) {
74
39
// Set authentication properties
75
40
String username = datasourceConfig .getUsername ();
76
41
if (StringUtils .isNotEmpty (username )) {
@@ -97,64 +62,5 @@ private HikariPerfWrapper createHikariDataSource(MysqlDatasourceConfig datasourc
97
62
config .addDataSourceProperty ("useSSL" , "false" );
98
63
config .addDataSourceProperty ("requireSSL" , "false" );
99
64
}
100
-
101
- config .setReadOnly (datasourceConfig .isReadonly ());
102
-
103
- HikariDataSource hikariDataSource = new HikariDataSource (config );
104
- return HikariPerfWrapper .wrap (hikariDataSource ,
105
- () -> hikariDataSource .getHikariPoolMXBean ().getTotalConnections (),
106
- () -> hikariDataSource .getHikariPoolMXBean ().getIdleConnections (),
107
- () -> hikariDataSource .getHikariPoolMXBean ().getActiveConnections (),
108
- () -> hikariDataSource .getHikariPoolMXBean ().getThreadsAwaitingConnection (),
109
- hikariDataSource ::getDataSourceProperties ,
110
- hikariDataSource ::getHealthCheckProperties
111
- );
112
- }
113
-
114
- @ Nonnull
115
- @ Override
116
- protected DatasourceTestResult blockingTestConnection (HikariPerfWrapper wrapper ) {
117
- blockingDestroyConnection (wrapper );
118
- return DatasourceTestResult .testSuccess ();
119
- }
120
-
121
- @ Override
122
- protected void blockingDestroyConnection (HikariPerfWrapper wrapper ) {
123
- if (wrapper != null ) {
124
- ((HikariDataSource ) wrapper .getHikariDataSource ()).close ();
125
- }
126
65
}
127
-
128
- @ Nonnull
129
- @ Override
130
- public MysqlDatasourceConfig resolveConfig (Map <String , Object > configMap ) {
131
- return MysqlDatasourceConfig .buildFrom (configMap );
132
- }
133
-
134
- @ Override
135
- public Set <String > validateConfig (MysqlDatasourceConfig connectionConfig ) {
136
-
137
- Set <String > invalids = new HashSet <>();
138
-
139
- String host = connectionConfig .getHost ();
140
- if (StringUtils .isBlank (host )) {
141
- invalids .add ("HOST_EMPTY_PLZ_CHECK" );
142
- }
143
-
144
- if (host .contains ("/" ) || host .contains (":" )) {
145
- invalids .add ("HOST_WITH_COLON" );
146
- }
147
-
148
- if (StringUtils .equalsIgnoreCase (host , "localhost" ) || StringUtils .equals (host , "127.0.0.1" )) {
149
- invalids .add ("INVALID_HOST" );
150
- }
151
-
152
- if (StringUtils .isBlank (connectionConfig .getDatabase ())) {
153
- invalids .add ("DATABASE_NAME_EMPTY" );
154
- }
155
-
156
- return invalids ;
157
- }
158
-
159
-
160
66
}
0 commit comments