Implementation:Apache Dolphinscheduler BaseAdHocAndPooledClient Extension
| Knowledge Sources | |
|---|---|
| Domains | Data_Integration, Connection_Management |
| Last Updated | 2026-02-10 00:00 GMT |
Overview
Concrete tool for creating database connections using BaseAdHocDataSourceClient (single-use) and BasePooledDataSourceClient (HikariCP-backed pool).
Description
BaseAdHocDataSourceClient provides single-use JDBC connections by delegating to DataSourceProcessorProvider for each connection request. BasePooledDataSourceClient creates a HikariCP connection pool in its constructor via createDataSourcePool(), configuring pool size, idle connections, validation query, and JDBC parameters. The pooled client decodes passwords via PasswordUtils.decodePassword() before passing them to HikariCP.
Usage
Extend BaseAdHocDataSourceClient for connectivity testing and ad-hoc queries. Extend BasePooledDataSourceClient for sustained query execution in task workers. Both are created by the DataSourceChannel implementation.
Code Reference
Source Location
- Repository: dolphinscheduler
- File: dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/client/BaseAdHocDataSourceClient.java (L27-48)
- File: dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/client/BasePooledDataSourceClient.java (L38-87)
Signature
public class BaseAdHocDataSourceClient implements AdHocDataSourceClient {
protected final BaseConnectionParam baseConnectionParam;
protected final DbType dbType;
public BaseAdHocDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType);
@Override public Connection getConnection(); // delegates to DataSourceProcessorProvider
@Override public void close(); // no-op (no pool to close)
}
public class BasePooledDataSourceClient implements PooledDataSourceClient {
protected final BaseConnectionParam baseConnectionParam;
protected final DbType dbType;
protected HikariDataSource hikariDataSource;
public BasePooledDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType);
protected HikariDataSource createDataSourcePool(
BaseConnectionParam baseConnectionParam, DbType dbType);
@Override public Connection getConnection(); // delegates to hikariDataSource
@Override public void close(); // closes HikariDataSource
}
Import
import org.apache.dolphinscheduler.plugin.datasource.api.client.BaseAdHocDataSourceClient;
import org.apache.dolphinscheduler.plugin.datasource.api.client.BasePooledDataSourceClient;
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| baseConnectionParam | BaseConnectionParam | Yes | Connection parameters with JDBC URL, encoded password, driver |
| dbType | DbType | Yes | Database type for processor lookup |
Outputs
| Name | Type | Description |
|---|---|---|
| Connection | java.sql.Connection | JDBC connection (ad-hoc: single-use, pooled: from HikariCP pool) |
| HikariDataSource | Pool | Connection pool instance (pooled client only) |
Usage Examples
Ad-Hoc Client Usage
// Created via DataSourceChannel
BaseAdHocDataSourceClient client = new BaseAdHocDataSourceClient(connectionParam, DbType.MYSQL);
try (Connection conn = client.getConnection()) {
// Execute one-off query
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1");
}
client.close();
Pooled Client with HikariCP
// Created via DataSourceChannel, pool configured in constructor
BasePooledDataSourceClient client = new BasePooledDataSourceClient(connectionParam, DbType.MYSQL);
// createDataSourcePool() called in constructor:
// hikariDataSource.setDriverClassName(param.driverClassName)
// hikariDataSource.setJdbcUrl(param.jdbcUrl)
// hikariDataSource.setUsername(param.user)
// hikariDataSource.setPassword(PasswordUtils.decodePassword(param.password))
// hikariDataSource.setMaximumPoolSize(DATASOURCE_POOL_MAX_ACTIVE)
// hikariDataSource.setMinimumIdle(DATASOURCE_POOL_MIN_IDLE)
// hikariDataSource.setConnectionTestQuery(param.validationQuery)
try (Connection conn = client.getConnection()) {
// Execute queries using pooled connection
PreparedStatement ps = conn.prepareStatement("SELECT * FROM table WHERE id = ?");
ps.setInt(1, 42);
ResultSet rs = ps.executeQuery();
}
// Connection returned to pool, not closed