The Spring Blog

Engineering
Releases
News and Events

What's new in Spring Data Moore?

Spring Data Moore ships with 16 modules and over 700 tickets completed. It includes tons of improvements and new features across the portfolio and has a strong focus on three major topics: Reactive, Kotlin, and Performance. The release adds features such as declarative reactive transactions and Coroutines/Flow support and comes with up to 60%* faster finder methods.

Let’s start with a look at some of the Reactive features of Moore.

Declarative, reactive transactions

The Lovelace Release introduced early support for reactive transactions in a closure-fashioned style that left some room for improvements. The following listing shows that style:

Reactive Transactions in Lovelace (with MongoDB)
public Mono<Process> doSomething(Long id) {

  return template.inTransaction().execute(txTemplate -> {

    return txTemplate.findById(id)
      .flatMap(it -> start(txTemplate, it))
      .flatMap(it -> verify(it))
      .flatMap(it -> finish(txTemplate, it));

  }).next();
}

In the preceding snippet, the transaction has to be initiated by explicitly calling inTransaction() with a transaction-aware template within the closure, calling next() at the end to turn the returned Flux into a Mono to satisfy the method signature, even though findById(…) already emits only a single element.

Obviously, this is not the most intuitive way of doing reactive transactions. So let’s have a look at the same flow using declarative reactive transaction support. As with Spring’s transaction support, you need a component to handle the transaction for you. For reactive transactions, a ReactiveTransactionManager is currently provided by the MongoDB and R2DBC modules. The following listing shows such a component:

@EnableTransactionManagement
class Config extends AbstractReactiveMongoConfiguration {

  // …

  @Bean
  ReactiveTransactionManager mgr(ReactiveMongoDatabaseFactory f) {
    return new ReactiveMongoTransactionManager(f);
  }
}

From there, you can annotate methods with @Transactional and rely on the infrastructure to start, commit, and roll back transactional flows to handle the lifecycle via the Reactor Context. This lets you turn the code from Lovelace into the following listing, removing the need for the closure with its scoped template and the superfluous Flux to Mono transformation:

Declarative Reactive Transactions in Moore (with MongoDB)
@Transactional
public Mono<Process> doSomething(Long id) {

  return template.findById(id)
    .flatMap(it -> start(template, it))
    .flatMap(it -> verify(it))
    .flatMap(it -> finish(template, it));
}
Read more...

Spring Cloud Hoxton.M3 is now available

On behalf of the community, I am pleased to announce that Milestone 3 (M3) of the Spring Cloud Hoxton Release Train is available today. The release can be found in the Spring Milestone repository. You can check out the Hoxton release notes for more information.

Notable Changes in the Hoxton Release Train

This milestone release is compatible with Spring Boot 2.2.0.RC1.

Spring Cloud Circuit Breaker

We welcome Spring Cloud Circuit Breaker as a new project under the Spring Cloud release train. This project provides an abstraction API for adding circuit breakers to your application. At the time of this blog post, there are four supported implementations:

Read more...

Spring Boot for Apache Geode & Pivotal GemFire 1.1.2.RELEASE and 1.2.0.RC1 Available

On behalf of the Spring, Apache Geode, Pivotal GemFire and Pivotal Cloud Cache communities, I am pleased to announce the release of Spring Boot for Apache Geode, Pivotal GemFire and Pivotal Cloud Cache (PCC) 1.1.2.RELEASE as well as 1.2.0.RC1.

SBDG 1.1.2.RELEASE builds on Spring Boot 2.1.9.RELEASE and is available in Maven Central.

SBDG 1.2.0.RC1 builds on Spring Boot 2.2.0.RC1 and is available in the Spring Milestone Repository.

Additionally, SBDG 1.2.0.RC1 bits can be included in a project generated with the Spring Initializer at https://start.spring.io. Simply type "Geode" in the "Search dependencies to add" input field and you will see the "Spring for Apache Geode" dependency appear as an option you can add. This includes the spring-geode-starter dependency in your project Maven or Gradle build files when you generate a project using the Initializer. Check it out!

