Skip to content
ByteKnot Labs

Track 02 · Full-stack Java

Java and Spring Boot upgrades and modernisation

Back on supported versions, one releasable step at a time.

Overview

Overview

ByteKnot Labs upgrades Java systems that have fallen behind: Java 8, 11 and 17 applications moved to Java 21 or 25 LTS, Spring Boot 2.x and 3.x moved to Spring Boot 4, javax packages to jakarta, Jackson 2 to 3, and Hibernate and Spring Security brought up to date. Monoliths are split into well-bounded modules where that helps. We add tests around each area before changing it, use OpenRewrite recipes and AI coding assistants for the mechanical changes, and an engineer reviews every change. Each step ships on its own, so the system keeps running throughout.

Java 8 → 25 · Spring Boot 2 → 4 · tests first

You probably need this if

  • You are on Spring Boot 2 or 3, and open-source security fixes have stopped.
  • Production still runs Java 8 or 11 because nobody knows what an upgrade would break.
  • A security scan flags libraries you cannot update without a framework upgrade.
  • Every change to the monolith waits for the one person who understands it.

Approach

How we build it.

  1. 01

    Inventory first

    We list every module, library and runtime, check each against its end-of-support date, and write down the upgrade path and its risks.

  2. 02

    Tests around what we touch

    Integration tests go around an area before we change it, so behaviour is pinned and a regression fails in CI, not in production.

  3. 03

    Automate the mechanical work

    Recipes and AI coding assistants handle renames, imports and build files. An engineer reviews every change and does the parts no recipe covers.

  4. 04

    Small, releasable steps

    Runtime, then framework, then modules. Each step goes to production on its own, with a way back.

Deliverables

What you get.

  • Upgrade assessment: inventory, support dates, risks and a written plan
  • Integration tests around every area we change
  • Java 8, 11 or 17 moved to Java 21 or 25 LTS
  • Spring Boot 2.x or 3.x moved to Spring Boot 4, including jakarta and Jackson 3
  • Library, security and CVE clean-up
  • MySQL 8.0 moved to 8.4 or 9.7 LTS, with a rehearsed cut-over
  • Monolith split into modules, and into services only where it pays
  • CI pipeline, container images and a runbook

Stack

What we build it with.

Chosen per project, benchmarked where it matters, and all of it something your team can run after us.

  • Java 21 / 25 LTS
  • Spring Boot 4
  • Spring Framework 7
  • Jakarta EE 11
  • Jackson 3
  • Hibernate 7
  • Spring Security 7
  • OpenRewrite
  • Spring Modulith
  • JUnit
  • Testcontainers
  • Flyway
  • MySQL 8.4 / 9.7 LTS
  • Docker
  • GitHub Actions
Why we use each one

Typical builds

What this looks like in practice.

  • Spring Boot 2.7 to 4

    Two generations in two releases: the jakarta move first, then Spring Boot 4.

  • Java 8 estate

    Applications moved to a current LTS release, with build tools and runtime upgraded together.

  • Monolith into modules

    Clear boundaries inside one deployable first; separate services only where they earn it.

  • Unsupported database

    MySQL 8.0 moved to a supported LTS release, rehearsed on a copy before the real cut-over.

How a project runs

Process

Discover, then Design, then Build, then Launch and hand over. A working build every week, on a staging environment in your cloud.

How a project runs

Terms

Code in your GitHub, infrastructure in your cloud, nothing trained on your data, and everything yours when we leave.

Read the terms

FAQ

Java modernisation: questions

Last reviewed

Is Spring Boot 3 still supported?

Not by the open-source project. Open-source support for 3.5, the last 3.x release, ended on 30 June 2026, and support for 4.0 ends on 31 December 2026. Paid extended support is available if you need more time, but we plan the move to the current 4.x release.

Should we go to Spring Boot 4.0 or 4.1?

To the current 4.x release, which today is 4.1. Spring Boot 4.0 stops receiving open-source fixes at the end of 2026. The route still runs through the latest 3.5 release first, with its deprecation warnings cleared.

What changes in Spring Boot 4?

It moves to Spring Framework 7 and Jakarta EE 11, makes Jackson 3 the default JSON library with new package names, splits auto-configuration into smaller modules with renamed starters, replaces @MockBean with @MockitoBean in tests, and drops Undertow. Java 17 is still the minimum. Flyway and Liquibase now need their own starters, so a missed starter can stop migrations running without an error.

We are still on Spring Boot 2.7. Can we go straight to 4?

Yes, as two releases. Spring Boot 3 moves javax packages to jakarta and raises the minimum to Java 17; Spring Boot 4 brings Jackson 3 and the new modules. Doing them separately keeps each change testable and each release reversible.

Which Java version should we move to?

Java 25, the current long-term-support release, for most systems. Java 21 is also supported for years. Support dates depend on whose JDK you run: Oracle's Premier Support for Java 17 ended in September 2026, while Eclipse Temurin 17 gets security updates until October 2027. We check which JDK you use before choosing.

How long does an upgrade take?

It depends on the size of the codebase, how far behind it is and how much test coverage exists. The assessment gives you a plan with a date and a fixed price before the work starts, and each step is released on its own, so you see progress before the end.

Do you use AI tools for upgrades?

Yes, next to deterministic tools. OpenRewrite recipes make the mechanical changes, AI coding assistants help with what the recipes miss, such as Jackson 3 edge cases, and an engineer reviews every change before it merges. The tests decide when a step is done, not the tool.

Should we move to microservices while we upgrade?

Usually not first. We split the monolith into well-bounded modules inside one deployable, then move a module out as a service only when it needs to scale or release on its own. That keeps the operational cost down.

Can you upgrade our MySQL as well?

Yes. MySQL 8.0 reached end of life in April 2026. We move to 8.4 or 9.7 LTS, rehearse on a copy, and plan a cut-over with a way back.

Taking on new projects

Planning work on Java modernisation? Let's talk.

A short call, a written brief, and a straight answer on scope, price and timeline before any work starts. NDA first if you need one.