Spring Cloud Function Native Images

Here’s the latest graph of memory versus billing for Spring Cloud Function on AWS Lambda. It shows the billing metric GBsec as a function of memory allocation in Lambda for two custom runtimes, one in plain Java and one using a GraalVM native image, as described recently in this blog by Andy Clement:


In both cases the functionality is identical (a simple POJO-POJO function), and they both show only the results for cold start. Warm starts, where the function was already active when the request came in, were much faster and cheaper (except for the smallest memory setting they all cost the same because there is a minimum charge for all functions in AWS). You can see that the native images start up very fast and that they are more than two times cheaper to run than the regular JVM. The fastest startup was in the 1000MB container - it only took 19ms to start the app, but it took AWS 700ms to prepare the container, so it was billed at 800ms. In fact, all of the cold starts were billed at 800ms for the native image. For the regular JVM the fastest startup was also in the 1000MB container at 300ms, but it was billed at 2200ms.

Read more

Updates to Spring Versions

The Spring team has decided to change the versioning scheme for both release trains and project modules. These changes will be coming in the next release train and minor releases for each project. In fact, the changes are already present in Spring Cloud 2020.0.0-M1. Maven and Gradle do not provide the exact same version ordering, but we are working with the Gradle team to ensure the Spring scheme ends up sorted in the same way with both tools.

Release Train Version Changes

Spring has been using alphabetically ordered, themed release train versions since 2013. Release trains contain a group of project versions that work well together but make no guarantees about the underlying libraries’ backward compatibility when upgrading to the next release train.

Read more

Spring Tips: The Wavefront Observability Platform

speaker: Josh Long (@starbuxman)

Hi, Spring fans! Welcome to another installment of Spring Tips! In this installment, we’ll revisit two topics that we’ve addressed in two previous videos (distributed tracing and metrics collection) in terms of the superb Tanzu Wavefront observability platform.

The first video of the two videos, as mentioned above, dating way back in early 2017, looked at distributed tracing with spring cloud sleuth and openzipkin. Spring Cloud Sleuth is an abstraction for capturing the flow of messages from one node to another. It’s useful to help you see how messages move through a system. Spring cloud sleuth integrates with all the usual ingress and egress points in a Spring Boot application. Make an HTTP request using either the Restteplat or the reactive WebClient or Spring Cloud Feign? It works. Receive an HTTP request to a traditional (Servlet-based) or reactive HTTP endpoint built with Spring? It works. Send or receive a message using Spring Cloud Stream or Spring Integration? Yep. You guessed it. It just works. You don’t have to do anything, either.

Read more

This Week in Spring - April 28th, 2020

Hi, Spring fans! Welcome to another installment of This Week in Spring! It’s already April 28th, 2020. I can’t even believe it.

The time sure is flying, not just since the last time we spoke in this little blog of ours, but also since I first started writing these roundups the first week of January 2011. In four short months, it’ll have been ten years since I officially joined the Spring team! Crazy.

It’s also the case that time has flown by since this #COVID19 crisis forced much of the world into lockdown. I am an eternal optimist, and I was wondering if this COVID19 crisis was going to have a silver lining. For us here at the Long household, it’s been a gift for me to be able to hang out with my family. My little girl is making really good progress learning how to program, too. She’s already good with basic control flow, variables, functions, etc., all just since we went into lockdown. I’ve become a homeschooling parent. It’s been a lot of fun renewing my maths fundamentals with her. She’s a remarkable kid.

Read more

Spring Cloud Data Flow 2.5.0.RC1 Released

Spring Cloud Data Flow team is pleased to announce the first milestone release of 2.5.0.RC1.

This first release candidate of 2.5.0 adds some bug fixes and the following features:

  • Support application metadata as part of the Container images. Before this release, we only supported application property whitelisting when using a maven artifact.

  • Support for Azure AD integration using OAuth 2.0. Spring Cloud Data Flow, Spring Cloud Skipper servers along with the Spring Cloud Data Flow shell can be configured to integrate with Azure AD for authentication and authorization.

  • Removal of Scheduler task launcher component when scheduling tasks. In Spring Cloud Data Flow 2.3.x, the scheduling of tasks was designed to have an intermediate scheduler task launcher component to enhance the continuous deployment user experience. Since this component added some additional complexities and overhead on Kubernetes, the 2.5.x release removed this intermediary task launcher. We also added a migration tool to migrate the schedules from 2.3.x and 2.4.x

  • Unification of Kubernetes Scheduler properties. This feature lets the user configure any supported/applicable task deployment properties at the time of scheduling them as well.

Read more

Spring Tips: Configuration

speaker: Josh Long (@starbuxman)

Hi, Spring fans! Welcome to another installment of Spring tips! in this installment, we’re going to look at something that’s rather foundational, and something that I wish I’d addressed earlier: configuration. And no, I don’t mean functional configuration or java configuration or anything like that, I’m talking about the string values that inform how your code executes. the stuff that you put in application.properites. that configuration.

All configuration in Spring emanates from the Spring Environment abstraction. The Environment is sort of like a dictionary - a map with keys and values. Environment is just an interface through which we can ask questions about, you know, the Environment. The abstraction lives in Spring Framework and was introduced in Spring 3, more than a decade ago. up until that point, there was a focused mechanism to allow integration of configuration called property placeholder resolution. This environment mechanism and the constellation of classes around that interface more than supersede that old support. if you find a blog still using those types, may I suggest you move on to newer and greener pastures? :)

Read more

Spring HATEOAS brings you new ways to configure clients

Dear Spring community,

With Spring HATEOAS’s recent 1.1.0.M3 release, we bring you a new way to configure clients!

The first step in building hypermedia-based services may be configuring your server, which Spring HATEOAS has provided for a long time through its @EnableHypermediaSupport().

The next major step is building a client that can parse that hypermedia output. This has always been available, but it required you to know some of the deepest innards of the Spring Framework.

Until today.

With the latest version of Spring HATEOAS, it has been made much easier to configure RestTemplate, WebClient, or WebTestClient instances.

Read more

This Week in Spring - April 21st, 2020

Hi, Spring fans! Welcome to another installment of This Week in Spring! It’s been another fun-filled week since we last spoke. I just finished presenting an online talk for the Norwegian jaavBin Java User Group association - that was a ton of fun! - and now I’m preparing tomorrow’s “Spring Tips” installment.

And, without further ado, let’s get to it!

Read more