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

Next-Generation Cloud Native Apps with Spring Boot 3

Thomas Vitale
February 17, 2023

Next-Generation Cloud Native Apps with Spring Boot 3

The recent release of Spring Boot 3 and Spring Framework 6 laid the foundation for the next generation of modern Java applications. This session will highlight what’s new, and demonstrate patterns and techniques for cloud-native development.

Support for generating native images with GraalVM is now part of the core framework, making it straightforward to build efficient applications with instant startup time and reduced memory consumption. The new Java 17 baseline and support for Jakarta EE 10 unlocks many new features and integrations. Observability is now a core tenet of the Spring ecosystem, with monitoring and tracing built into each Spring module and powered by Micrometer and OpenTelemetry. Web applications can now rely on new features to handle errors based on the Problem Details for HTTP APIs specification. Finally, HTTP clients can now be powered by convenient interfaces for which the framework generates the implementation.

Thomas Vitale

February 17, 2023
Tweet

More Decks by Thomas Vitale

Other Decks in Technology

Transcript

  1. Thomas Vitale
    Systematic
    Feb 16th, 2023
    Next-Generation Cloud Native
    Apps with Spring Boot 3
    @vitalethomas

    View full-size slide

  2. Systematic
    • Architect at Systematic,
    Denmark.

    • Author of “Cloud Native Spring
    in Action” (Manning).

    • OSS contributor (Java, Spring,
    Cloud Native Technologies)
    Thomas Vitale
    thomasvitale.com @vitalethomas

    View full-size slide

  3. Spring
    @vitalethomas

    View full-size slide

  4. thomasvitale.com @vitalethomas
    https://spring.io
    @vitalethomas

    View full-size slide

  5. Java 17
    @vitalethomas

    View full-size slide

  6. Java 8 -> 11 -> 17
    Performance improvements
    @vitalethomas
    Java 8
    ‣Startup: 3.784 s


    ‣Max heap used: 113 MiB


    ‣Committed heap: 177 MiB
    Java 11
    ‣Startup: 2.204 s


    ‣Max heap used: 43 MiB


    ‣Committed heap: 74 MiB
    Java 17
    ‣Startup: 1.776 s


    ‣Max heap used: 37 MiB


    ‣Committed heap: 55 MiB

    View full-size slide

  7. Data Persistence
    @vitalethomas

    View full-size slide

  8. Data Integration
    Spring Data for Relational Databases
    Spring Data JPA
    ‣JPA & Hibernate


    ‣Repositories


    ‣JDBC
    Spring Data JDBC
    ‣DDD Principles


    ‣Repositories


    ‣JDBC
    Spring Data R2DBC
    ‣DDD Principles


    ‣Repositories


    ‣R2DBC
    @vitalethomas

    View full-size slide

  9. Schema and data management
    Flyway: Version control for your database
    SQL Migrations


    Schema changes
    Java Migrations


    Data changes
    V1 Init schema
    V2 Add column
    V3 Create table
    V4 Add constraint
    time
    @vitalethomas

    View full-size slide

  10. Testing
    @vitalethomas

    View full-size slide

  11. Testing Spring Boot
    Types of auto tests for Spring Boot applications
    Unit Tests
    ‣JUnit


    ‣Mockito


    ‣No Spring context
    Integration Tests
    ‣@SpringBootTest


    ‣Web server


    ‣Full Spring context
    Slice Tests
    ‣@SpringWebMvc


    ‣@SpringDataR2dbc


    ‣Sliced Spring context
    @vitalethomas

    View full-size slide

  12. Testcontainers
    Testing with external dependencies
    Docker containers
    Run external
    dependencies as


    Docker containers
    Data Layer Tests
    Ensure environment
    parity by testing the data
    layer with the real
    database
    Integration Tests
    Use containers for
    databases, message
    queues, and web servers
    @vitalethomas

    View full-size slide

  13. Jakarta EE 9/10
    @vitalethomas

    View full-size slide

  14. From Java EE to Jakarta EE
    New package names since Jakarta EE 9
    import javax.persistence.Entity;
    import javax.servlet.Servlet;
    import javax.validation.Valid;
    @vitalethomas
    import jakarta.persistence.Entity;
    import jakarta.servlet.Servlet;
    import jakarta.validation.Valid;

    View full-size slide

  15. https://docs.openrewrite.org @vitalethomas

    View full-size slide

  16. Problem Details
    @vitalethomas

    View full-size slide

  17. https://www.rfc-editor.org/rfc/rfc7807 @vitalethomas

    View full-size slide

  18. Deployment
    @vitalethomas

    View full-size slide

  19. Packaging Spring Boot
    JAR & Container Image
    JAR
    Container Image
    Gradle


    bootJar
    Maven


    spring-boot:repackage
    Gradle


    bootBuildImage
    Maven


    spring-boot:build-image
    @vitalethomas

    View full-size slide

  20. Image
    pack build
    Cloud Native Buildpacks
    From source code to container image
    @vitalethomas

    View full-size slide

  21. Native Images
    @vitalethomas

    View full-size slide

  22. Spring Boot 3 and Native Images
    Native executables with GraalVM
    Slower

    Heavier

    Build
    Instant

    Startup
    Reduced

    Memory

    Consumption
    Instant

    Peak

    Performance
    Fewer

    Runtime

    Optimizations
    @vitalethomas

    View full-size slide

  23. Declarative Clients
    @vitalethomas

    View full-size slide

  24. Observability
    @vitalethomas

    View full-size slide

  25. Monitoring and management
    Operating applications in production
    Spring Boot Actuator
    ‣Health (liveness and readiness)


    ‣Metrics (Prometheus, OpenMetrics)


    ‣Flyway, Thread Dumps, Heap Dumps
    Micrometer Tracing
    ‣Distributed tracing


    ‣Instrumentation


    ‣OpenZipkin and OpenTelemetry
    @vitalethomas

    View full-size slide

  26. grafana.com @vitalethomas

    View full-size slide

  27. https://github.com/paketo-buildpacks/opentelemetry @vitalethomas

    View full-size slide

  28. https://github.com/paketo-buildpacks/samples/tree/main/java/opentelemetry
    @vitalethomas
    tasks.named('bootBuildImage') {
    buildpacks = [
    "paketo-buildpacks/java",
    "gcr.io/paketo-buildpacks/opentelemetry"
    ]
    environment = ["BP_OPENTELEMETRY_ENABLED": "true"]
    }
    OpenTelemetry
    Support in Paketo Buildpacks

    View full-size slide

  29. Resources
    @vitalethomas

    View full-size slide

  30. https://github.com/ThomasVitale/spring-boot-next-gen-apps

    View full-size slide

  31. https://github.com/ThomasVitale/awesome-spring

    View full-size slide

  32. https://tanzu.vmware.com/developer/tv/golden-path/8/

    View full-size slide

  33. Thomas Vitale
    Systematic
    Feb 16th, 2023
    Next-Generation Cloud Native
    Apps with Spring Boot 3
    @vitalethomas

    View full-size slide