This chapter provides an overview of the new features and improvements that have been introduced with Spring Integration 4.3. If you are interested in more details, please see the Issue Tracker tickets that were resolved as part of the 4.3 development process.
MessageGroupFactory strategy has been introduced to allow a control over
SimpleMessageGroupFactory is provided for the
SimpleMessageGroup with the
GroupType.HASH_SET as the default
factory for the standard
See Section 9.4, “Message Store” for more information.
PersistentMessageGroup, - lazy-load proxy, - implementation is provided for persistent
which return this instance for the
getMessageGroup() when their
See Section 9.4, “Message Store” for more information.
New inbound channel adapters are provided that return an
InputStream for each file allowing you to retrieve remote
files without writing them to the local file system
See Section 15.5, “FTP Streaming Inbound Channel Adapter” and Section 27.8, “SFTP Streaming Inbound Channel Adapter” for more information.
StreamTransformer is provided to transform an
InputStream payload to either a
See the section called “Stream Transformer” for more information.
IntegrationGraphServer together with the
IntegrationGraphController REST service are provided to expose the runtime model of a Spring Integration application as a graph.
See Section 9.8, “Integration Graph” for more information.
JdbcLockRegistry is provided for distributed locks shared through the data base table.
See Section 18.6, “JDBC Lock Registry” for more information.
LeaderInitiator implementation is provided based on the
See Section 8.3, “Leadership Event Handling” for more information.
Previously, it was possible to specify a
reply-channel on an outbound gateway within a chain.
It was completely ignored; the gateway’s reply goes to the next chain element, or to the chain’s output channel
if the gateway is the last element.
This condition is now detected and disallowed.
If you have such configuration, simply remove the
An option to make the Service Asynchronous has been added. See Section 8.5.3, “Asynchronous Service Activator” for more information.
The Messaging Annotation Support doesn’t require any more
@MessageEndpoint (or any other
declaration on the class level.
To restore the previous behaviour specify the
See Section F.5, “Global Properties” and Section F.6, “Annotation Support” for more information.
userFlag added in 4.2.2 to provide customization of the flag used to denote that the mail has been
seen is now available using the XML namespace.
See Section 21.5, “Marking IMAP Messages When \Recent is Not Supported” for more information.
There is now an option to map inbound mail messages with the
MessageHeaders containing the mail headers and the
payload containing the email content.
Previously, the payload was always the raw
See Section 21.3, “Inbound Mail Message Mapping” for more information.
DefaultJmsHeaderMapper now maps the standard
correlationId header as a message property by invoking its
See Section 20.6, “Mapping Message Headers to/from JMS Message” for more information.
The JMS Outbound gateway now has an
See Section 20.5.2, “Async Gateway” for more information.
There is a change in behavior when a POJO aggregator releases a collection of
Message<?> objects; this is rare but if
your application does that, you will need to make a small change to your POJO. See this Important note
for more information.
TcpConnectionServerListeningEvent is emitted when a server connection factory is started.
See Section 31.5, “TCP Connection Events” for more information.
socket-expression are now available for the
See Section 31.2, “UDP Adapters” for more information.
The various deserializers that can’t allocate the final buffer until the whole message has been assembled now support pooling of the raw buffer into which the data is received, rather than creating and discarding a buffer for each message. See Section 31.3, “TCP Connection Factories” for more information.
The message mapper now, optionally, sets a configured content type header. See Section 31.13, “IP Message Headers” for more information.
The generated file name for the
FileWritingMessageHandler can represent sub-path to save the desired directory
structure for file in the target directory.
See Section 14.3.1, “Generating File Names” for more information.
FileReadingMessageSource now hides the
WatchService directory scanning logic in the inner class.
watch-events options are provided to enable such a behaviour.
The top level
WatchServiceDirectoryScanner has been deprecated because of inconsistency around API.
See Section 14.2.2, “WatchServiceDirectoryScanner” for more information.
You can now avoid flushing files when appending and use a number of strategies to flush the data during idle periods. See Section 14.3.4, “Flushing Files When using APPEND_NO_FLUSH” for more information.
The outbound channel adapter can now be configured to set the destination file’s
See Section 14.3.5, “File Timestamps” for more information.
FileSplitter will now automatically close an (S)FTP session when the file is completely read.
This applies when the outbound gateway returns an
InputStream or the new (S)FTP streaming channel adapters are being used.
Also a new
markers-json options has been introduced to convert
FileSplitter.FileMarker to JSON
String for relaxed downstream network interaction.
See Section 14.5, “File Splitter” for more information.
ChainFileListFilter is provided as an alternative to
See Section 14.2, “Reading Files” for more information.
The outbound endpoints now support a
RabbitTemplate configured with a
that the converter can be chosen based on the message content type.
See Section 11.8, “Outbound Message Conversion” for more information.
Spring AMQP 1.6 adds support for
Delayed Message Exchanges.
Header mapping now supports the headers (
amqp_receivedDelay) used by this feature.
AMQP-backed channels now support message mapping. See Section 11.11, “AMQP Backed Message Channels” for more information.
Previously, the queue channel adapters always used the Redis List in a fixed direction,
pushing to the left end and reading from the right end.
It is now possible to configure the reading and writing direction using
leftPush options for the
See Section 24.3.4, “Redis Queue Inbound Channel Adapter” and Section 24.3.5, “Redis Queue Outbound Channel Adapter” for more information.
The default serializer in the inbound gateway has been changed to a
JdkSerializationRedisSerializer for compatibility
with the outbound gateway.
See Section 24.10, “Redis Queue Inbound Gateway” for more information.
Previously, with requests that had a body (such as
POST) that had no
content-type header, the body was ignored.
With this release, the content type of such requests is considered to be
application/octet-stream as recommended
by RFC 2616.
See Section 17.2, “Http Inbound Components” for more information.
A new factory bean is provided to simplify the configuration of Jsch proxies for SFTP. See Section 27.3, “Proxy Factory Bean” for more information.
FtpSession now supports
null for the
listNames() method, since it is possible by the
underlying FTP Client.
With that the
FtpOutboundGateway can now be configured without
<int-ftp:inbound-channel-adapter> can be configured without
See Chapter 15, FTP/FTPS Adapters for more information.
ErrorMessageExceptionTypeRouter supports now the
Exception superclass mappings to avoid duplication
for the same channel in case of several inheritors.
For this purpose the
ErrorMessageExceptionTypeRouter loads mapping classes during initialization to fail-fast
See Section 6.1, “Routers” for more information.
AMQP, WS and XMPP header mappings (e.g.
reply-header-mapping) now support negated
See Section 11.12, “AMQP Message Headers”, Section 34.5, “WS Message Headers”, and Section 36.6, “XMPP Message Headers” for more information.
Previously, only standard AMQP headers were mapped by default; users had to explicitly enable mapping of user-defined
With this release all headers are mapped by default.
In addition, the inbound
amqp_deliveryMode header is no longer mapped by default.
See Section 11.12, “AMQP Message Headers” for more information.
Groovy scripts can now be configured with the
compile-static hint or any other
See Section 8.8.1, “Groovy configuration” for more information.
@InboundChannelAdapter has now an alias
channel attribute for regular
In addition the target
SourcePollingChannelAdapter components can now resolve the target
from its provided name (
outputChannelName options) in late-binding manner.
See Section F.6, “Annotation Support” for more information.
The XMPP Extensions (XEP) are now supported by the XMPP channel adapters. See Section 36.7, “XMPP Extensions” for more information.
ChannelInterceptor now can accept a
channelName which is resolved to the target
later, during the first active interceptor operation.
See the section called “Wire Tap” for more information.
ChannelMessageStoreQueryProvider now supports H2 database.
See Section 18.4.2, “Backing Message Channels” for more information.
ServerWebSocketContainer now exposes
allowedOrigins option and
See Chapter 33, WebSockets Support for more information.
BarrierMessageHandler now supports a discard channel to which late-arriving trigger messages are sent.
See Section 6.8, “Thread Barrier” for more information.
The AMQP outbound endpoints now support setting a delay expression for when using the RabbitMQ Delayed Message Exchange plugin. See Section 11.10, “Delayed Message Exchange” for more information.