SlideShare a Scribd company logo
The Path Towards Spring
Boot Native Applications
September 2–3, 2020
springone.io
Join https://springone.slack.com #session-the-path-towards-spring-boot-native-applications
1
Andy Clement
Sébastien Deleuze
Safe Harbor Statement
The following is intended to outline the general direction of VMware's offerings. It is intended for information
purposes only and may not be incorporated into any contract. Any information regarding pre-release of
VMware offerings, future updates or other planned modifications is subject to ongoing evaluation by
VMware and is subject to change. This information is provided without warranty or any kind, express or
implied, and is not a commitment to deliver any material, code, or functionality, and should not be relied
upon in making purchasing decisions regarding VMware's offerings. These purchasing decisions should only
be based on features currently available. The development, release, and timing of any features or
functionality described for VMware's offerings in this presentation remain at the sole discretion of Pivotal.
Pivotal has no obligation to update forward looking information in this presentation.
2
Agenda
● Native applications
● Spring Boot native applications
● Where are we?
● Getting started
● Demo
● spring-graalvm-native
● The road ahead
3
Native applications
5
Native ahead-of-time compilation
Java or Kotlin
application
GraalVM native
compiler
Native
executable
Lightweight
container image
EXE0110
5
Two main benefits
6
Instant startup
Reduced memory
consumption
7
Scale to zero
You only pay when your application is
used
Serverless for any kind of workload
including regular web applications
Good fit with platforms like Knative
3x to 5x memory reduction (RSS)
Cheaper cloud instances
Critical with systems splitted into multiple
microservices
Instant Startup
Reduced memory
consumption
Our goal is cheaper hosting of your Spring Boot applicationsCheaper and more sustainable Spring Boot applications
7
JVM and native executables trade-offs
8
Key differences between JVM and native
9
● Static analysis of your application from the main entry point
● Configuration required for:
○ Reflection
○ Proxies
○ Resources
● Classpath fixed at build time
● No class lazy loading
● Some code will run at build time
GraalVM native is a source of inspiration for the
JVM ecosystem
10
An upcoming Java platform standard with
Project Leyden
11
GraalVM 20.2
● Better static container image support
● Faster native image generation
● java.* and javax.* classes are now mostly initialized at runtime
● Enterprise edition only
○ Low Latency Garbage Collector (G1 like)
○ Loop unrolling optimization
12
Still in “early adopter” mode (supported with breaking
changes) but matures quickly
13
Spring Boot native applications
Good fit with Spring Boot stand-alone
deployment model
15
Compiling your application to a native executable
requires reflection/proxy/resources configuration
16
The Spring team is doing most of the hard work
17
Our goal is to support compilation of existing or
new Spring Boot applications to native
executables. Unchanged.
18
“We are excited about the great partnership between the Spring and
GraalVM engineering teams to support native ahead-of-time
compilation for millions of Spring Boot applications. This is a game
changer enabling low memory footprint and instant startup for these
workloads.”
Thomas Wuerthinger, GraalVM founder & project lead
19
Collaboration between Spring and GraalVM teams
Leverage Spring Boot container image support
2
0
> mvn spring-boot:build-image
or
> gradle bootBuildImage
Using Paketo Buildpacks
21
https://paketo.io/
To create lightweight container images
2
2
Where are we?
Timeline
GraalVM fixes
and improvements
Incubating support in
spring-graalvm-native
Spring Boot support
We are here
24
https://github.com/oracle/graal/labels/spring
25
Timeline
GraalVM fixes
and improvements
Incubating support in
spring-graalvm-native
Spring Boot support
We are here
26
https://github.com/spring-projects-experimental/spring-graalvm-native
27
spring-graalvm-native
● Incubating Spring Boot native application support
○ It includes a plugin for the GraalVM native image builder
● Analyses the Spring Boot application at build time
○ Computes the most optimal native image configuration
○ Challenge is doing that with static analysis
● Also perform some build time transformation for:
○ Optimized footprint
○ Compatibility
28
We have just released 0.8.0
● GraalVM 20.2 baseline
● Use Spring Boot 2.4.0 latest milestone
● Significant footprint improvements
● Wider range of supported technology
● New experimental functional mode
● Spring Boot lightweight container integration
○ Maven
○ Gradle
29
Patch updates until Spring Boot 2.4.0
● 0.8.1 (September 2020)
○ Upgrade to Spring Boot 2.4.0-M3
● 0.8.2 (October 2020)
○ Upgrade to Spring Boot 2.4.0-RC1
● 0.8.3 (November 2020)
○ Upgrade to Spring Boot 2.4.0
○ GraalVM 20.3 baseline
30
Starters supported in 0.8.x
● Actuator
● Cache
● Data JPA, MongoDB, R2DBC, Redis
● JDBC
● Logging (Logback)
● Thymeleaf
● Validation
● Web (Spring MVC with Tomcat)
● Webflux (Netty)
● Wavefront
● Spring Cloud Function
31
Timeline
GraalVM fixes
and improvements
Incubating support in
spring-graalvm-native
Spring Boot support
We are here
32
Comparing Spring Boot 2.3 LoggingSystem ...
33
Map<String, String> systems = new LinkedHashMap<>();
systems.put("ch.qos.logback.core.Appender",
"org.springframework.boot.logging.logback.LogbackLoggingSystem");
systems.put("org.apache.logging.log4j.core.impl.Log4jContextFactory",
"org.springframework.boot.logging.log4j2.Log4J2LoggingSystem");
systems.put("java.util.logging.LogManager",
"org.springframework.boot.logging.java.JavaLoggingSystem");
SYSTEMS = Collections.unmodifiableMap(systems);
… with Spring Boot 2.4 one
34
ClassLoader classLoader = LoggingSystem.class.getClassLoader();
if (ClassUtils.isPresent("ch.qos.logback.core.Appender", classLoader)) {
return LogbackLoggingSystem::new;
}
if (ClassUtils.isPresent("org.apache.logging.log4j.core.impl.Log4jContextFactory", classLoader)) {
return Log4J2LoggingSystem::new;
}
if (ClassUtils.isPresent("java.util.logging.LogManager", classLoader)) {
return JavaLoggingSystem::new;
}
throw new IllegalStateException("No suitable logging system located");
New flags available in Spring Framework 5.3
# -3.6M RSS
-Dspring.xml.ignore=true
# -0.5M RSS
-Dspring.spel.ignore=true
35
A new Tomcat artifact optimized for native apps
<!-- -3.5M RSS -->
<dependency>
<groupId>org.apache.tomcat.experimental</groupId>
<artifactId>tomcat-embed-programmatic</artifactId>
<version>9.0.38</version>
</dependency>
36
Getting started
start.spring.io or an existing project
38
Make sure to use Spring Boot 2.4 latest milestone
39
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0-M2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Update configuration to avoid using proxies
40
@SpringBootApplication(proxyBeanMethods = false)
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Configure Maven plugin
41
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<BP_BOOT_NATIVE_IMAGE>true</BP_BOOT_NATIVE_IMAGE>
</env>
</image>
</configuration>
</plugin>
Add the spring-graalvm-native dependency
42
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-graalvm-native</artifactId>
<version>0.8.0</version>
</dependency>
Build the native application
43
> mvn spring-boot:build-image
Successfully built image 'docker.io/library/demo:0.0.1-SNAPSHOT'
Total time: 60 s
● No need for a GraalVM native local install
● Build happens in a container
● And produces a container
Run the native application
44
> docker run -p 8080:8080 docker.io/library/demo:0.0.1-SNAPSHOT
. ____ _ __ _ _
/ / ___'_ __ _ _(_)_ __ __ _    
( ( )___ | '_ | '_| | '_ / _` |    
/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::
Started application in 0.05 seconds (JVM running for 0.009)
You can also build a native executable without
using containers
45
Configure Maven plugin in a native profile
46
<plugin>
<groupId>org.graalvm.nativeimage</groupId>
<artifactId>native-image-maven-plugin</artifactId>
<version>20.2.0</version>
<configuration>
<mainClass>com.example.demo.DemoApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>native-image</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
Build the native application
47
> mvn -Pnative clean package
Total time: 60 s
● Need for a GraalVM native local install
● Build happens directly on your host (Linux, Mac and Windows are
supported)
● Produces a native executable
● No cross compilation
Run the native application
48
> target/com.example.demo.demoapplication
. ____ _ __ _ _
/ / ___'_ __ _ _(_)_ __ __ _    
( ( )___ | '_ | '_| | '_ / _` |    
/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::
Started application in 0.05 seconds (JVM running for 0.009)
Petclinic Demo
49
How fast is your PetClinic?
50
Sample On the JDK native-executable
petclinic-jdbc Build: 9s
Memory(RSS): 417M
Startup time: 2.6s
Build: 194s +2050%
Memory(RSS): 101M -75%
Startup time: 0.158s -94%
Ongoing work on footprint
Key metrics: build time, size of resultant image, and runtime memory footprint
51
Sample SpringOne 2019 SpringOne 2020
commandlinerunner Build: 90s
Exec. size: 48M
Memory(RSS): 29M
Build: 50s -45%
Exec. size: 22M -55%
Memory(RSS): 24M -17%
webflux-netty Build: 193s
Exec. size: 81M
Memory(RSS): 95M
Build: 79s -60%
Exec. size: 43M -47%
Memory(RSS): 47M -50%
webmvc-tomcat Build: 203s
Exec size: 105M
Memory(RSS): 70M
Build: 67s -67%
Exec. size: 42M -60%
Memory(RSS): 51M -27%
You can specify additional native configuration
52
For additional native configuration (eg. resources)
● Create a META-INF/native-image/resource-config.json file
● Wildcard patterns can be used
● Similar config for reflection and proxies
● See GraalVM documentation for more details
{
"resources": [
{ "pattern": "myresource.*" }
],
"bundles": [
{ "name": "your.pkg.Bundle" }
]
}
53
Tracing agent collected configuration
● An agent can assist in generating these files, available with GraalVM
java -Dorg.graalvm.nativeimage.imagecode=agent
-agentlib:native-image-agent=config-output-dir=META-INF/native-image Demo
● Agent has improved greatly during 2020, thanks to the GraalVM team
● Run application with agent attached to produce .json files
○ Exercise all code paths (manually or via tests) - producing (merging) many of
these collected configurations
● Access filter file supported to avoid including unnecessary infrastructure
5
4
Our CI checks Java 8/11 x GraalVM 20.2/20.3
55
spring-graalvm-native
Project structure and extensibility
● Core static analysis engine for Spring Applications
○ static: behaviour driven by separate ‘hints’
○ dynamic: extensible with Spring portfolio project awareness via plugins
● @NativeImageHint
○ Same information as JSON, but more modular, more type safe
○ hints attached to a trigger - an auto configuration active or a classpath
presence check
○ application analysis determines if triggers are active => activates those
hints
57
Hint with auto-configuration trigger
@NativeImageHint(trigger = R2dbcAutoConfiguration.class,
proxyInfos = {
@ProxyInfo(types={Serializable.class, InterfaceFoo.class})
},
typeInfos= {
@TypeInfo(types = EmbeddedDatabase.class,
access = AccessBits.LOAD_AND_CONSTRUCT)
}
)
public class R2dbcHints implements NativeImageConfiguration {
}
58
Opportunity for the community to contribute
59
The road ahead
spring-graalvm-native 0.9.0 (December 2020)
● First release with beta support
○ Spring Boot 2.4.0 and GraalVM 20.3 baseline
○ Subset of starters supported
○ Breaking change will happen (with upgrade paths)
● Wider support
○ Spring Security
○ Spring Batch
● Development-oriented container image
61
More starters supported in upcoming 0.9.x releases
62
Hidden gem in Spring Framework since 5.0:
functional bean registration
63
Comparing annotation and functional bean definition
@Configuration
public class SampleConfiguration {
@Bean
public Foo foo() {
return new Foo();
}
@Bean
public Bar bar(Foo foo) {
return new Bar(foo);
}
}
64
public class SampleInitializer implements
ApplicationContextInitializer<GenericApplicationContext> {
@Override
public void initialize(GenericApplicationContext ctx) {
ctx.registerBean(Foo.class, () -> new Foo());
ctx.registerBean(Bar.class,
() -> new Bar(ctx.getBean(Foo.class)));
}
}
@Configuration to functional configuration
65
Automated
transformation
from @Configuration
to functional
configuration
66
spring-init
Native applications functional configuration
67
Sample webmvc-tomcat webmvc-functional
With build time transformation to
functional configuration
Regular Spring Boot
application with Spring MVC,
Tomcat and Jackson
Build: 67s
Exec. size: 42M
Memory(RSS): 51M
Startup time: 0.06s
Build: 60s -10%
Exec. size: 37M -12%
Memory(RSS): 26M -49%
Startup time: 0.02s -66%
Experimentations on more build time transformations
● @Configuration to functional configuration transformation with
spring-init
● Infer proxyBeanMethods = false when possible
● Automatically set optimization flags when relevant
68
Spring Boot 3, based on Spring Framework 6, is
expected to provide first-class support for native
application deployment, as well as an optimized
footprint on the JVM.
69
Takeaways
● Spring Boot native applications are great to build lightweight containers
● Try it now with spring-graalvm-native 0.8
● Contribute support for your favorite starter
● Beta support in December with spring-graalvm-native 0.9
● Wider support and smaller footprint during 0.9.x releases
● Upcoming first-class native support in Spring Boot 3 / Framework 6
70
https://github.com/spring-projects-experimental/spring-graalvm-native
https://spring.io/blog
@sdeleuze on for fresh news
#springone@SpringOne
Stay Connected.

More Related Content

What's hot

Velero search &amp; practice 20210609
Velero search &amp; practice 20210609Velero search &amp; practice 20210609
Velero search &amp; practice 20210609
KAI CHU CHUNG
 
Curso gratuito de Docker
Curso gratuito de DockerCurso gratuito de Docker
Curso gratuito de Docker
Rafael Hernamperez Martin
 
CI and CD with Jenkins
CI and CD with JenkinsCI and CD with Jenkins
CI and CD with Jenkins
Martin Málek
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
NGINX, Inc.
 
Learning Docker from Square One
Learning Docker from Square OneLearning Docker from Square One
Learning Docker from Square One
Docker, Inc.
 
Red Hat Openshift Container Platform
Red Hat Openshift Container Platform Red Hat Openshift Container Platform
Red Hat Openshift Container Platform
rockplace
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
Winton Winton
 
CICD with Jenkins
CICD with JenkinsCICD with Jenkins
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with Kubernetes
Ramit Surana
 
오픈소스로 구축하는 클라우드 이야기
오픈소스로 구축하는 클라우드 이야기오픈소스로 구축하는 클라우드 이야기
오픈소스로 구축하는 클라우드 이야기
Nalee Jang
 
Docker Registry V2
Docker Registry V2Docker Registry V2
Docker Registry V2
Docker, Inc.
 
Virtual Container - Docker
Virtual Container - Docker Virtual Container - Docker
Virtual Container - Docker
Venkata Naga Ravi
 
What's Coming in CloudStack 4.19
What's Coming in CloudStack 4.19What's Coming in CloudStack 4.19
What's Coming in CloudStack 4.19
ShapeBlue
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with Janus
Lorenzo Miniero
 
BitBucket presentation
BitBucket presentationBitBucket presentation
BitBucket presentation
Jonathan Lawerh
 
Introduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopIntroduction to Kubernetes Workshop
Introduction to Kubernetes Workshop
Bob Killen
 
Leveraging Nexus Repository Manager at the Heart of DevOps
Leveraging Nexus Repository Manager at the Heart of DevOpsLeveraging Nexus Repository Manager at the Heart of DevOps
Leveraging Nexus Repository Manager at the Heart of DevOps
SeniorStoryteller
 
Monitoring at the Speed of DevOps
Monitoring at the Speed of DevOpsMonitoring at the Speed of DevOps
Monitoring at the Speed of DevOps
DevOps.com
 
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
Eueung Mulyana
 
IPMI is dead, Long live Redfish
IPMI is dead, Long live RedfishIPMI is dead, Long live Redfish
IPMI is dead, Long live Redfish
Bruno Cornec
 

What's hot (20)

Velero search &amp; practice 20210609
Velero search &amp; practice 20210609Velero search &amp; practice 20210609
Velero search &amp; practice 20210609
 
Curso gratuito de Docker
Curso gratuito de DockerCurso gratuito de Docker
Curso gratuito de Docker
 
CI and CD with Jenkins
CI and CD with JenkinsCI and CD with Jenkins
CI and CD with Jenkins
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
 
Learning Docker from Square One
Learning Docker from Square OneLearning Docker from Square One
Learning Docker from Square One
 
Red Hat Openshift Container Platform
Red Hat Openshift Container Platform Red Hat Openshift Container Platform
Red Hat Openshift Container Platform
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
CICD with Jenkins
CICD with JenkinsCICD with Jenkins
CICD with Jenkins
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with Kubernetes
 
오픈소스로 구축하는 클라우드 이야기
오픈소스로 구축하는 클라우드 이야기오픈소스로 구축하는 클라우드 이야기
오픈소스로 구축하는 클라우드 이야기
 
Docker Registry V2
Docker Registry V2Docker Registry V2
Docker Registry V2
 
Virtual Container - Docker
Virtual Container - Docker Virtual Container - Docker
Virtual Container - Docker
 
What's Coming in CloudStack 4.19
What's Coming in CloudStack 4.19What's Coming in CloudStack 4.19
What's Coming in CloudStack 4.19
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with Janus
 
BitBucket presentation
BitBucket presentationBitBucket presentation
BitBucket presentation
 
Introduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopIntroduction to Kubernetes Workshop
Introduction to Kubernetes Workshop
 
Leveraging Nexus Repository Manager at the Heart of DevOps
Leveraging Nexus Repository Manager at the Heart of DevOpsLeveraging Nexus Repository Manager at the Heart of DevOps
Leveraging Nexus Repository Manager at the Heart of DevOps
 
Monitoring at the Speed of DevOps
Monitoring at the Speed of DevOpsMonitoring at the Speed of DevOps
Monitoring at the Speed of DevOps
 
Kubernetes Basics
Kubernetes BasicsKubernetes Basics
Kubernetes Basics
 
IPMI is dead, Long live Redfish
IPMI is dead, Long live RedfishIPMI is dead, Long live Redfish
IPMI is dead, Long live Redfish
 

Similar to The Path Towards Spring Boot Native Applications

Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOT
VMware Tanzu
 
Going Serverless Using the Spring Framework Ecosystem
Going Serverless Using the Spring Framework EcosystemGoing Serverless Using the Spring Framework Ecosystem
Going Serverless Using the Spring Framework Ecosystem
VMware Tanzu
 
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
London Microservices
 
Spring: Your Next Java Micro-Framework
Spring: Your Next Java Micro-FrameworkSpring: Your Next Java Micro-Framework
Spring: Your Next Java Micro-Framework
VMware Tanzu
 
Pivotal Platform - December Release A First Look
Pivotal Platform - December Release A First LookPivotal Platform - December Release A First Look
Pivotal Platform - December Release A First Look
VMware Tanzu
 
Meet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento CloudMeet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento Cloud
Lyzun Oleksandr
 
Java and windows azure cloud service
Java and windows azure cloud serviceJava and windows azure cloud service
Java and windows azure cloud service
Jeffray Huang
 
[20200720]cloud native develoment - Nelson Lin
[20200720]cloud native develoment - Nelson Lin[20200720]cloud native develoment - Nelson Lin
[20200720]cloud native develoment - Nelson Lin
HanLing Shen
 
AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0
MoritzHalbritter
 
Effective Spring on Kubernetes
Effective Spring on KubernetesEffective Spring on Kubernetes
Effective Spring on Kubernetes
Neven Cvetković
 
[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1
Rubens Dos Santos Filho
 
Django app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh AgarwalDjango app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh Agarwal
ratneshsinghparihar
 
D. Andreadis, Red Hat: Concepts and technical overview of Quarkus
D. Andreadis, Red Hat: Concepts and technical overview of QuarkusD. Andreadis, Red Hat: Concepts and technical overview of Quarkus
D. Andreadis, Red Hat: Concepts and technical overview of Quarkus
Uni Systems S.M.S.A.
 
Cloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
Cloud-powered Continuous Integration and Deployment architectures - Jinesh VariaCloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
Cloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
Amazon Web Services
 
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
Oleg Shalygin
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
VMware Tanzu
 
GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers Workshop
Jody Garnett
 
Micronaut: A new way to build microservices
Micronaut: A new way to build microservicesMicronaut: A new way to build microservices
Micronaut: A new way to build microservices
Luram Archanjo
 
Microservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudMicroservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloud
Ben Wilcock
 
Node.js Tools Ecosystem
Node.js Tools EcosystemNode.js Tools Ecosystem
Node.js Tools Ecosystem
Rocket Software
 

Similar to The Path Towards Spring Boot Native Applications (20)

Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOT
 
Going Serverless Using the Spring Framework Ecosystem
Going Serverless Using the Spring Framework EcosystemGoing Serverless Using the Spring Framework Ecosystem
Going Serverless Using the Spring Framework Ecosystem
 
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
Lean microservices through ahead of time compilation (Tobias Piper, Loveholid...
 
Spring: Your Next Java Micro-Framework
Spring: Your Next Java Micro-FrameworkSpring: Your Next Java Micro-Framework
Spring: Your Next Java Micro-Framework
 
Pivotal Platform - December Release A First Look
Pivotal Platform - December Release A First LookPivotal Platform - December Release A First Look
Pivotal Platform - December Release A First Look
 
Meet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento CloudMeet Magento Spain 2019 - Our Experience with Magento Cloud
Meet Magento Spain 2019 - Our Experience with Magento Cloud
 
Java and windows azure cloud service
Java and windows azure cloud serviceJava and windows azure cloud service
Java and windows azure cloud service
 
[20200720]cloud native develoment - Nelson Lin
[20200720]cloud native develoment - Nelson Lin[20200720]cloud native develoment - Nelson Lin
[20200720]cloud native develoment - Nelson Lin
 
AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0AOT and Native with Spring Boot 3.0
AOT and Native with Spring Boot 3.0
 
Effective Spring on Kubernetes
Effective Spring on KubernetesEffective Spring on Kubernetes
Effective Spring on Kubernetes
 
[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1
 
Django app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh AgarwalDjango app deployment in Azure By Saurabh Agarwal
Django app deployment in Azure By Saurabh Agarwal
 
D. Andreadis, Red Hat: Concepts and technical overview of Quarkus
D. Andreadis, Red Hat: Concepts and technical overview of QuarkusD. Andreadis, Red Hat: Concepts and technical overview of Quarkus
D. Andreadis, Red Hat: Concepts and technical overview of Quarkus
 
Cloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
Cloud-powered Continuous Integration and Deployment architectures - Jinesh VariaCloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
Cloud-powered Continuous Integration and Deployment architectures - Jinesh Varia
 
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
 
GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers Workshop
 
Micronaut: A new way to build microservices
Micronaut: A new way to build microservicesMicronaut: A new way to build microservices
Micronaut: A new way to build microservices
 
Microservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudMicroservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloud
 
Node.js Tools Ecosystem
Node.js Tools EcosystemNode.js Tools Ecosystem
Node.js Tools Ecosystem
 

More from VMware Tanzu

Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14
VMware Tanzu
 
What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About It
VMware Tanzu
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023
VMware Tanzu
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at Scale
VMware Tanzu
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
VMware Tanzu
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a Product
VMware Tanzu
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
VMware Tanzu
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
VMware Tanzu
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
VMware Tanzu
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
VMware Tanzu
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
VMware Tanzu
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
VMware Tanzu
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
VMware Tanzu
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
VMware Tanzu
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
VMware Tanzu
 
SpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeSpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs Practice
VMware Tanzu
 
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsSpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
VMware Tanzu
 

More from VMware Tanzu (20)

Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14Spring into AI presented by Dan Vega 5/14
Spring into AI presented by Dan Vega 5/14
 
What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About It
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at Scale
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a Product
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
 
SpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeSpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs Practice
 
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsSpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
 

Recently uploaded

PathSpotter: Exploring Tested Paths to Discover Missing Tests (FSE 2024)
PathSpotter: Exploring Tested Paths to Discover Missing Tests (FSE 2024)PathSpotter: Exploring Tested Paths to Discover Missing Tests (FSE 2024)
PathSpotter: Exploring Tested Paths to Discover Missing Tests (FSE 2024)
andrehoraa
 
bangalore Girls call 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
bangalore Girls call  👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Deliverybangalore Girls call  👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
bangalore Girls call 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
sunilverma7884
 
ERP Software Solutions Provider in Coimbatore
ERP Software Solutions Provider in CoimbatoreERP Software Solutions Provider in Coimbatore
ERP Software Solutions Provider in Coimbatore
Nextskill Technologies
 
Mobile App Development Company in Noida - Drona Infotech.
Mobile App Development Company in Noida - Drona Infotech.Mobile App Development Company in Noida - Drona Infotech.
Mobile App Development Company in Noida - Drona Infotech.
Mobile App Development Company in Noida - Drona Infotech
 
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
revolutionary575
 
SAP implementation steps PDF - Zyple Software
SAP implementation steps PDF - Zyple SoftwareSAP implementation steps PDF - Zyple Software
SAP implementation steps PDF - Zyple Software
Zyple Software
 
InflectraCON 360: Risk-Based Testing for Mission Critical Systems
InflectraCON 360: Risk-Based Testing for Mission Critical SystemsInflectraCON 360: Risk-Based Testing for Mission Critical Systems
InflectraCON 360: Risk-Based Testing for Mission Critical Systems
Inflectra
 
Crafting highly scalable and performant Modern Data Platforms
Crafting highly scalable and performant Modern Data PlatformsCrafting highly scalable and performant Modern Data Platforms
Crafting highly scalable and performant Modern Data Platforms
Sameer Paradkar
 
Vip Girls Call ServiCe Hyderabad 0000000000 Pooja Best High Class Hyderabad A...
Vip Girls Call ServiCe Hyderabad 0000000000 Pooja Best High Class Hyderabad A...Vip Girls Call ServiCe Hyderabad 0000000000 Pooja Best High Class Hyderabad A...
Vip Girls Call ServiCe Hyderabad 0000000000 Pooja Best High Class Hyderabad A...
ashiklo9823
 
Hotel Management Software Development Company
Hotel Management Software Development CompanyHotel Management Software Development Company
Hotel Management Software Development Company
XongoLab Technologies LLP
 
Applitools Autonomous 2.0 Sneak Peek.pdf
Applitools Autonomous 2.0 Sneak Peek.pdfApplitools Autonomous 2.0 Sneak Peek.pdf
Applitools Autonomous 2.0 Sneak Peek.pdf
Applitools
 
Authentication Review-June -2024 AP & TS.pptx
Authentication Review-June -2024 AP & TS.pptxAuthentication Review-June -2024 AP & TS.pptx
Authentication Review-June -2024 AP & TS.pptx
DEMONDUOS
 
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
dream girl
 
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
87tomato
 
welcome to presentation on Google Apps
welcome to   presentation on Google Appswelcome to   presentation on Google Apps
welcome to presentation on Google Apps
AsifKarimJim
 
Predicting Test Results without Execution (FSE 2024)
Predicting Test Results without Execution (FSE 2024)Predicting Test Results without Execution (FSE 2024)
Predicting Test Results without Execution (FSE 2024)
andrehoraa
 
Russian Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service ...
Russian Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service ...Russian Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service ...
Russian Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service ...
shanihomely
 
🚂🚘 Premium Girls Call Ranchi 🛵🚡000XX00000 💃 Choose Best And Top Girl Service...
🚂🚘 Premium Girls Call Ranchi  🛵🚡000XX00000 💃 Choose Best And Top Girl Service...🚂🚘 Premium Girls Call Ranchi  🛵🚡000XX00000 💃 Choose Best And Top Girl Service...
🚂🚘 Premium Girls Call Ranchi 🛵🚡000XX00000 💃 Choose Best And Top Girl Service...
bahubalikumar09988
 
Fantastic Design Patterns and Where to use them No Notes.pdf
Fantastic Design Patterns and Where to use them No Notes.pdfFantastic Design Patterns and Where to use them No Notes.pdf
Fantastic Design Patterns and Where to use them No Notes.pdf
6m9p7qnjj8
 
GT degree offer diploma Transcript
GT degree offer diploma TranscriptGT degree offer diploma Transcript
GT degree offer diploma Transcript
attueb
 

Recently uploaded (20)

PathSpotter: Exploring Tested Paths to Discover Missing Tests (FSE 2024)
PathSpotter: Exploring Tested Paths to Discover Missing Tests (FSE 2024)PathSpotter: Exploring Tested Paths to Discover Missing Tests (FSE 2024)
PathSpotter: Exploring Tested Paths to Discover Missing Tests (FSE 2024)
 
bangalore Girls call 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
bangalore Girls call  👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Deliverybangalore Girls call  👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
bangalore Girls call 👀 XXXXXXXXXXX 👀 Rs.9.5 K Cash Payment With Room Delivery
 
ERP Software Solutions Provider in Coimbatore
ERP Software Solutions Provider in CoimbatoreERP Software Solutions Provider in Coimbatore
ERP Software Solutions Provider in Coimbatore
 
Mobile App Development Company in Noida - Drona Infotech.
Mobile App Development Company in Noida - Drona Infotech.Mobile App Development Company in Noida - Drona Infotech.
Mobile App Development Company in Noida - Drona Infotech.
 
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
Busty Girls Call Mumbai 9930245274 Unlimited Short Providing Girls Service Av...
 
SAP implementation steps PDF - Zyple Software
SAP implementation steps PDF - Zyple SoftwareSAP implementation steps PDF - Zyple Software
SAP implementation steps PDF - Zyple Software
 
InflectraCON 360: Risk-Based Testing for Mission Critical Systems
InflectraCON 360: Risk-Based Testing for Mission Critical SystemsInflectraCON 360: Risk-Based Testing for Mission Critical Systems
InflectraCON 360: Risk-Based Testing for Mission Critical Systems
 
Crafting highly scalable and performant Modern Data Platforms
Crafting highly scalable and performant Modern Data PlatformsCrafting highly scalable and performant Modern Data Platforms
Crafting highly scalable and performant Modern Data Platforms
 
Vip Girls Call ServiCe Hyderabad 0000000000 Pooja Best High Class Hyderabad A...
Vip Girls Call ServiCe Hyderabad 0000000000 Pooja Best High Class Hyderabad A...Vip Girls Call ServiCe Hyderabad 0000000000 Pooja Best High Class Hyderabad A...
Vip Girls Call ServiCe Hyderabad 0000000000 Pooja Best High Class Hyderabad A...
 
Hotel Management Software Development Company
Hotel Management Software Development CompanyHotel Management Software Development Company
Hotel Management Software Development Company
 
Applitools Autonomous 2.0 Sneak Peek.pdf
Applitools Autonomous 2.0 Sneak Peek.pdfApplitools Autonomous 2.0 Sneak Peek.pdf
Applitools Autonomous 2.0 Sneak Peek.pdf
 
Authentication Review-June -2024 AP & TS.pptx
Authentication Review-June -2024 AP & TS.pptxAuthentication Review-June -2024 AP & TS.pptx
Authentication Review-June -2024 AP & TS.pptx
 
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
Russian Girls Call Mumbai 🛵🚡9833363713 💃 Choose Best And Top Girl Service And...
 
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
Verified Girls Call Mumbai 👀 9820252231 👀 Cash Payment With Room DeliveryDeli...
 
welcome to presentation on Google Apps
welcome to   presentation on Google Appswelcome to   presentation on Google Apps
welcome to presentation on Google Apps
 
Predicting Test Results without Execution (FSE 2024)
Predicting Test Results without Execution (FSE 2024)Predicting Test Results without Execution (FSE 2024)
Predicting Test Results without Execution (FSE 2024)
 
Russian Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service ...
Russian Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service ...Russian Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service ...
Russian Girls Call Mumbai 🎈🔥9930687706 🔥💋🎈 Provide Best And Top Girl Service ...
 
🚂🚘 Premium Girls Call Ranchi 🛵🚡000XX00000 💃 Choose Best And Top Girl Service...
🚂🚘 Premium Girls Call Ranchi  🛵🚡000XX00000 💃 Choose Best And Top Girl Service...🚂🚘 Premium Girls Call Ranchi  🛵🚡000XX00000 💃 Choose Best And Top Girl Service...
🚂🚘 Premium Girls Call Ranchi 🛵🚡000XX00000 💃 Choose Best And Top Girl Service...
 
Fantastic Design Patterns and Where to use them No Notes.pdf
Fantastic Design Patterns and Where to use them No Notes.pdfFantastic Design Patterns and Where to use them No Notes.pdf
Fantastic Design Patterns and Where to use them No Notes.pdf
 
GT degree offer diploma Transcript
GT degree offer diploma TranscriptGT degree offer diploma Transcript
GT degree offer diploma Transcript
 

The Path Towards Spring Boot Native Applications

  • 1. The Path Towards Spring Boot Native Applications September 2–3, 2020 springone.io Join https://springone.slack.com #session-the-path-towards-spring-boot-native-applications 1 Andy Clement Sébastien Deleuze
  • 2. Safe Harbor Statement The following is intended to outline the general direction of VMware's offerings. It is intended for information purposes only and may not be incorporated into any contract. Any information regarding pre-release of VMware offerings, future updates or other planned modifications is subject to ongoing evaluation by VMware and is subject to change. This information is provided without warranty or any kind, express or implied, and is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions regarding VMware's offerings. These purchasing decisions should only be based on features currently available. The development, release, and timing of any features or functionality described for VMware's offerings in this presentation remain at the sole discretion of Pivotal. Pivotal has no obligation to update forward looking information in this presentation. 2
  • 3. Agenda ● Native applications ● Spring Boot native applications ● Where are we? ● Getting started ● Demo ● spring-graalvm-native ● The road ahead 3
  • 5. 5 Native ahead-of-time compilation Java or Kotlin application GraalVM native compiler Native executable Lightweight container image EXE0110 5
  • 6. Two main benefits 6 Instant startup Reduced memory consumption
  • 7. 7 Scale to zero You only pay when your application is used Serverless for any kind of workload including regular web applications Good fit with platforms like Knative 3x to 5x memory reduction (RSS) Cheaper cloud instances Critical with systems splitted into multiple microservices Instant Startup Reduced memory consumption Our goal is cheaper hosting of your Spring Boot applicationsCheaper and more sustainable Spring Boot applications 7
  • 8. JVM and native executables trade-offs 8
  • 9. Key differences between JVM and native 9 ● Static analysis of your application from the main entry point ● Configuration required for: ○ Reflection ○ Proxies ○ Resources ● Classpath fixed at build time ● No class lazy loading ● Some code will run at build time
  • 10. GraalVM native is a source of inspiration for the JVM ecosystem 10
  • 11. An upcoming Java platform standard with Project Leyden 11
  • 12. GraalVM 20.2 ● Better static container image support ● Faster native image generation ● java.* and javax.* classes are now mostly initialized at runtime ● Enterprise edition only ○ Low Latency Garbage Collector (G1 like) ○ Loop unrolling optimization 12
  • 13. Still in “early adopter” mode (supported with breaking changes) but matures quickly 13
  • 14. Spring Boot native applications
  • 15. Good fit with Spring Boot stand-alone deployment model 15
  • 16. Compiling your application to a native executable requires reflection/proxy/resources configuration 16
  • 17. The Spring team is doing most of the hard work 17
  • 18. Our goal is to support compilation of existing or new Spring Boot applications to native executables. Unchanged. 18
  • 19. “We are excited about the great partnership between the Spring and GraalVM engineering teams to support native ahead-of-time compilation for millions of Spring Boot applications. This is a game changer enabling low memory footprint and instant startup for these workloads.” Thomas Wuerthinger, GraalVM founder & project lead 19 Collaboration between Spring and GraalVM teams
  • 20. Leverage Spring Boot container image support 2 0 > mvn spring-boot:build-image or > gradle bootBuildImage
  • 22. To create lightweight container images 2 2
  • 24. Timeline GraalVM fixes and improvements Incubating support in spring-graalvm-native Spring Boot support We are here 24
  • 26. Timeline GraalVM fixes and improvements Incubating support in spring-graalvm-native Spring Boot support We are here 26
  • 28. spring-graalvm-native ● Incubating Spring Boot native application support ○ It includes a plugin for the GraalVM native image builder ● Analyses the Spring Boot application at build time ○ Computes the most optimal native image configuration ○ Challenge is doing that with static analysis ● Also perform some build time transformation for: ○ Optimized footprint ○ Compatibility 28
  • 29. We have just released 0.8.0 ● GraalVM 20.2 baseline ● Use Spring Boot 2.4.0 latest milestone ● Significant footprint improvements ● Wider range of supported technology ● New experimental functional mode ● Spring Boot lightweight container integration ○ Maven ○ Gradle 29
  • 30. Patch updates until Spring Boot 2.4.0 ● 0.8.1 (September 2020) ○ Upgrade to Spring Boot 2.4.0-M3 ● 0.8.2 (October 2020) ○ Upgrade to Spring Boot 2.4.0-RC1 ● 0.8.3 (November 2020) ○ Upgrade to Spring Boot 2.4.0 ○ GraalVM 20.3 baseline 30
  • 31. Starters supported in 0.8.x ● Actuator ● Cache ● Data JPA, MongoDB, R2DBC, Redis ● JDBC ● Logging (Logback) ● Thymeleaf ● Validation ● Web (Spring MVC with Tomcat) ● Webflux (Netty) ● Wavefront ● Spring Cloud Function 31
  • 32. Timeline GraalVM fixes and improvements Incubating support in spring-graalvm-native Spring Boot support We are here 32
  • 33. Comparing Spring Boot 2.3 LoggingSystem ... 33 Map<String, String> systems = new LinkedHashMap<>(); systems.put("ch.qos.logback.core.Appender", "org.springframework.boot.logging.logback.LogbackLoggingSystem"); systems.put("org.apache.logging.log4j.core.impl.Log4jContextFactory", "org.springframework.boot.logging.log4j2.Log4J2LoggingSystem"); systems.put("java.util.logging.LogManager", "org.springframework.boot.logging.java.JavaLoggingSystem"); SYSTEMS = Collections.unmodifiableMap(systems);
  • 34. … with Spring Boot 2.4 one 34 ClassLoader classLoader = LoggingSystem.class.getClassLoader(); if (ClassUtils.isPresent("ch.qos.logback.core.Appender", classLoader)) { return LogbackLoggingSystem::new; } if (ClassUtils.isPresent("org.apache.logging.log4j.core.impl.Log4jContextFactory", classLoader)) { return Log4J2LoggingSystem::new; } if (ClassUtils.isPresent("java.util.logging.LogManager", classLoader)) { return JavaLoggingSystem::new; } throw new IllegalStateException("No suitable logging system located");
  • 35. New flags available in Spring Framework 5.3 # -3.6M RSS -Dspring.xml.ignore=true # -0.5M RSS -Dspring.spel.ignore=true 35
  • 36. A new Tomcat artifact optimized for native apps <!-- -3.5M RSS --> <dependency> <groupId>org.apache.tomcat.experimental</groupId> <artifactId>tomcat-embed-programmatic</artifactId> <version>9.0.38</version> </dependency> 36
  • 38. start.spring.io or an existing project 38
  • 39. Make sure to use Spring Boot 2.4 latest milestone 39 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.0-M2</version> <relativePath/> <!-- lookup parent from repository --> </parent>
  • 40. Update configuration to avoid using proxies 40 @SpringBootApplication(proxyBeanMethods = false) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
  • 42. Add the spring-graalvm-native dependency 42 <dependency> <groupId>org.springframework.experimental</groupId> <artifactId>spring-graalvm-native</artifactId> <version>0.8.0</version> </dependency>
  • 43. Build the native application 43 > mvn spring-boot:build-image Successfully built image 'docker.io/library/demo:0.0.1-SNAPSHOT' Total time: 60 s ● No need for a GraalVM native local install ● Build happens in a container ● And produces a container
  • 44. Run the native application 44 > docker run -p 8080:8080 docker.io/library/demo:0.0.1-SNAPSHOT . ____ _ __ _ _ / / ___'_ __ _ _(_)_ __ __ _ ( ( )___ | '_ | '_| | '_ / _` | / ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: Started application in 0.05 seconds (JVM running for 0.009)
  • 45. You can also build a native executable without using containers 45
  • 46. Configure Maven plugin in a native profile 46 <plugin> <groupId>org.graalvm.nativeimage</groupId> <artifactId>native-image-maven-plugin</artifactId> <version>20.2.0</version> <configuration> <mainClass>com.example.demo.DemoApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>native-image</goal> </goals> <phase>package</phase> </execution> </executions> </plugin>
  • 47. Build the native application 47 > mvn -Pnative clean package Total time: 60 s ● Need for a GraalVM native local install ● Build happens directly on your host (Linux, Mac and Windows are supported) ● Produces a native executable ● No cross compilation
  • 48. Run the native application 48 > target/com.example.demo.demoapplication . ____ _ __ _ _ / / ___'_ __ _ _(_)_ __ __ _ ( ( )___ | '_ | '_| | '_ / _` | / ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: Started application in 0.05 seconds (JVM running for 0.009)
  • 50. How fast is your PetClinic? 50 Sample On the JDK native-executable petclinic-jdbc Build: 9s Memory(RSS): 417M Startup time: 2.6s Build: 194s +2050% Memory(RSS): 101M -75% Startup time: 0.158s -94%
  • 51. Ongoing work on footprint Key metrics: build time, size of resultant image, and runtime memory footprint 51 Sample SpringOne 2019 SpringOne 2020 commandlinerunner Build: 90s Exec. size: 48M Memory(RSS): 29M Build: 50s -45% Exec. size: 22M -55% Memory(RSS): 24M -17% webflux-netty Build: 193s Exec. size: 81M Memory(RSS): 95M Build: 79s -60% Exec. size: 43M -47% Memory(RSS): 47M -50% webmvc-tomcat Build: 203s Exec size: 105M Memory(RSS): 70M Build: 67s -67% Exec. size: 42M -60% Memory(RSS): 51M -27%
  • 52. You can specify additional native configuration 52
  • 53. For additional native configuration (eg. resources) ● Create a META-INF/native-image/resource-config.json file ● Wildcard patterns can be used ● Similar config for reflection and proxies ● See GraalVM documentation for more details { "resources": [ { "pattern": "myresource.*" } ], "bundles": [ { "name": "your.pkg.Bundle" } ] } 53
  • 54. Tracing agent collected configuration ● An agent can assist in generating these files, available with GraalVM java -Dorg.graalvm.nativeimage.imagecode=agent -agentlib:native-image-agent=config-output-dir=META-INF/native-image Demo ● Agent has improved greatly during 2020, thanks to the GraalVM team ● Run application with agent attached to produce .json files ○ Exercise all code paths (manually or via tests) - producing (merging) many of these collected configurations ● Access filter file supported to avoid including unnecessary infrastructure 5 4
  • 55. Our CI checks Java 8/11 x GraalVM 20.2/20.3 55
  • 57. Project structure and extensibility ● Core static analysis engine for Spring Applications ○ static: behaviour driven by separate ‘hints’ ○ dynamic: extensible with Spring portfolio project awareness via plugins ● @NativeImageHint ○ Same information as JSON, but more modular, more type safe ○ hints attached to a trigger - an auto configuration active or a classpath presence check ○ application analysis determines if triggers are active => activates those hints 57
  • 58. Hint with auto-configuration trigger @NativeImageHint(trigger = R2dbcAutoConfiguration.class, proxyInfos = { @ProxyInfo(types={Serializable.class, InterfaceFoo.class}) }, typeInfos= { @TypeInfo(types = EmbeddedDatabase.class, access = AccessBits.LOAD_AND_CONSTRUCT) } ) public class R2dbcHints implements NativeImageConfiguration { } 58
  • 59. Opportunity for the community to contribute 59
  • 61. spring-graalvm-native 0.9.0 (December 2020) ● First release with beta support ○ Spring Boot 2.4.0 and GraalVM 20.3 baseline ○ Subset of starters supported ○ Breaking change will happen (with upgrade paths) ● Wider support ○ Spring Security ○ Spring Batch ● Development-oriented container image 61
  • 62. More starters supported in upcoming 0.9.x releases 62
  • 63. Hidden gem in Spring Framework since 5.0: functional bean registration 63
  • 64. Comparing annotation and functional bean definition @Configuration public class SampleConfiguration { @Bean public Foo foo() { return new Foo(); } @Bean public Bar bar(Foo foo) { return new Bar(foo); } } 64 public class SampleInitializer implements ApplicationContextInitializer<GenericApplicationContext> { @Override public void initialize(GenericApplicationContext ctx) { ctx.registerBean(Foo.class, () -> new Foo()); ctx.registerBean(Bar.class, () -> new Bar(ctx.getBean(Foo.class))); } }
  • 65. @Configuration to functional configuration 65 Automated transformation from @Configuration to functional configuration
  • 67. Native applications functional configuration 67 Sample webmvc-tomcat webmvc-functional With build time transformation to functional configuration Regular Spring Boot application with Spring MVC, Tomcat and Jackson Build: 67s Exec. size: 42M Memory(RSS): 51M Startup time: 0.06s Build: 60s -10% Exec. size: 37M -12% Memory(RSS): 26M -49% Startup time: 0.02s -66%
  • 68. Experimentations on more build time transformations ● @Configuration to functional configuration transformation with spring-init ● Infer proxyBeanMethods = false when possible ● Automatically set optimization flags when relevant 68
  • 69. Spring Boot 3, based on Spring Framework 6, is expected to provide first-class support for native application deployment, as well as an optimized footprint on the JVM. 69
  • 70. Takeaways ● Spring Boot native applications are great to build lightweight containers ● Try it now with spring-graalvm-native 0.8 ● Contribute support for your favorite starter ● Beta support in December with spring-graalvm-native 0.9 ● Wider support and smaller footprint during 0.9.x releases ● Upcoming first-class native support in Spring Boot 3 / Framework 6 70