For those who are already familiar with Spring Integration, this chapter provides a brief overview of the new features of version 5.5.
If you are interested in the changes and features that were introduced in earlier versions, see the Change History.
If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 5.5 development process.
FileSplitter.FileMaker-based implementation of
MessageGroupProcessor as a
FileAggregator component was introduced.
See File Aggregator for more information.
Mqttv5PahoMessageHandler (including respective
MqttHeaderMapper) were introduced to support MQTT v5 protocol communication.
See MQTT v5 Support for more information.
All the persistent
MessageGroupStore implementation provide a
streamMessagesForGroup(Object groupId) contract based on the target database streaming API.
See Message Store for more information.
integrationGlobalProperties bean (if declared) must be now an instance of
org.springframework.integration.context.IntegrationProperties instead of
java.util.Properties, which support is deprecated for backward compatibility.
spring.integration.channels.error.requireSubscribers=true global property is added to indicate that the global default
errorChannel must be configured with the
requireSubscribers option (or not).
spring.integration.channels.error.ignoreFailures=true global property is added to indicate that the global default
errorChannel must ignore (or not) dispatching errors and pass the message to the next handler.
See Global Properties for more information.
AbstractPollingEndpoint (source polling channel adapter and polling consumer) treats
maxMessagesPerPoll == 0 as to skip calling the source.
It can be changed to different value later on, e.g. via a Control Bus.
See Polling Consumer for more information.
ConsumerEndpointFactoryBean now accept a
Function to any input channel as reactive stream source and use a
This is covered as a
ConsumerEndpointSpec.reactive() option in Java DSL and as a
@Reactive nested annotation for the messaging annotations.
See Reactive Streams Support for more information.
groupTimeoutExpression for a correlation message handler (an
Resequencer) can now be evaluated to a
java.util.Date for some fine-grained scheduling use-cases.
BiFunction groupConditionSupplier option is added to the
AbstractCorrelatingMessageHandler to supply a
MessageGroup condition against a message to be added to the group.
See Aggregator for more information.
MessageGroup abstraction can be supplied with a
condition to evaluate later on to make a decision for the group.
See Message Group Condition for more information.
IntegrationFlows.from(IntegrationFlow) factory method has been added to allow starting the current
IntegrationFlow from the output of an existing flow.
In addition, the
IntegrationFlowDefinition has added a
to(IntegrationFlow) terminal operator to continue the current flow at the input channel of some other flow.
See Integration Flows Composition for more information.
AmqpInboundGateway (and the respective Java DSL builders) now support an
org.springframework.amqp.rabbit.retry.MessageRecoverer as an AMQP-specific alternative to the general purpose
See AMQP Support for more information.
ReactiveRedisStreamMessageProducer has now setters for all the
StreamReceiver.StreamReceiverOptionsBuilder options, including an
See Redis Support for more information.
HttpRequestExecutingMessageHandler doesn’t fallback to the
application/x-java-serialized-object content type any more and lets the
RestTemplate make the final decision for the request body conversion based on the
It also has now an
extractResponseBody flag (which is
true by default) to return just the response body, or to return the whole
ResponseEntity as the reply message payload, independently of the provided
Same option is presented for the
See HTTP Support for more information.
The persistent file list filters now have a boolean property
Setting this property to
true, also sets
alwaysAcceptDirectories, which means that the recursive operation on the outbound gateways (
mget) will now always traverse the full directory tree each time.
This is to solve a problem where changes deep in the directory tree were not detected.
forRecursion=true causes the full path to files to be used as the metadata store keys; this solves a problem where the filter did not work properly if a file with the same name appears multiple times in different directories.
IMPORTANT: This means that existing keys in a persistent metadata store will not be found for files beneath the top level directory.
For this reason, the property is
false by default; this may change in a future release.
FileInboundChannelAdapterSpec has now a convenient
recursive(boolean) option instead of requiring an explicit reference to the
remoteDirectoryExpression can now be used in the
mv command for convenience.
MongoDbMessageSourceSpec was added into MongoDd Java DSL.
update option is now exposed on both the
See MongoDb Support for more information.
The WebSocket channel adapters based on
ServerWebSocketContainer can now be registered and removed at runtime.
See WebSockets Support for more information.
JpaOutboundGateway now supports an
Iterable message payload for a
See Outbound Channel Adapter for more information.
Previously, when using XML configuration,
@Gateway.payloadExpression was ignored for no-argument methods.
There is one possible breaking change - if the method is annotated with
@Payload as well as
@Gateway (with a different expression) previously, the
@Payload would be applied, now the
@Gateway.payloadExpression is applied.
See Gateway Configuration with Annotations and XML and Invoking No-Argument Methods for more information.