Read more...

Reactor Dysprosium (3.3.x) goes GA

Hello Reactor community,

On behalf of the Reactor team and its heroic new contributors, I am delighted to announce that Reactor Dysprosium can now be found on your preferred Maven repositories, like this one.

It is the fourth release train since Reactor Core 3.x and it includes Reactor Core 3.3, Reactor Netty 0.9 and a newcomer, Reactor Pool 0.1. Check out the major change logs and release notes:
- reactor-core 3.3.0.RELEASE
- reactor-netty 0.9.0.RELEASE
- reactor-pool 0.1.0.RELEASE

Reactor Dysprosium modules still require JDK 8 or higher. They come with many performance improvements and we even have identified more areas to focus on the next patches and major releases. Please join me in giving a warm welcome to a new module to the family, Reactor Pool. It is the generic embeddable reactive object pool you were waiting for. It is used by Reactor Netty and we plan to build more features on top of it. As with Reactor Netty, we haven’t qualified a major “1.x” release as we expect tweaks before considering it API stable.

Read more...

Reactor Californium-SR12 is out

The 12th Service Release for Californium is out. As per tradition, it fixes several issues and bring improvements all around.

The release is available on your preferred maven central repository.

Change logs and release notes:
- reactor-core 3.2.12.RELEASE
- reactor-netty 0.8.12.RELEASE

Bismuth EOL

With Dysprosium-RELEASE, our reactor-core 3.1.x and reactor-netty 0.7.x lines will not receive further patches. We encourage our users to update to Californium releases trains, which match Spring Boot 2.1.x and Spring Framework 5.1.x.

Read more...

Spring Boot 2.2.0 RC1 has been released!

On behalf of the team and everyone that contributed, I am pleased to announce that the release candidate for Spring Boot 2.2.0 is available from our milestone repository. This release contains 130 issues and pull requests.

For a complete list of changes and upgrade instructions, please see the Spring Boot 2.2 Release Notes on the wiki and the updated reference documentation.

We plan to make Spring Boot 2.2 generally-available in mid-October. Now is a great time to try out Spring Boot 2.2 and provide feedback so that we can try and fix things before GA. If you want to get started with 2.2 and try out the new features, you can bootstrap a new project on https://start.spring.io.

Read more...

Spring for RabbitMQ (Spring AMQP) 2.2 is now available

We are pleased to announce the following maintenance releases are now available.

All users are encouraged to upgrade to these versions

The 2.2.0 release is the first release of the newest line for this project.

What’s New chapter for more information, but here are a few highlights:

  • Micrometer Timer s are now supported to monitor listener performance.

  • @RabbitListener s can now receive a batch of messages in a List<?>, batches can either be created on the producer side, or a SimpleMessageListenerContainer can create a batch from incoming discrete messages.

  • Spring Data Projection interfaces are now supported as @RabbitListener payloads.

  • An option is now provided to shuffle the Addresses before connecting, instead of always trying the addresses in order.

Read more...

Spring for Apache Kafka 2.3 is now available

We are pleased to announce the following releases are now available.

All users are encouraged to upgrade to these versions

The 2.3.0 release is the first release of the newest line for this project.

Refer to the What’s New chapter for more information, but here are a few highlights:

Producing

  • Option to use a producer per thread, to avoid blocking other threads when flushing.

  • The AggregatingReplyingKafkaTemplate extension to the ReplyingKafkaTemplate is provided to aggregate replies from multiple consumers.

Read more...

Spring Boot 2.1.9 available now

On behalf of the team and everyone who has contributed, I’m happy to announce that Spring Boot 2.1.9 has been released and is is now available from repo.spring.io and Maven Central.

This release includes 40 fixes, improvements and dependency upgrades. Thanks to all those who have contributed with issue reports and pull requests.

How can you help?

If you’re interested in helping out, check out the “ideal for contribution” tag in the issue repository. If you have general questions, please ask on stackoverflow.com using the spring-boot tag or chat with the community on Gitter.

Read more...