For those who are already familiar with Spring Integration, this chapter provides a brief overview of the new features of version 6.0.

If you are interested in the changes and features that were introduced in earlier versions, see the Change History.

What’s New in Spring Integration 6.0?

If you are interested in more details, see the Issue Tracker tickets that were resolved as part of the 6.0 development process.

In general the project has been moved to Java 17 baseline and migrated from Java EE to Jakarta EE.

New Components

MQTT ClientManager

A new MQTT ClientManager has been added to support a reusable MQTT connection across different channel adapters. See Shared MQTT Client Support for more information.

GraphQL Support

The GraphQL support has been added. See GraphQL Support for more information.

SMB Support

SMB support has been added from the Spring Integration Extensions project. The Java DSL (see org.springframework.integration.smb.dsl.Smb factory) also has been added to this module. An SmbStreamingMessageSource and SmbOutboundGateway implementation are introduced. See SMB Support for more information.

PostgreSQL Push Notification

A PostgresSubscribableChannel allows to receive push notifications via PostgresChannelMessageTableSubscriber upon new messages add to the JdbcChannelMessageStore.

See PostgreSQL: Receiving Push Notifications for more information.

General Changes

The messaging annotations are now @Repeatable and the same type can be declared several times on the same service method. The messaging annotations don’t require a poller attribute as an array of @Poller anymore.

See Annotation Support for more information.

For convenience, the XML and Java DSL for Scatter-Gather, based on the RecipientListRouter, now sets an applySequence = true, so the gatherer part can rely on the default correlation strategies.

See Scatter-Gather for more information.

The AggregatingMessageHandler now does not split a Collection<Message<?>> result of the MessageGroupProcessor (unless it is a SimpleMessageGroupProcessor) on the output, but emits a single message containing this whole collection as a payload.

See Aggregator for more information.

The IntegrationFlows factory is now marked as deprecated in favor of the fluent API available in the IntegrationFlow interface itself. The factory class will be removed in the future releases.

See Java DSL for more information.

The org.springframework.util.concurrent.ListenableFuture has been deprecated starting with Spring Framework 6.0. All Spring Integration async API has been migrated to the CompletableFuture.

See CompletableFuture support for more information.

The integrationGlobalProperties bean is now declared by the framework as an instance of org.springframework.integration.context.IntegrationProperties instead of the previously deprecated java.util.Properties.

HTTP Changes

The #cookies variable for expression evaluation context, exposed in the HttpRequestHandlingEndpointSupport, is now a MultiValueMap to carry all the values for cookies set by the client. See HTTP Support for more information.

RMI Removal

The spring-integration-rmi module has been removed altogether after being deprecated in previous versions. There is no replacement: it is recommended to migrate to more secure network and application protocols, such as WebSockets, RSockets, gRPC or REST.

Apache Kafka Changes

When providing a RetryTemplate on the inbound gateway or message-driven channel adapter, if an errorChannel is also provided, an ErrorMessageSendingRecoverer is automatically configured.

In addition, the new KafkaErrorMessageSendingRecoverer is provided; this can be used with a DefaultErrorHandler to avoid issues with long aggregated retry delays causing partitions rebalances.

See Spring for Apache Kafka Support for more information.

JDBC Changes

The DefaultLockRepository can now be supplied with a PlatformTransactionManager instead of relying on the primary bean from the application context.

See JDBC Lock Registry for more information.

TCP/IP Changes

The lookupHost property of the AbstractConnectionFactory and DatagramPacketMessageMapper is now set to false by default to avoid delays in the environments where DNS is not configured.

See TCP and UDP Support for more information.