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

Journey to Modern Spring

Journey to Modern Spring

Over the past decade, Spring has made tremendous advancements and improvements in a variety of areas that allow us to create applications in many different forms, such as Microservices, Event Driven, Reactive, Cloud, and Serverless.
And if you look at the major changes in Spring 6 and Spring Boot 3, which were recently released, you'll see that they're making a big push towards cloud native.
Today, we're going to take a look at what cloud native is and take a light-hearted look back at what Spring has in store for cloud native and the journey we've taken to get to where we are today.

Arawn Park

April 22, 2023
Tweet

More Decks by Arawn Park

Other Decks in Programming

Transcript

  1. +PVSOFZUP.PEFSO4QSJOH
    4QSJOHJOUIF$MPVE&SB
    https://www.cnbc.com/2022/11/11/global-shipping-industry-faces-a-new-problem-too-many-containers.html
    ߅ਊӂ

    View Slide

  2. ߅ਊӂ.apply {
    ࣗࣘ = "झ೐݂۞ց && ׼Ӕ݃௄"
    ౠ૚ = "݈ ݆਺, nߓࣘ ੤ࢤ"
    }

    View Slide

  3. 2013.12 2017.09
    4QSJOH
    BOE
    4QSJOH#PPU
    2018.03 2023.09
    2021.09
    2018.09
    2014.03 2014.04
    JDK 8
    Spring 4.x
    Spring Boot 1.x
    Spring 5.x
    Spring Boot 2.x
    JDK 11 JDK 17 JDK 21
    2022.11 2023.11
    4QSJOH

    View Slide

  4. 8IBUsTOFX
    4QSJOHBOE4QSJOH#PPU
    Java 17 and Jakarta EE 9 / 10
    Native Executables
    Observability
    Smaller Changes in Core and Web
    Testing
    Language: text blocks, switch expressions
    Core libraries: collection factory methods, etc
    Type system: records, sealed classes
    Module system: module introspection, module path scanning
    Enterprise: Servlet 5.0, JPA 3.0, etc
    Ahead Of Time AOT
    GraalVM Native Image
    Ahead Of Time AOT for TestContext
    Micrometer Observation

    View Slide

  5. 5SBEJUJPOBM+BWBBQQMJDBUJPO
    TUBSUVQTUFQT
    Application
    sources
    Package
    application
    Load and Parse
    configuration
    analyze
    dependencies
    build dependency
    tree
    execute
    code
    Build time Runtime

    View Slide

  6. /BUJWF&YFDVUBCMFT
    Application
    sources
    Package
    application
    Load and Parse
    configuration
    analyze
    dependencies
    build dependency
    tree
    execute
    code
    Native
    image
    Runtime
    Build time

    View Slide

  7. 8IBUsTOFYU
    4QSJOH
    BOE+%,
    Project Galahad
    GraalVM technology merging into OpenJDK
    Project CRaC
    Bootstrapping from a warmed up HotSpot JVM snapshot
    Project Loom
    lightweight threading model within the JVM
    Project Leyden
    OpenJDK aims to introduce well defined static images

    View Slide

  8. 'BTUFS TNBMMFS BOENPSFFGGJDJFOU
    https://noblerr.com/cloud-native-architecture/

    View Slide

  9. $MPVE/BUJWF
    https://venturebeat.com/business/4-trends-that-will-shape-the-cloud-native-world-in-2020/

    View Slide

  10. 8IBU

    View Slide

  11. 1SPQFSUJFTPG
    DMPVEOBUJWFBQQMJDBUJPOT
    Scalability Dynamically support increasing or decreasing workloads
    Loose coupling Components have minimal knowledge of each other
    Resilience Maintain level of service in face of adversity
    Observability Knowledge about the internal state inferred from the outside
    Manageability Level of control from the outside: update, configure, deploy

    View Slide

  12. https://www.fool.com.au/2020/02/22/4-top-asx-shares-to-help-you-start-a-share-portfolio/

    View Slide

  13. https://www.hpcwire.com/2012/03/19/cloud_moving_from_hype_to_reality/
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010

    View Slide

  14. 4QSJOHJTUIFNPEFSO
    QSPHSBNNJOHNPEFMGPS
    UIFDMPVEHFOFSBUJPO
    https://www.theregister.com/2009/08/19/springsource_cloud_foundry/
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010

    View Slide

  15. "QQMJDBUJPO1PSUBCJMJUZ
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2012
    2011
    2010
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4

    View Slide

  16. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2012
    2011
    2010
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    https://aionys.com/how-to-benefit-from-microservices-architecture-implementation/

    View Slide

  17. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2012
    2011
    2010
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    https://www.pngkey.com/detail/u2e6q8i1e6i1i1w7_netflix-oss-spring-cloud-netflix/

    View Slide

  18. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2012
    2011
    2010
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    https://architecturenotes.co/12-factor-app-revisited/

    View Slide

  19. #VJMEJOH
    1SPEVDUJPOSFBEZ
    "QQMJDBUJPOT
    2VJDLMZBOE&BTJMZ
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2012
    2011
    2010
    2013
    Spring 4

    View Slide

  20. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2012
    2011
    2010
    2013
    Spring 4

    View Slide

  21. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2012
    2011
    2010
    2013
    Spring 4
    https://thenewstack.io/solomon-hykes-leader-open-source-world-needs/

    View Slide

  22. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2012
    2011
    2010
    2013
    Spring 4
    https://techcrunch.com/2014/11/13/amazon-launches-lambda-an-event-driven-compute-service/

    View Slide

  23. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2012
    2011
    2010
    2013
    Spring 4
    https://openjdk.org/projects/valhalla/design-notes/state-of-valhalla/02-object-model
    Value
    Object
    (marker)
    Identity
    Object
    (marker)
    Cursor
    Point
    its
    box
    List
    Cursor
    its
    box
    List
    Object
    Iterator
    Abstract
    List
    (partially
    concrete)
    String
    (identity
    significant)
    int[]
    (mutable
    array)
    HashMap
    (mutable
    object)
    LocalDate
    (VBC = value
    based class,
    just before
    migration)
    Memory
    Segment
    (value object:
    secure, no box,
    better VBC)
    Optional
    (VBC migrated
    to value object,
    a NOID)
    int long
    float double
    boolean char
    byte short
    Island of Classless
    Scalar Primitives
    their boxes
    IDENTITY
    OBJECT REF
    (ID-O-SAURs)
    object identity
    construction safety
    fields stay together
    fast pointer compare
    VALUE OBJECT
    REF (NOIDs)
    (includes PRIM boxes)
    freely copyable
    field-wise flattenable
    construction safety
    atomicity, no identity
    THIS MIDDLE SWATH
    IS WHAT’S NEW
    IN VALHALLA
    NON-CONCRETE REF
    polymorphic abstract class or interface
    field-wise flattenable (like NOID)
    freely copyable (like NOID)
    no identity (like NOID)
    defaults to all-zero bits
    no nulls, no direct recursion
    no construction safety
    no atomicity (tearing)
    no polymorphism
    extended primitives, with
    class-like declaration
    POSSIBLE IN VALHALLA
    PRIMITIVES (one quadrant) REFERENCES (three quadrants)
    PRIM = ¬ REF, scalar/extended primitive REF = ¬ PRIM, all are nullable, recursive
    The Zoo of Java Field Types (Valhalla draft design, adding Extended Primitives)

    View Slide

  24. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2012
    2011
    2010
    2013
    Spring 4

    View Slide

  25. https://pxhere.com/ko/photo/489457

    View Slide

  26. https://magicseaweed.com/news/gallery-xl-cloudbreak/12854/
    $MPVE/BUJWF&OUFSQSJTF
    XBWFCSPLF
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010

    View Slide

  27. https://twitter.com/cloudnativejava
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010

    View Slide

  28. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010

    View Slide

  29. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010

    View Slide

  30. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010
    $MPVEOBUJWFUPQPMPHJFT
    Containers Lightweight and isolated computing contexts
    Orchestration Container scheduling, cluster management
    Serverless Servers and backing services managed by cloud providers

    View Slide

  31. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010
    https://thecamels.org/en/what-is-the-lift-and-shift-approach-when-migrating-to-the-cloud/

    View Slide

  32. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010
    DIBMMFOHFTUPCFDPNJOH
    DMPVEOBUJWFBQQMJDBUJPO
    Start up and Ramp up time
    Footprint
    Memory limits and imperfect CPU
    Application
    sources
    Package
    application
    Load and Parse
    configuration
    analyze
    dependencies
    build dependency
    tree
    execute
    code
    Build time Runtime

    View Slide

  33. 2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010
    https://www.womansworld.com/posts/animals/cats-in-small-spaces-169156

    View Slide

  34. 5IF3FBDUJWF8BZ
    https://cutt.ly/K82TXBO
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010

    View Slide

  35. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://www.focaloid.com/casestudies/building-a-customer-support-solution/

    View Slide

  36. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://github.com/topics/event-driven-architecture

    View Slide

  37. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010

    View Slide

  38. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-scanning-index
    *OEFYPG
    $BOEJEBUF$PNQPOFOUT
    Optimizes component scanning and improving performance
    Generating an index file with annotation process
    Reducing startup time and memory usage
    dependencies {

    annotationProcessor "org.springframework:spring-context-indexer:${version}"

    }
    Gradle
    META INF/spring.components
    dev.springrunner.application.PostWriteProcessor=org.springframework.stereotype.Service
    dev.springrunner.data.JdbcPostRepository=org.springframework.stereotype.Repository
    ...

    View Slide

  39. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://www.infoq.com/presentations/present-future-reactive-systems/

    View Slide

  40. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#spring-webflux
    8FCPO3FBDUJWFTUBDL
    Designed to high concurrency, scalability and
    low latency with non blocking I/O
    Asynchronous and event driven programming models
    Support for Spring projects, including data and security
    Ideal for building microservices and event driven architectures
    It s not ideal for all cases
    Consider specific requirements and trade offs to decide wisely

    View Slide

  41. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://developers.redhat.com/blog/2019/06/19/project-loom-lightweight-java-threads

    View Slide

  42. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://developers.redhat.com/blog/2019/06/19/project-loom-lightweight-java-threads
    1SPKFDU-PPN
    JDK 19 finally includes Project Loom as regular preview
    Virtual threads as lightweight threading model within JVM
    A different magnitude of scalability for imperative programming
    Implemented as virtual variants of java.lang.Thread
    Not blocking an operating system thread on I/O operations

    View Slide

  43. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://www.javacodegeeks.com/2017/09/java-9-jigsaw-jpms-modules-personal-exploration.html

    View Slide

  44. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    https://www.baeldung.com/project-jigsaw-java-modularity
    1SPKFDU+JHTBX
    Better organization and structure for large applications
    Efficiently manage complex dependencies, reduce footprint
    Strengthen security, maintainability with restricted access
    Boost Java runtime optimizations, reduce startup time

    View Slide

  45. Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010

    View Slide

  46. https://www.oreilly.com/library/view/beyond-the-twelve-factor/9781492042631/
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010

    View Slide

  47. %FQMPZJOHUP
    $POUBJOFST 4FSWFSMFTT
    2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010
    2015

    View Slide

  48. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2015
    https://developers.redhat.com/articles/2022/04/19/java-17-whats-new-openjdks-container-awareness
    $POUBJOFS"XBSFOFTT
    Kubernetes and orchestrations limit container with
    CPU, memory quotas
    JVM detects container environment for awareness
    Impact garbage collection,
    size of heap or thread pools, parallelism and etc
    Supported in Java 8u192 and later recommend 17 and 11.0.16
    ❯ java -XX:+UseContainerSupport app.jar
    Console
    2010

    View Slide

  49. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2015
    https://developers.redhat.com/articles/2022/04/19/java-17-whats-new-openjdks-container-awareness
    $16 .FNPSZMJNJUTBOEVTBHF
    CPU quota determines is available processors, but unreliable
    Increase processors or threads beyond default to avoid throttling
    Memory usage relies on system/classes, threads, max heap size
    Use heap size of 70 80 for containers
    ❯ java -XX:InitialRAMPercentage=75

    -XX:MinRAMPercentage=75 -XX:MaxRAMPercentage=75

    -XX:ActiveProcessorCount=<2x yourCpuLimit> 

    app.jar
    Console
    2010

    View Slide

  50. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2015
    https://learn.microsoft.com/en-us/azure/developer/java/containers/overview
    (BSCBHFDPMMFDUJPO
    JVM defaults use available processors and memory for ergonomics
    Select SerialGC or G1GC, depending on the resources available
    Always set GC based on heap size and available processes
    Resources available Default GC
    Any number of processors
    Up to 1791 MB of memory
    SerialGC
    2 processors
    1792 MB or more of memory
    G1GC
    2010

    View Slide

  51. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2015
    https://www.happycoders.eu/java/java-10-features/#Application_Class-Data_Sharing
    "QQMJDBUJPO
    $MBTT%BUB4IBSJOH
    JVM features for share common class metadata
    Reduces startup time and memory footprint
    Available in OpenJDK 8 and OracleJDK and later versions
    Ý
    Ý
    Ý
    Application
    sources
    Package
    application
    SharedArchiveFile
    JVM
    JVM
    JVM
    2010

    View Slide

  52. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2015
    https://www.reddit.com/user/EFdnV/comments/11t0i7e/how_can_cloud_native_java_evolve_to_help_achieve/
    2010

    View Slide

  53. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010
    2015
    https://docs.oracle.com/en/graalvm/index.html

    View Slide

  54. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2015
    &GGJDJFOU$POUBJOFS*NBHFT
    Running spring boot fat jar in container may cause overhead
    Unpacking and running separately may improve startup times
    Spring Boot enables layered docker images for optimized builds
    https://docs.spring.io/spring-boot/docs/current/reference/html/container-images.html#container-images.efficien
    FROM amazoncorretto:17 AS builder
    COPY . /
    RUN ./gradlew clean build
    RUN build/libs
    RUN jar -xf application.jar
    FROM amazoncorretto:17
    COPY --from=builder build/libs/
    ENTRYPOINT ["java -cp BOOT-INF/classes:BOOT-INF/lib/* springcamp.CloudApplication"]
    Dockerfile
    2010

    View Slide

  55. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2015
    https://docs.spring.io/spring-boot/docs/current/reference/html/container-images.html#container-images.docker
    %PDLFSGJMFT
    $MPVE/BUJWF#VJMEQBDLT
    Make dockerfiles for optimized image with layertools
    Buildpacks convert apps into something that cloud platform run
    Support directly for both maven and gradle
    FROM amazoncorretto:17 AS builder
    COPY . /
    RUN ./gradlew clean build
    RUN java -Djarmode=layertools -jar build/libs/application.jar extract
    FROM amazoncorretto:17
    COPY --from=builder application/dependencies/ ./
    COPY --from=builder application/spring-boot-loader/ ./
    COPY --from=builder application/snapshot-dependencies/ ./
    COPY --from=builder application/application/ ./
    ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
    Dockerfile
    2010

    View Slide

  56. 2016
    2017
    2018
    2019
    2020
    2021
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2010
    2015
    https://spring.io/blog/2021/03/11/announcing-spring-native-beta

    View Slide

  57. 2016
    2017
    2018
    2019
    2022
    2014
    2013
    2023
    Spring 5
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2012
    2011
    2015
    /BUJWF&YFDVUBCMFT
    2010
    2021
    2020
    Application
    sources
    Package
    application
    Load and Parse
    configuration
    analyze
    dependencies
    build dependency
    tree
    execute
    code
    Native
    image
    Runtime
    Build time

    View Slide

  58. (FUUJOHTUBSUFEXJUI
    /BUJWF
    https://gbiomed.kuleuven.be/nl/biomedia/christophedeleclusepassievooratletiek
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    2016
    2017
    Spring 5
    Java 21

    View Slide

  59. Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    2016
    2017
    Spring 5
    Java 21
    Spring AOT Plugin
    Spring
    application
    sources
    javac Application bytecode
    AOT sources
    javac
    AOT
    bytecode
    Native
    configuration
    native image
    compiler
    Native
    Executable
    Substrate VM
    8JOEPXT&9&GJMF
    -JOVY&-'GJMF
    NBD04.BDI0
    /BUJWF&YFDVUBCMFT

    View Slide

  60. Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    2016
    2017
    Spring 5
    Java 21
    4QSJOH"05 "IFBEPG5JNF

    Reducing startup time and memory footprint
    Runtime hints for reflection, resources, serialization, proxies
    Optional for optimized JVM deployments
    Precondition for GraalVM native executables
    AOT is a tradeoff: extra build setup and less flexibility at runtime
    AOT is compiles spring apps to native executable binaries
    https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#core.aot

    View Slide

  61. plugins {

    id 'org.graalvm.buildtools.native' version '0.9.17'

    }
    Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    2016
    2017
    Spring 5
    Java 21
    (SBBM7./BUJWF*NBHF4VQQPSU
    GraalVM as the de facto standard for native executables
    Strong closed world assumption, no runtime adaptations
    AOT processed application as input native executable
    Very long build time for actual native code generation
    Gradle
    ❯ gradle processAot
    ❯ gradle processTestAot
    ❯ gradle bootBuildImage
    https://docs.spring.io/spring-boot/docs/current/reference/html/native-image.html

    View Slide

  62. Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    2016
    2017
    Spring 5
    Java 21
    Ý
    Ý
    Metrics Tracing Logs
    distributed tracing
    https://spring.io/blog/2022/10/12/observability-with-spring-boot-3
    0CTFSWBCJMJUZ

    View Slide

  63. Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2018
    2019
    2020
    2021
    2014
    2013
    2012
    2011
    2010
    2016
    2017
    Spring 5
    Java 21
    BMXBZTCFXBUDIJOH
    2022
    2023
    Beyond traditional monitoring
    Constant partial degradation/failure
    Expect the unexpected
    Answer unknown questions about your system
    Observability is achieved through a set of tools and practices
    that aims to turn data points and context into insights

    View Slide

  64. Spring Boot 2
    Java 11
    Java 17
    Spring 6
    Spring Boot 3
    Spring Boot 1
    Java 8
    Spring 4
    2015
    2018
    2019
    2020
    2021
    2022
    2023
    2014
    2013
    2012
    2011
    2010
    2016
    2017
    Spring 5
    Java 21
    4QSJOH'SBNFXPSLm
    /PWFNCFS
    Foundation for Spring Boot 3.2 3.3
    Production ready on JDK 17 21 LTS

    View Slide

  65. CZEFTJHOPSCZDIBODF
    CVUSFBMMZDPPM
    https://www.imd.org/ibyimd/brain-circuits/five-steps-to-building-an-inclusive-strategy/

    View Slide

  66. 5IF&OE

    View Slide

  67. ߅ࢿ୍ নࣻৌ
    ӒܻҊ׼Ӕ݃௄ழޭפ౭प
    https://charity.lovetoknow.com/Words_to_Thank_Volunteers

    View Slide

  68. 3FGFSFODF
    Spring Framework 6 Infrastructure Themes
    Cloud Native Spring in Action
    JVM Kubernetes: Optimizing Kubernetes for Java Developers
    Kubernetes Native Java with Quarkus

    View Slide