Reactor BISMUTH-SR7 is out!

Releases | Simon Baslé | February 28, 2018 | ...

On behalf of the whole Reactor Team, it is my pleasure to announce that the Reactor BISMUTH-SR7 release train is now available. As always, we recommend using the reactor-bom Bill Of Material.

In time for Spring Boot 2, this release train comes with improvements and bugfixes to core, extras, and reactor-netty.

This blog post highlights the most significant changes in both SR7 and last week’s SR6 release trains.

Reactor-Core 3.1.5

What’s new since 3.1.3? See the full release notes of the 3.1.4.RELEASE and the 3.1.5.RELEASE. Core changes include more than 15 improvements and bugfixes.

A few new operators have landed in this release: For example, mergeOrdered has been added to Flux and ParallelFlux. It lets you merge multiple sources by continuously picking the smallest available value among all the sources, as defined by a provided Comparator.

For convenience, we also added Flux#concatWithValues(T…​) and Mono#thenReturn(T) , allowing easy concatenation/continuation with scalar values.

To kickstart our introspection theme of 2018, our implementations of Scheduler are Scannable and are thus meaningful when used with Scannable#from.

Notable update considerations include the fix of behavior, aligning it to that of It now cancels in-flight sources as soon as one source completes with empty or throws an error. If all the Mono sources you zip together are guaranteed to be value, this changes nothing.


If you don’t care about the results but want to make sure the whole of N sources have all completed, prefer using Mono.when. In particular, look out for a .zip(…​).then() pattern, which should be replaced by .when(…​).

Another change that is less likely to have been noticed by our users is fixing the visibility of a couple of classes that were never intended for the public:

  • The MPSC Queue implementation from 3.1.3.RELEASE is now exposed only as a plain Queue through Queues.unboundedMultiproducer(). This concrete class is now package-private.

  • FluxDelaySequence, FluxIndex and FluxIndexFuseable are now also package-private.

Bug fixes also include a few GC-friendly fixes, stopping unnecessary retaining of elastic Scheduler workers and event-loop based Processors' background task in case of forceShutdown().

Reactor Addons 3.1.6

What’s new since 3.1.4? See the full release notes of the 3.1.5.RELEASE and the 3.1.6.RELEASE.

Addons has seen a couple of fixes and improvements.

The newly introduced opinionated helper for caching was released with a few package-private interfaces that should have been public. This is embarrassing. :( It has now been fixed.

A new Repeat#create factory method variant has been introduced. It allows combining a Predicate and a maximum amount of repeat attempts.


Speaking of Repeat and its sister, Retry, some user noticed that the default behavior feels a bit misaligned with the core’s dumbed-down repeat() and retry() variants: Without further configuration, the helpers are capped at a single attempt, where the core versions keep on repeating or retrying. Furthermore, this is changed by chaining in timeout, which switches to an uncapped attempt behavior (which has been clarified in its javadoc).

We are thinking about realigning this behavior with core in 3.2.0. Please chime in on the issue if you have any insight or feedback.

Reactor-Netty 0.7.5

What’s new since 0.7.3? See the full release notes of the 0.7.4.RELEASE and the 0.7.5.RELEASE.

Reactor-Netty has also seen quite a few fixes, mostly around pooling and the connection lifecycle.

New goodies include support for expect 100-continue, as well as better Reactor Context handling, by passing Netty pipelines to it when relevant.

Compression support has also been improved, allowing per-response activation of compression. This slightly supersedes the minCompressionThreshold feature that was already in place (albeit it was not 100% reliable). It is based on a BiPredicate<Req,Resp> that could, for instance, activate compression only on certain content types. The minimum compression threshold option is backed by a content-length predicate.

What’s Next

We encourage you to grab these new artifacts, but, if you’re a Spring Boot user, you’ll be delighted to learn you’ll be rewarded with the same goodies as soon as you upgrade to the upcoming Spring Boot 2.0.0 GA release. :)

As always, feedback is welcome. Come and discuss this release on Gitter or consider opening an issue on GitHub.

In the meantime, happy reactive coding!

Get the Spring newsletter

Thank you!

Get ahead

VMware offers training and certification to turbo-charge your progress.

Learn more

Get support

Spring Runtime offers support and binaries for OpenJDK™, Spring, and Apache Tomcat® in one simple subscription.

Learn more

Upcoming events

Check out all the upcoming events in the Spring community.

View all