close

Spring Data's Migration from Jira to GitHub Issues

Spring Data has migrated its entire history of issues from Jira to GitHub. The goal of this blog post is to give you context and details about this migration.

Migration Details

Spring Data issues have been managed for over ten years in Jira. Today, every issue and every comment has been imported into GitHub. There is a lot to consider in such a move, so let’s take a tour and go over some details.

Spring Data consists of 19 individual projects, each one of which is associated with its own issue tracker namespace. Four projects (Spring Data Build, BOM, Envers, and R2DBC) have been using GitHub. One project (Spring Data GemFire) was not migrated as it is in maintenance mode and is going end of life soon.
During this migration, we migrated almost 15,000 tickets from 14 Jira projects into 14 GitHub repositories.

Read more

YMNNALFT: Reactive Dataflow with Project Reactor

Welcome to another installment of You May Not Need Another Library For That (YMNNALFT)! I’ve spent a lot of time since 2016 illuminating (or trying to, anyway!) some of the more enormous opportunities in the Spring ecosystem in my Spring Tips videos. Today, however, I come to you in a different spirit, wanting to focus on the little, sometimes hidden, gems that do fantastic things and that might spare you an additional third-party dependency and its implied complexity.

And it’s a good thing we’re covering some of these complexity-reducing gems, too, you see, because the world is a confusing, complex, and dizzying place, and nowhere is that more evident than in the world of reactive data stream composition. Life comes at you fast and data, even more so. Data originates from everything (network services, databases, in-memory computation, threaded code, etc.). Data comes in many different sizes and shapes (one record, ten records, infinite records, etc.). Data comes in different volumes, starving or overwhelming its consumers. Data arrives at different cadences and times: now, later, all at once, periodically, etc. It’s much more natural to talk about data that’s already in memory, in hand, so to speak, than data that hasn’t yet materialized. And it’s more natural to talk about data in the single-threaded case than to deal with it in the concurrent case.

Read more

This Week in Spring, January 5th, 2020 - 10th Anniversary Edition

Hi, Spring fans! Happy new year! And welcome to another installment of This Week in Spring! Today is a significant installment because it marks a decade of This Week in Spring!

I started this roundup after a fun discussion with the legendarily nice guy and SpringSource co-founder Keith Donald in late 2010 over the holiday. Lo, the first week of January 2011, the first edition of this roundup went out the door on the old SpringSource.org blog.

It’s been so much fun putting together this roundup, without fail, every Tuesday for the last decade. You wouldn’t believe the lengths to which I went to get this out on Tuesday, well, my Tuesday, no matter where I was. I’d be on planes all the time and the original blog software on SpringSource.org didn’t support scheduling posts, so I’d either publish it a little early or - if I was going to be on a plane for the entirety of the useful day - I’d have my then manager Adam Fitzgerald post it for me. He reviewed the content for the first few years of the blog, too. What a legend that guy is. I learned a ton (about everything really, but also writing in particular) working with him. Nowadays, most flights longer than an hour or two have wi-fi onboard; but not so back then. Nowadays the software we use to blog - custom, open-source software that we built with Spring back in 2013 that underpins the spring.io) experience - supports scheduled posts, as well, so it’s much easier to get this post out on time.

Read more

YMNNALFT: Easy Docker Image Creation with the Spring Boot Maven Plugin and Buildpacks

Welcome to another installment of You May Not Need Another Library For That (#YMNNALFT)! I’ve spent a lot of time since 2016 illuminating (or trying to, anyway!) some of the more enormous opportunities in the Spring ecosystem in my Spring Tips videos. Today, however, I come to you in a different spirit, wanting to focus on the little, sometimes hidden, gems that do fantastic things and that might spare you an additional third-party dependency and its implied complexity.

Have you tried out Paketo? It’s neat-o! It alleviates one of the biggest pains of cloudy software these days:Dockerfiles.

Read more

This Year in Spring - 2020 Edition

Hi, Spring fans!

You know what I did? I goofed, people. I accidentally released This Week in Spring on this the last week of December, the last month of the year! And I shouldn’t have. I should not have done that. Usually, you see, I turn the final installment of This Week in Spring for a given year into the aptly named This Year in Spring, a celebration of the big tentpole themes that have defined the year (well, from my perspective, anyway). Then I include the usual This Week in Spring roundup inline. I forgot to do that first part, so I am publishing this as a separate post. Hey, it’s tradition.

Read more

This Week in Spring - December 29th, 2020

Hi, Spring fans! Welcome to another installment of This Week in Spring!

How are you? How’re things? I spent this morning on a fun two-hour panel hosted by the Barcelona JUG (who run the JBCN conference, among other things) talking about all sorts of things including GraalVM native images, new features in the Java language, cloud-native applications, and so much more. Thanks for having me!

I am so happy about this week’s roundup and we’ve got a lot to cover so let’s get to it!

Read more

Cloud Events and Spring - part 2

Introduction

We begin with a quick summary of the previous post.

  • Message is an adequate structure and abstraction with which to consume data that represents a Cloud Event in the context of Spring. We hope it was clear.
  • In Spring, our commitment to isolate functional versus non-functional concerns lets us address non-functional aspects (such as send, receive, retry, connect, convert, and others) at the framework level, letting you (mostly) concentrate on actual business logic and letting you keep your code simple and pluggable to a variety of execution contexts (more on this later).
Read more