Spring is a useful library that can help break up dependencies in your Java application. It provides AOP, clean ways for transaction management, and a set of simplified J2EE related APIs.
Supports Enterprise Application Integration (EAI) messaging patterns. Similar to a JMS system, it contains a notion of a message with headers and payload.
Messages can be thought of as a document, event, or command.
Channels connect producers and consumers, similar to a topic or queue in JMS. Channel messages are stored in memory, but you can make these persistent using JMS or another datastore. You can define asynchronous channels so transactions can encompass the sending and receiving of a message.
Spring Integration is similar to Apache Camel and Mule ESB.
Used for batch or long running jobs with large amounts of data.
The batched data can be broken into smaller chunks to be completed with fewer resources. In case of error, a restart or last commit point can be saved. It requires a datastore to remember the state of the job.
You can define basic steps, as well as skip bad data or retry on error.