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 DataSourceProcessorManager SPI Loading

From Leeroopedia


Knowledge Sources
Domains Plugin_Architecture, Service_Discovery
Last Updated 2026-02-10 00:00 GMT

Overview

Concrete tool for loading and registering datasource plugins at runtime via Java ServiceLoader and the DataSourceProcessorManager/DataSourcePluginManager classes.

Description

DataSourceProcessorManager uses ServiceLoader to discover all DataSourceProcessor implementations on the classpath, storing them in a Map<String, DataSourceProcessor> keyed by database type name. DataSourcePluginManager uses PrioritySPIFactory (a priority-aware SPI loader) to discover all DataSourceChannelFactory implementations and stores the resulting DataSourceChannel instances in a map. Both managers are Spring @Component beans initialized at application startup.

Usage

These managers are used internally by the DolphinScheduler datasource framework. They are automatically initialized by Spring. To add a new plugin, ensure the JAR with @AutoService-annotated classes is on the classpath.

Code Reference

Source Location

  • Repository: dolphinscheduler
  • File: dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/plugin/DataSourceProcessorManager.java (L32-58)
  • File: dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/plugin/DataSourcePluginManager.java (L33-65)

Signature

@Component
public class DataSourceProcessorManager {
    private static final Map<String, DataSourceProcessor> dataSourceProcessorMap = new HashMap<>();

    @PostConstruct
    public void installProcessor();  // loads via ServiceLoader

    public static Map<String, DataSourceProcessor> getDataSourceProcessorMap();
}

@Component
public class DataSourcePluginManager {
    private final Map<String, DataSourceChannel> datasourceChannelMap = new HashMap<>();

    @PostConstruct
    public void installPlugin();  // loads via PrioritySPIFactory

    public Map<String, DataSourceChannel> getDataSourceChannelMap();
}

Import

import org.apache.dolphinscheduler.plugin.datasource.api.plugin.DataSourceProcessorManager;
import org.apache.dolphinscheduler.plugin.datasource.api.plugin.DataSourcePluginManager;

I/O Contract

Inputs

Name Type Required Description
Classpath JARs JAR files Yes Plugin JARs with META-INF/services entries

Outputs

Name Type Description
dataSourceProcessorMap Map<String, DataSourceProcessor> Registry of all discovered processors keyed by DbType name
datasourceChannelMap Map<String, DataSourceChannel> Registry of all discovered channels keyed by DbType name

Usage Examples

Processor Registration

// In DataSourceProcessorManager.installProcessor():
ServiceLoader<DataSourceProcessor> serviceLoader =
    ServiceLoader.load(DataSourceProcessor.class);
for (DataSourceProcessor processor : serviceLoader) {
    dataSourceProcessorMap.put(processor.getDbType().name(), processor);
}
// After loading: map contains {MYSQL -> MySQLDataSourceProcessor, POSTGRESQL -> ...}

Plugin Channel Registration

// In DataSourcePluginManager.installPlugin():
PrioritySPIFactory<DataSourceChannelFactory> prioritySPIFactory =
    new PrioritySPIFactory<>(DataSourceChannelFactory.class);
for (Map.Entry<String, DataSourceChannelFactory> entry :
        prioritySPIFactory.getSPIMap().entrySet()) {
    datasourceChannelMap.put(entry.getKey(), entry.getValue().create());
}

Looking Up a Processor

// Getting a specific processor at runtime
DataSourceProcessor processor =
    DataSourceProcessorManager.getDataSourceProcessorMap().get(DbType.MYSQL.name());
ConnectionParam param = processor.createConnectionParams(dto);

Related Pages

Implements Principle

Requires Environment

Page Connections

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