Controller Services vs Parameters: What Goes Where

Modified on Thu, 11 Dec, 2025 at 9:36 PM

Summary

Clockspring gives you two major tools for configuration: controller services and parameters. They solve different problems. This guide explains what belongs in each so your flows stay clean, portable, and easy to maintain across environments.


What controller services are for

Controller services hold shared, reusable configuration that processors depend on.
They define how Clockspring connects to something or interprets something.


Use a controller service when you need to provide:

  • Database connections

  • Caches (MapCache, SetCache)

  • SSL / TLS configuration

  • OAuth / JWT token providers

  • Record Readers / Record Writers

  • Credential providers for APIs

  • Anything required by many processors

If multiple processors will reference it, it belongs in a controller service.


What parameters are for

Parameters supply environment-specific values that change between Dev, Test, Prod, or customer deployments.


Use parameters for things like:

  • Hostnames

  • Ports

  • API URLs

  • Usernames

  • Passwords

  • Access tokens (non-OAuth flows)

  • File paths

  • Single-use configuration values


Parameters decouple flows from the environment.
Instead of editing a controller service per environment, you supply a different parameter context.


How they work together

Most clean Clockspring deployments follow this rule:

 Controller service defines the structure.
 Parameters supply the details.


Example:
A DBCPConnectionPool controller service defines the connection mechanism, pooling, and driver settings.

Parameters provide the hostname, port, username, and password.


This lets you promote flows without editing the service itself.


When something belongs in a controller service

Choose a controller service if the value:

  • Is needed by more than one processor

  • Should be centrally managed

  • Represents a connection, credential provider, or reader/writer

  • Is required by the processor’s property type (i.e., must reference a controller service API)

If the processor expects a controller service, there is no choice.


When something belongs in a parameter

Choose a parameter if the value:

  • Changes between environments

  • Might change frequently

  • Contains sensitive information

  • Does not need to be shared across processors

  • Is a simple string used by one or more controller services

  • Is needed at processor-level configuration instead of via a controller service

Parameters cleanly separate logic from environment settings.


Examples

Database connection

Controller Service: DBCPConnectionPool
Parameters: hostname, port, database name, username, password

API call via InvokeHTTP

Controller Service: SSLContextService, OAuth token provider
Parameters: base URL, API key, basic-auth username/password, tenant IDs

Record parsing

Controller Service: JsonTreeReader, CSVReader
Parameters: optional path settings or schema names

Deduplication

Controller Service: MapCache or SetCache
Parameters: none required; keys stay processor/attribute-level


Common mistakes

  • Hardcoding environment-specific URLs in a controller service

  • Embedding passwords directly in processor properties

  • Duplicating controller services instead of passing parameters

  • Editing controller services in each environment instead of providing different parameter contexts


Fix these, and your flows become far easier to maintain.


Related Articles

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article