0
votes

Based on the documentation for Spring Cloud Data Flow (SCDF) only properties that are prefixed by either "deployed." or "app." are considered when deploying an application (be it a source, processor or sink) as part of a stream.

However, I've noticed that besides the prefix, all the properties must be provided as "strings", no matter what their original type is; otherwise, they are simply discarded by SCDF as per this line of code:

    propertiesToUse = DeploymentPropertiesUtils.convert(props);

which does this:

public static Map<String, String> convert(Properties properties) {
    Map<String, String> result = new HashMap<>(properties.size());
    for (String key : properties.stringPropertyNames()) {
        result.put(key, properties.getProperty(key));
    }
    return result;
}

As you can see from the snippet above, it only considers "stringPropertyNames" which filters out anything that is not provided as a "String".

I presume this behaviour is intentional, but why? Why not just pick up all the properties defined by the user with the proper prefix?

Thanks for your support.

1

1 Answers

2
votes

All the deployment properties are expected to be of Map<String, String> based on the contract set by the deployer SPI.

I believe one of the reasons is to have String key, values being passed to target deployment platform without serialization/de-serialization hurdle. and, using String values is similar to how one could set those key, value properties as environment variables (for example) in the target deployment platform.