11package com .openblocks .plugin .mysql ;
22
3- import static com .openblocks .sdk .exception .PluginCommonError .QUERY_EXECUTION_ERROR ;
43import static org .apache .commons .lang3 .StringUtils .isNotBlank ;
54
6- import java .time .Duration ;
7- import java .util .HashSet ;
85import java .util .Map ;
9- import java .util .Set ;
10- import java .util .concurrent .TimeUnit ;
11- import java .util .function .Supplier ;
126
137import javax .annotation .Nonnull ;
148
159import org .apache .commons .lang3 .StringUtils ;
1610import org .pf4j .Extension ;
17- import org .springframework .beans .factory .annotation .Autowired ;
1811
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 ;
2414import com .openblocks .sdk .plugin .mysql .MysqlDatasourceConfig ;
2515import com .zaxxer .hikari .HikariConfig ;
26- import com .zaxxer .hikari .HikariDataSource ;
2716
2817@ Extension
29- public class MysqlConnector extends BlockingDatasourceConnector < HikariPerfWrapper , MysqlDatasourceConfig > {
18+ public class MysqlConnector extends SqlBasedConnector {
3019
3120 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 ;
4021
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 );
4624 }
4725
4826 @ Nonnull
4927 @ 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 );
5830 }
5931
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+ }
7336
37+ @ Override
38+ protected void setUpConfigs (SqlBasedDatasourceConnectionConfig datasourceConfig , HikariConfig config ) {
7439 // Set authentication properties
7540 String username = datasourceConfig .getUsername ();
7641 if (StringUtils .isNotEmpty (username )) {
@@ -97,64 +62,5 @@ private HikariPerfWrapper createHikariDataSource(MysqlDatasourceConfig datasourc
9762 config .addDataSourceProperty ("useSSL" , "false" );
9863 config .addDataSourceProperty ("requireSSL" , "false" );
9964 }
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- }
12665 }
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-
16066}
0 commit comments