Jump to content

Connect Leeroopedia MCP: Equip your AI agents to search best practices, build plans, verify code, diagnose failures, and look up hyperparameter defaults.

Implementation:Apache Dolphinscheduler BaseAdHocAndPooledClient Extension

From Leeroopedia


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

Related Pages

Implements Principle

Requires Environment

Uses Heuristic

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment