Skip to content

Commit c30a2a1

Browse files
authored
[Bugfix][zeta] Fix the deadlock issue with JDBC driver loading (#4878)
1 parent c203ef5 commit c30a2a1

File tree

3 files changed

+11
-19
lines changed

3 files changed

+11
-19
lines changed

seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/base/relational/connection/JdbcConnectionPoolFactory.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public HikariDataSource createPooledDataSource(JdbcSourceConfig sourceConfig) {
4343
config.setMaximumPoolSize(sourceConfig.getConnectionPoolSize());
4444
config.setConnectionTimeout(sourceConfig.getConnectTimeoutMillis());
4545
config.addDataSourceProperty(SERVER_TIMEZONE_KEY, sourceConfig.getServerTimeZone());
46-
config.setDriverClassName(sourceConfig.getDriverClassName());
4746

4847
// optional optimization configurations for pooled DataSource
4948
config.addDataSourceProperty("cachePrepStmts", "true");

seatunnel-connectors-v2/connector-cdc/connector-cdc-sqlserver/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/sqlserver/source/source/SqlServerIncrementalSource.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.seatunnel.api.table.type.SeaTunnelDataType;
2525
import org.apache.seatunnel.api.table.type.SeaTunnelRow;
2626
import org.apache.seatunnel.common.utils.JdbcUrlUtil;
27+
import org.apache.seatunnel.common.utils.SeaTunnelException;
2728
import org.apache.seatunnel.connectors.cdc.base.config.JdbcSourceConfig;
2829
import org.apache.seatunnel.connectors.cdc.base.config.SourceConfig;
2930
import org.apache.seatunnel.connectors.cdc.base.dialect.DataSourceDialect;
@@ -111,12 +112,16 @@ public DebeziumDeserializationSchema<T> createDebeziumDeserializationSchema(
111112
(SqlServerSourceConfig) this.configFactory.create(0);
112113
TableId tableId =
113114
this.dataSourceDialect.discoverDataCollections(sqlServerSourceConfig).get(0);
114-
SqlServerConnection sqlServerConnection =
115-
createSqlServerConnection(sqlServerSourceConfig.getDbzConfiguration());
116-
Table table =
117-
((SqlServerDialect) dataSourceDialect)
118-
.queryTableSchema(sqlServerConnection, tableId)
119-
.getTable();
115+
Table table;
116+
try (SqlServerConnection sqlServerConnection =
117+
createSqlServerConnection(sqlServerSourceConfig.getDbzConfiguration())) {
118+
table =
119+
((SqlServerDialect) dataSourceDialect)
120+
.queryTableSchema(sqlServerConnection, tableId)
121+
.getTable();
122+
} catch (Exception e) {
123+
throw new SeaTunnelException(e);
124+
}
120125
physicalRowType = convertFromTable(table);
121126
} else {
122127
physicalRowType = dataType;

seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/connection/SimpleJdbcConnectionProvider.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,6 @@ public class SimpleJdbcConnectionProvider implements JdbcConnectionProvider, Ser
4848
private transient Driver loadedDriver;
4949
private transient Connection connection;
5050

51-
static {
52-
// Load DriverManager first to avoid deadlock between DriverManager's
53-
// static initialization block and specific driver class's static
54-
// initialization block when two different driver classes are loading
55-
// concurrently using Class.forName while DriverManager is uninitialized
56-
// before.
57-
//
58-
// This could happen in JDK 8 but not above as driver loading has been
59-
// moved out of DriverManager's static initialization block since JDK 9.
60-
DriverManager.getDrivers();
61-
}
62-
6351
public SimpleJdbcConnectionProvider(@NonNull JdbcConnectionConfig jdbcConfig) {
6452
this.jdbcConfig = jdbcConfig;
6553
}

0 commit comments

Comments
 (0)