Implementation:Apache Dolphinscheduler DataSourceClientProvider Pooling
| 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
- Environment:Apache_Dolphinscheduler_Java_Runtime
- Environment:Apache_Dolphinscheduler_Database_Backend