Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JUG Saxony Day 2023: Upgrade to Spring Boot 3? Spring Tools to the Rescue!

JUG Saxony Day 2023: Upgrade to Spring Boot 3? Spring Tools to the Rescue!

Martin Lippert

October 12, 2023
Tweet

More Decks by Martin Lippert

Other Decks in Programming

Transcript

  1. Martin Lippert, @martinlippert
    September 2023
    Upgrade to Spring Boot 3?
    Spring Tools to the Rescue
    Copyright © 2022 VMware, Inc. or its affiliates.

    View Slide

  2. New Spring Boot releases all the time
    ● Many patch releases all the time
    ● New minor release every 6 month, sometimes new major releases
    ● It is super important to stay up-to-date
    ● But it is sometimes hard to always stay up-to-date
    Where are we?

    View Slide

  3. Release Notes +
    Migration Guides
    ● You have to read
    everything carefully
    ● You need to find out what
    needs to be changed for
    your project
    ● You need to apply all
    those changes manually
    How to upgrade?

    View Slide

  4. Let’s do something about this
    (Spring Tools to the Rescue)

    View Slide

  5. Let the user know
    ● Automatically check the versions that you use
    ● Show information about new versions and support ranges
    Help the user to upgrade
    ● Migration guides written in “code”
    ● Looks at your project and applies necessary changes - AUTOMATICALLY
    ● Some limitations apply
    What is new to Spring Tools?

    View Slide

  6. No silver bullet
    ● The tools apply many changes, but not all of them
    ● The goal is to automate as much as possible
    ● There is no guarantee that you are done with the upgrade afterwards - probably
    additional manual steps needed
    ○ But this will improve with every tools release - of course… 😉
    Limitations

    View Slide

  7. Looking for feedback
    Reminder: Everything that you will see is early days
    ● We are looking for feedback and suggestions
    ● If you want to get involved here, let us know

    View Slide

  8. Live Demo
    (Spring Version Validation & Upgrade Support)

    View Slide

  9. What is OpenRewrite?
    ● “Open-source, semantic type aware search and transformation framework.”
    ● “OpenRewrite enables large-scale distributed source code refactoring for framework
    migrations, vulnerability patches, and API migrations”
    ● Automatically transform source code (for various purposes)
    ● https://docs.openrewrite.org/
    ● https://github.com/openrewrite
    Based on initial work at Netflix to keep source code up-to-date. Sponsored now by Moderne.io.
    The Moderne SaaS allows organizations to run search and transformations across hundreds of
    repositories (millions of lines of code) simultaneously and offer a free service for the OSS community
    at https://public.moderne.io/
    Under the hood

    View Slide

  10. What can OpenRewrite be used for?
    ● Patching CVEs
    ● Migrate from Java 8 to Java 11 to Java 17…
    ● Migrate between framework versions
    ● Automatically adapt code to changed APIs
    ● …
    ● Works across various source file types (like Java Source Code, property files, YAML,
    other languages, etc.)
    Purpose

    View Slide

  11. How does OpenRewrite work internally?
    ● Step 1: Parse source files into AST
    ○ Type resolution
    ○ Keep formatting intact
    ● Step 2: Run visitors on ASTs to transform them
    ○ Visitors contain the logic what exactly to do for the refactoring, the migration,
    the code fix, etc.
    ● Step 3: Generate source changes
    The internals

    View Slide

  12. Recipes aggregate visitors
    ● Users deal with recipes
    ○ The AST visitors are an implementation detail
    ● Recipes are either
    ○ defined using YAML, or
    ○ implemented in Java
    Recipes

    View Slide

  13. Recipes can be written by anyone
    ● OpenRewrite comes with a huge set of basic transformation recipes pre-packaged
    and ready-to-use
    ○ https://docs.openrewrite.org/reference/recipes
    ● It is easy to use them and write custom recipes
    ● Community around recipes
    ● Packages could bring their own recipes
    ○ E.g. a library contains recipes to migrate client code to a new version of the
    library
    The power behind it

    View Slide

  14. Transforming the code
    Running recipes via Maven or Gradle
    ● ./mvnw rewrite:discover - Lists all the available recipes
    ● ./mvnw rewrite:run - Runs the recipes configured as active (in the build
    config)
    ● ./mvnw rewrite:dryRun - Runs the recipes, but creates a patch file instead of
    changing the files directly

    View Slide

  15. What we do inside the Spring Tools
    List and run recipes from the UI
    ● Show the recipes that are available
    ● Let the user select the recipes
    ● Execute the recipes within the IDE

    View Slide

  16. Authoring recipes
    You can write your own recipes and try them
    ● A preference allows you to add your own recipes to the language server
    ● Write them in one workspace, test them in another
    ● No need to restart the IDE, just press “Refresh”

    View Slide

  17. Live Demo
    (writing your own recipes)

    View Slide

  18. Another use case
    Validations and Quick Fixes
    ● Let’s now push this beyond running recipes on projects
    ● Let’s combine this with validations/markers and code actions/quick fixes
    ● This goes beyond what OpenRewrite supports out-of-the-box, but it can be added on
    top

    View Slide

  19. Validations and Quick Fixes
    Something that looks like this
    validation
    code action / quick fix
    (implemented as a recipe)

    View Slide

  20. Live Demo
    (additional cool new things)

    View Slide

  21. OpenRewrite
    ● https://docs.openrewrite.org/
    ● https://github.com/openrewrite
    IDE Integration
    ● Started as part of the Spring Tools: https://github.com/spring-projects/sts4/
    ● Independent of Spring Tooling in the future?
    ● Contact us on Twitter: http://twitter.com/springtools4/
    Resources

    View Slide

  22. Thank you
    @martinlippert
    © 2022 Spring. A VMware-backed project.
    (special thanks to Tyler van Gorder and Alex Boyko for their support and work on this)

    View Slide