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 DataSourceClientProvider Pooling

From Leeroopedia


Knowledge Sources
Domains Connection_Management, Performance
Last Updated 2026-02-10 00:00 GMT

Overview

Concrete tool for managing cached connection pools using DataSourceClientProvider with Guava cache and BasePooledDataSourceClient with HikariCP backing.

Description

DataSourceClientProvider is a Spring @Component that uses a Guava Cache<String, PooledDataSourceClient> with expireAfterAccess (configurable via DataSourceConstants.DATASOURCE_CLIENT_EXPIRE_SECONDS). A RemovalListener calls client.close() on cache eviction to release pool resources. The getPooledDataSourceClient() method checks the cache and delegates to DataSourcePluginManager on miss. BasePooledDataSourceClient.createDataSourcePool() configures HikariCP with DATASOURCE_POOL_MAX_ACTIVE and DATASOURCE_POOL_MIN_IDLE from DataSourceConstants.

Usage

Called by task execution code to obtain JDBC connections for SQL operations. The provider is autowired by Spring.

Code Reference

Source Location

  • Repository: dolphinscheduler
  • File: dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/plugin/DataSourceClientProvider.java (L43-93)
  • File: dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/client/BasePooledDataSourceClient.java (L38-87)

Signature

@Component
public class DataSourceClientProvider {
    private static final Cache<String, PooledDataSourceClient>
        POOLED_DATASOURCE_CLIENT_CACHE;  // Guava cache with RemovalListener

    public PooledDataSourceClient getPooledDataSourceClient(
        DbType dbType, ConnectionParam connectionParam);
    public Connection getPooledConnection(
        DbType dbType, ConnectionParam connectionParam);
    public AdHocDataSourceClient getAdHocDataSourceClient(
        DbType dbType, ConnectionParam connectionParam);
    public Connection getAdHocConnection(
        DbType dbType, ConnectionParam connectionParam);
}

public class BasePooledDataSourceClient implements PooledDataSourceClient {
    protected HikariDataSource hikariDataSource;

    protected HikariDataSource createDataSourcePool(
        BaseConnectionParam param, DbType dbType);
    @Override public Connection getConnection();
    @Override public void close();
}

Import

import org.apache.dolphinscheduler.plugin.datasource.api.plugin.DataSourceClientProvider;

I/O Contract

Inputs

Name Type Required Description
dbType DbType Yes Database type enum for channel lookup
connectionParam ConnectionParam Yes Resolved connection parameters

Outputs

Name Type Description
PooledDataSourceClient Client Cached pooled client wrapping HikariDataSource
Connection java.sql.Connection JDBC connection from HikariCP pool

Usage Examples

Getting a Pooled Connection

@Autowired
private DataSourceClientProvider dataSourceClientProvider;

// In task execution code:
Connection conn = dataSourceClientProvider.getPooledConnection(
    DbType.MYSQL, connectionParam);
try {
    PreparedStatement ps = conn.prepareStatement("SELECT * FROM users");
    ResultSet rs = ps.executeQuery();
    // process results
} finally {
    conn.close();  // returns to HikariCP pool, not actually 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