[DRAFT] Migration to Spring Boot 3.4 How to

Upgrade the spring-boot-starter-parent version to the latest 3.4 version, find the version on https://github.com/spring-projects/spring-boot/tags

This is a milestone version like 3.4.0-M4 or a release candidate version like 3.4.0-RC5 because a final version is not available yet.

Add

<repository> <id>repo.spring.io-milestone</id> <url>https://repo.spring.io/milestone</url> </repository> <repository> <id>repo.spring.io-snapshot</id> <url>https://repo.spring.io/snapshot</url> </repository>

to the <repositories> section of pom.xml.

Add

<pluginRepositories> <pluginRepository> <id>spring-milestones</id> <url>https://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories>

to pom.xml for spring-boot-maven-plugin.

Replace javax.annotation.PostConstruct with jakarta.annotation.PostConstruct.

Add null argument to buildConsumerProperties() and buildProducerProperties() of KafkaProperties (example).

Migrated repositories

Some FOLIO modules and FOLIO libraries have been migrated to Spring Boot 3.4 to demonstrate that only small changes are needed:

Which flower release requires Spring Boot 3.4?

Spring Boot 3.4 is considered for Ramsons but Technical Council hasn’t decided yet.

Watch

and join the discussion on the #folio-spring-base Slack channel.

Why milestone and release candidate versions?

See Spring Boot Support Policy and Spring Boot Support Timeline:

Spring Branch

Initial Release

End of Support

Spring Branch

Initial Release

End of Support

Spring Boot 3.4.x

2024-11-21

2025-11-21

Spring Boot 3.3.x

2024-05-23

2025-05-23

See Ramsons Roadmap.

FOLIO Flower Release

Release

End of Support

FOLIO Flower Release

Release

End of Support

Ramsons

2024-12

2025 Q3/Q4

Ramsons support period ends in Q3 or Q4 2025: Ramsons will be released in December 2024 and will be supported until Trillium (R2 2025) gets released in Q3 or Q4 2025 (based upon assumption that future releases will follow a similar cadence to previous releases), see FOLIO support policy.

Several institutions run a FOLIO flower release in production until the end of the FOLIO flower release support period (and even beyond).

Spring Boot 3.3.x support ends several months before the Ramsons support period. To get full support with Spring Boot security fixes Spring Boot 3.4.x is needed for Ramsons.

Ramsons bug fest starts 2024-11-11, this is before the Spring Boot 3.4.x initial release, therefore a release candidate or milestone version must be used. A Spring Boot 3.4 release candidate will be available around 2024-10-21 (see release history below), this is in time for FOLIO bug fest.

Why snapshot versions?

For spring-cloud-starter-openfeign.

spring-cloud-starter-openfeign is a dependency of folio-spring-base, folio-spring-system-user and most spring based modules. spring-cloud-starter-openfeign 4.2.x is required for Spring Boot 3.4.x, and spring-cloud-starter-openfeign hasn’t published milestone or release candidate versions yet, only 3.4.0-SNAPSHOT versions: https://github.com/spring-cloud/spring-cloud-openfeign/tags

This is low risk because Spring Cloud OpenFeign project is treated as feature-complete.

When upgrade to release versions?

It hasn’t been decided yet whether all snapshot, milestone and release candidate versions must be upgraded to a release version during bug fix period and before the official flower release.

It might be reasonable to postpone this upgrade until a security fix for Spring Boot or one of its dependencies gets published.

What is Spring Boot’s milestone and release candidate history?

v3.3.x:

v3.2.x:

v3.1.x:

Spring Boot has always been released on the planned date.

Difference between RC and GA

Is there a risk that the devs on the spring project change their minds and some things in the 3.4 RC don't make it into 3.4 GA?

No, RC is feature freeze.

Even if a feature from RC gets removed in GA, most FOLIO modules won’t be affected because usually they don’t use features from the latest minor version.