Engineering
Releases
News and Events

Spring Integration 5.0 Milestone 6 Available

On behalf of the Spring Integration team I am pleased to announce that the Milestone 6 for the Spring Integration 5.0 version (5.0.0.M6) is now available.

It is available for download from the Milestone Repository:

repositories {
    maven { url 'http://repo.spring.io/libs-milestone' }
}
compile "org.springframework.integration:spring-integration-core:5.0.0.M6"

19 JIRAs (and some GitHub issues) made into this release, including bug fixes and a number of new features. Some highlights of features in the M6, since the previously announced Milestone 5:

  • The Spring WebFlux based Reactive Channel Adapters are provided for the HTTP server side:

@Bean
public IntegrationFlow sseFlow() {
    return IntegrationFlows
            .from(Http.inboundReactiveGateway("/sse")
                    .requestMapping(m -> m.produces(MediaType.TEXT_EVENT_STREAM_VALUE)))
            .handle((p, h) -> Flux.just("foo", "bar", "baz"))
            .get();
}

This sample demonstrate how we can configure Server Side Events with the Spring Integration Channel Adapter which is fully based on the WebFlux foundation and performs integration flow execution on demand, back-pressure manner.

  • The IntegrationFlow can now start from any interface, even without @MessagingGateway annotation. That annotation is synthesized on background with default properties by the AnnotationGatewayProxyFactoryBean. This trick opens for us possibility to start IntegrationFlow from the java.util.function interfaces - Function, Consumer and Supplier. And that, in turn, gives us an interesting approach where we can expose an IntegrationFlow as a Function using new Spring Cloud Function project:

@Bean
public IntegrationFlow uppercase(MongoOperations mongoOperations) {
    return IntegrationFlows.from(Function.class)
            .handle(MongoDb.outboundGateway(mongoOperations)
                     .queryFunction(msg ->
                             Query.query(Criteria.where("name")
                                     .is(msg.getPayload())))
                     .collectionNameExpression("headers.collection")
                     .expectSingleResult(true)
                     .entityClass(Person.class))
            .get();
}
  • a new JdbcMetadataStore is available now. This implementation is truly transaction-based and if subsequent flow after (S)FTP polling causes some error, no entries is stored in the DB because of transaction rollback.

  • The preserveTimestamp algorithm for (S)FTP Inbound Channel Adapters has been fixed to throw an exception when local temporary copy cannot be renamed to the original file because the last one is busy in another process.

Special thanks to several community members for their ongoing active contributions to the framework; scan the commits and give them some kudos!

For a complete list of changes in 5.0, also see the What’s New chapter in the reference manual.

There are still several features (Reactive and Testing) we would like to include into the current version, so stay tuned for next Milestones! We expect RC and subsequent GA somewhere in the end of October, beginning of November, - just before Spring Boot 2.0 GA!

Any feedback, feature ideas, critics, bug reports and questions are welcome via appropriate communication channels:

comments powered by Disqus