Sanil Nambiar
Session APD23 | June 2nd, 2026 Holly Cummins, STSM, Quarkus
The ROI of Quarkus for
Spring Boot Applications
Slide 2
Slide 2 text
Agenda
-What is Quarkus?
-Why Quarkus?
-Can we quantify that?
-The developer experience ROI
-Getting to Quarkus from Spring Boot
Slide 3
Slide 3 text
@holly_cummins #Quarkus #IBM #RedHat
2022
Slide 4
Slide 4 text
@holly_cummins #Quarkus #IBM #RedHat
“I can’t bring up the
microservices in my Java
dev stack
2022
Slide 5
Slide 5 text
@holly_cummins #Quarkus #IBM #RedHat
“I can’t bring up the
microservices in my Java
dev stack
… on my brand new Apple
laptop with a M1 chip and
-
fi
ntech CTO
2022
Slide 6
Slide 6 text
@holly_cummins
#RedHat
most java web
frameworks are
resource-hungry
they hog cpu and ram
Slide 7
Slide 7 text
@holly_cummins
#RedHat
most java web
frameworks are
verbose
there is a lot of typing
Slide 8
Slide 8 text
@holly_cummins #Quarkus #IBM #RedHat
in production, it’s worse
Slide 9
Slide 9 text
@holly_cummins #Quarkus #IBM #RedHat
in production, it’s worse
Slide 10
Slide 10 text
@holly_cummins #Quarkus #IBM #RedHat
in production, it’s worse
example microservices maths:
Slide 11
Slide 11 text
@holly_cummins #Quarkus #IBM #RedHat
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
Slide 12
Slide 12 text
@holly_cummins #Quarkus #IBM #RedHat
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
single service: ½ core + 1 GB RAM
Slide 13
Slide 13 text
@holly_cummins #Quarkus #IBM #RedHat
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
single service: ½ core + 1 GB RAM
HA → 3x instances
Slide 14
Slide 14 text
@holly_cummins #Quarkus #IBM #RedHat
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
single service: ½ core + 1 GB RAM
HA → 3x instances
~100 microservices
Slide 15
Slide 15 text
@holly_cummins #Quarkus #IBM #RedHat
in production, it’s worse
example microservices maths:
Lufthansa maintenance scheduling system
single service: ½ core + 1 GB RAM
HA → 3x instances
~100 microservices
= 150 cores + 300 GB RAM
Slide 16
Slide 16 text
@holly_cummins #Quarkus #IBM #RedHat
why is this happening?
mismatch between what we need
and what the platform is optimised for
Slide 17
Slide 17 text
@holly_cummins #Quarkus #IBM #RedHat
java was not
designed for the
cloud
Slide 18
Slide 18 text
@holly_cummins
#RedHat
old Java frameworks were
optimised for …
Slide 19
Slide 19 text
@holly_cummins
#RedHat
long-lived processes
old Java frameworks were
optimised for …
Slide 20
Slide 20 text
@holly_cummins
#RedHat
long-lived processes
annual (!) deployments
old Java frameworks were
optimised for …
Slide 21
Slide 21 text
@holly_cummins
#RedHat
long-lived processes
annual (!) deployments
late-binding
old Java frameworks were
optimised for …
Slide 22
Slide 22 text
@holly_cummins
#RedHat
long-lived processes
annual (!) deployments
late-binding
re-con
fi
gurable without restart
old Java frameworks were
optimised for …
Slide 23
Slide 23 text
enter … quarkus
Slide 24
Slide 24 text
a Java framework that gets you going faster, faster.
enter … quarkus
Slide 25
Slide 25 text
what is quarkus?
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
hibernate
Slide 29
Slide 29 text
hibernate
rest
Slide 30
Slide 30 text
hibernate
rest
jackson
Slide 31
Slide 31 text
hibernate
rest
jackson
Slide 32
Slide 32 text
hibernate
netty
rest
jackson
Slide 33
Slide 33 text
hibernate
netty
rest
langchain4j
jackson
Slide 34
Slide 34 text
hibernate
netty
rest
langchain4j
jackson
etc
Slide 35
Slide 35 text
hibernate
netty
rest
langchain4j
jackson
etc
Slide 36
Slide 36 text
hibernate
netty
rest
langchain4j
jackson
etc
Slide 37
Slide 37 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
Slide 38
Slide 38 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 39
Slide 39 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 40
Slide 40 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 41
Slide 41 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 42
Slide 42 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 43
Slide 43 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 44
Slide 44 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 45
Slide 45 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 46
Slide 46 text
hibernate
netty
rest
langchain4j
jackson
etc
runtime infrastructure
build infrastructure
Slide 47
Slide 47 text
netty
etc
runtime infrastructure
build infrastructure
hibernate
rest
langchain4j
jackson
- An integrated collection of your favourite libraries (Hibernate, Jackson, dependency injection, Netty, etc)
- A super-scalable core, build on Eclipse Vert.x
- Minimises unnecessary work at runtime
Slide 48
Slide 48 text
netty
etc
runtime infrastructure
build infrastructure
hibernate
rest
langchain4j
jackson
- An integrated collection of your favourite libraries (Hibernate, Jackson, dependency injection, Netty, etc)
- A super-scalable core, build on Eclipse Vert.x
- Minimises unnecessary work at runtime
Slide 49
Slide 49 text
No content
Slide 50
Slide 50 text
No content
Slide 51
Slide 51 text
e
ffi
ciency
Slide 52
Slide 52 text
e
ffi
ciency
build-time
principle
Slide 53
Slide 53 text
e
ffi
ciency
build-time
principle
reactive core
Slide 54
Slide 54 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
Slide 55
Slide 55 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
live reload
Slide 56
Slide 56 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
live reload
continuous testing
Slide 57
Slide 57 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
minimising
boilerplate
live reload
continuous testing
Slide 58
Slide 58 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
minimising
boilerplate
live reload
continuous testing
dev ui
Slide 59
Slide 59 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
minimising
boilerplate
live reload
continuous testing
dev ui
Slide 60
Slide 60 text
e
ffi
ciency
developer experience
(also e
ffi
ciency)
build-time
principle
reactive core
minimising
boilerplate
live reload
continuous testing
dev ui
Slide 61
Slide 61 text
why is quarkus novel?
Slide 62
Slide 62 text
@holly_cummins
#RedHat
application frameworks were
optimised for dynamism
Slide 63
Slide 63 text
@holly_cummins
#RedHat
application frameworks
optimised for dynamism
dynamism has a cost
Slide 64
Slide 64 text
@holly_cummins
#RedHat
paying a dynamism tax
… even though the app is not dynamic
Slide 65
Slide 65 text
@holly_cummins
#RedHat
a highly dynamic
runtime in a container
is pointless
Slide 66
Slide 66 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 67
Slide 67 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 68
Slide 68 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 69
Slide 69 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 70
Slide 70 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 71
Slide 71 text
@holly_cummins #RedHat
most apps are
immutable
now
Slide 72
Slide 72 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
Slide 73
Slide 73 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
build time
Slide 74
Slide 74 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
build time runtime
Slide 75
Slide 75 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
build time runtime
Slide 76
Slide 76 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
packaging
(maven, gradle…)
build time runtime
Slide 77
Slide 77 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
build time runtime
Slide 78
Slide 78 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
build time runtime
Slide 79
Slide 79 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
build time runtime
load and parse
• config files
• properties
• yaml
• xml
• etc.
Slide 80
Slide 80 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
build time runtime
Slide 81
Slide 81 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
@
@
build time runtime
• classpath scanning and
annotation discovery
• attempt to load class to
enable/disable features
Slide 82
Slide 82 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
@
@
build time runtime
Slide 83
Slide 83 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
@
@
build time runtime
build a metamodel
of the world
Slide 84
Slide 84 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
@
@
build time runtime
Slide 85
Slide 85 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
@
@
build time runtime
start
• thread pools
• I/O
• etc.
Slide 86
Slide 86 text
@holly_cummins #Quarkus #IBM #RedHat
how does a java framework start?
@
@
build time runtime
ready to
do work!
Slide 87
Slide 87 text
@holly_cummins #Quarkus #IBM #RedHat
what if we start the application more than once?
@
@
Slide 88
Slide 88 text
@holly_cummins #Quarkus #IBM #RedHat
what if we start the application more than once?
@
@
@
@
Slide 89
Slide 89 text
@holly_cummins #Quarkus #IBM #RedHat
what if we start the application more than once?
@
@
@
@
@
@
Slide 90
Slide 90 text
@holly_cummins #Quarkus #IBM #RedHat
what if we start the application more than once?
@
@
@
@
@
@
@
@
Slide 91
Slide 91 text
@holly_cummins #Quarkus #IBM #RedHat
what if we start the application more than once?
@
@
@
@
@
@
@
@
Slide 92
Slide 92 text
@holly_cummins #Quarkus #IBM #RedHat
what if we start the application more than once?
@
@
@
@
@
@
@
@
so much work gets
redone every time
@holly_cummins
Hibernate
speed example: JTA auto-wiring
Class.forName(“LikelyJTAImplementation”);
Class.forName(“APossibleJTAImplementation”);
Class.forName(“AnotherJTAImplementation”);
Class.forName(“NicheJTAImplementation”);
Class.forName(“VeryNicheJTAImplementation”);
…
~129
auto-wiring attempts
every single start.
Slide 104
Slide 104 text
@holly_cummins
it’s not just JTA
this happens for lots of internal service bindings
Slide 105
Slide 105 text
@holly_cummins
JVM
footprint example: Hibernate
Slide 106
Slide 106 text
@holly_cummins
JVM spends time
loading classes for
specific databases
JVM
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
footprint example: Hibernate
Slide 107
Slide 107 text
@holly_cummins
JVM spends time
loading classes for
specific databases
JVM
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
class for
unused
database
turns out they’re
never used
footprint example: Hibernate
Slide 108
Slide 108 text
@holly_cummins
JVM spends time
loading classes for
specific databases
JVM
turns out they’re
never used
JIT spends time
unloading classes
footprint example: Hibernate
Slide 109
Slide 109 text
@holly_cummins
Hibernate
example:
~500 classes
which are only useful if you're running an Oracle database
loaded and then unloaded
Slide 110
Slide 110 text
@holly_cummins
Hibernate
example:
~500 classes
which are only useful if you're running an Oracle database
loaded and then unloaded
every single start.
Slide 111
Slide 111 text
@holly_cummins
the true cost of loaded classes isn’t just memory + start time
Slide 112
Slide 112 text
@holly_cummins
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 113
Slide 113 text
@holly_cummins
interface
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 114
Slide 114 text
@holly_cummins
unused
implementation
the one we
want
interface
unused
implementation
unused
implementation
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 115
Slide 115 text
@holly_cummins
unused
implementation
the one we
want
interface
unused
implementation
unused
implementation
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 116
Slide 116 text
@holly_cummins
unused
implementation
the one we
want
interface
megamorphic call
slow dispatching
unused
implementation
unused
implementation
the true cost of loaded classes isn’t just memory + start time
method dispatching:
Slide 117
Slide 117 text
@holly_cummins
the true cost of loaded classes isn’t just memory + start time
the one we
want
interface
Slide 118
Slide 118 text
@holly_cummins
the true cost of loaded classes isn’t just memory + start time
the one we
want
monomorphic call
fast dispatching
interface
Slide 119
Slide 119 text
@holly_cummins
how do we fix all this?
Slide 120
Slide 120 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
build time runtime
what if we initialize at build time?
Slide 121
Slide 121 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
build time runtime
what if we initialize at build time?
Slide 122
Slide 122 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
build time runtime
start
• thread pools
• I/O
• etc.
what if we initialize at build time?
Slide 123
Slide 123 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
build time runtime
ready to
do work!
start
• thread pools
• I/O
• etc.
what if we initialize at build time?
Slide 124
Slide 124 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
repeated starts are now
efficient
Slide 125
Slide 125 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
repeated starts are now
efficient
Slide 126
Slide 126 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
repeated starts are now
efficient
Slide 127
Slide 127 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
repeated starts are now
efficient
Slide 128
Slide 128 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
repeated starts are now
efficient
Slide 129
Slide 129 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
repeated starts are now
efficient
Slide 130
Slide 130 text
@holly_cummins #Quarkus #IBM #RedHat
@
@
repeated starts are now
efficient
less wasted work
Slide 131
Slide 131 text
@holly_cummins #Quarkus #IBM #RedHat
the Quarkus way enables native compilation
native
(graalvm)
@
@
jvm
build time
Slide 132
Slide 132 text
@holly_cummins #Quarkus #IBM #RedHat
the Quarkus way enables native compilation
native
(graalvm)
@
@
jvm
build time
Slide 133
Slide 133 text
to the code!
@holly_cummins #RedHat
native binaries with Quarkus
Slide 134
Slide 134 text
#Quarkus @holly_cummins
2020
Slide 135
Slide 135 text
#Quarkus @holly_cummins
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
2020
Slide 136
Slide 136 text
#Quarkus @holly_cummins
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
uhh … are you
supposed to shut down
applications after using
them?
2020
Slide 137
Slide 137 text
#Quarkus @holly_cummins
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
hey, wanna see
quarkus?
uhh … are you
supposed to shut down
applications after using
them?
120 instances (!)
2020
Slide 138
Slide 138 text
@holly_cummins
Slide 139
Slide 139 text
@holly_cummins
doing more up-front
Slide 140
Slide 140 text
@holly_cummins
doing more up-front
- speeds up start
Slide 141
Slide 141 text
@holly_cummins
doing more up-front
- speeds up start
- shrinks memory footprint
Slide 142
Slide 142 text
@holly_cummins
doing more up-front
- speeds up start
- shrinks memory footprint
- improves throughput (!)
Slide 143
Slide 143 text
can we quantify that?
Slide 144
Slide 144 text
spoiler:
Slide 145
Slide 145 text
2 - 3x
infra savings
spoiler:
Slide 146
Slide 146 text
to the code!
@holly_cummins #RedHat
performance comparisons
low load
pack many instances onto a node
memory is the limiting factor
how much hardware does an app need?
high load
horizontally scale to support load
max throughput is the limiting
factor
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
Slide 162
Slide 162 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
Slide 163
Slide 163 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
jvm
US$64.75
US$135.38
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
Slide 164
Slide 164 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
jvm
US$64.75
US$135.38
native
US$19.86
US$64.75
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
Slide 165
Slide 165 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
jvm
US$64.75
US$135.38
native
US$19.86
US$64.75
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
2.1x
Slide 166
Slide 166 text
quarkus
spring
p
r
i
0.17
p
r
i
1489.2
jvm
US$64.75
US$135.38
native
US$19.86
US$64.75
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
low load scenario: cost per instance per year
2.1x 3.3x
Slide 167
Slide 167 text
p
r
i
p
r
i
jvm native
quarkus
0.17
1489.2 US$6,475 US$1,986
spring US$13,538 US$6,475
low load scenario: cost per hundred instances per year
assumptions: EC2 c6i.xlarge instance, us-east-1, $0.17 per hour
#Quarkus @holly_cummins
we also see better response times
Slide 183
Slide 183 text
#Quarkus @holly_cummins
users care (a lot)
about response time
we also see better response times
Slide 184
Slide 184 text
can we trust this data?
Slide 185
Slide 185 text
what we see in the
fi
eld matches
what we see in the lab.
Slide 186
Slide 186 text
@holly_cummins #Quarkus #IBM #RedHat
remember the airline scheduling application?
Slide 187
Slide 187 text
@holly_cummins #Quarkus #IBM #RedHat
remember the airline scheduling application?
“[With Quarkus], we can run 3 times denser
deployments without sacrificing availability and
response times of services. ”
– Thorsten Pohl
Slide 188
Slide 188 text
@holly_cummins #Quarkus #IBM #RedHat
remember the airline scheduling application?
“[With Quarkus], we can run 3 times denser
deployments without sacrificing availability and
response times of services. ”
– Thorsten Pohl
3x
less hardware
https://www.reddit.com/r/SpringBoot/comments/1tj5tsn/comment/on04x23/
2.7x
less memory
Slide 191
Slide 191 text
is quarkus greener?
Slide 192
Slide 192 text
@holly_cummins #Quarkus #IBM #RedHat
Slide 193
Slide 193 text
@holly_cummins #Quarkus #IBM #RedHat
does being faster
and lighter mean
quarkus is
greener?
Slide 194
Slide 194 text
to the code!
@holly_cummins #RedHat
energy comparisons
Slide 195
Slide 195 text
@holly_cummins #RedHat
Setup:
• REST + CRUD
• large heap
• RAPL energy measurement
• multiple instances to
support high load
Assumptions:
• US energy mix
Source: John O’Hara
experiment 1: RAPL measurements
Slide 196
Slide 196 text
@holly_cummins #RedHat
Setup:
• REST + CRUD
• large heap
• RAPL energy measurement
• multiple instances to
support high load
Assumptions:
• US energy mix
Source: John O’Hara
experiment 1: RAPL measurements
quarkus on JVM has the lowest carbon …
because it has the highest throughput
Slide 197
Slide 197 text
@holly_cummins #RedHat
Setup:
• REST + CRUD
• large heap
• RAPL energy measurement
• multiple instances to
support high load
Assumptions:
• US energy mix
Source: John O’Hara
experiment 1: RAPL measurements
quarkus on JVM has the lowest carbon …
because it has the highest throughput
~½
the energy
requirements
Slide 198
Slide 198 text
@holly_cummins #RedHat
density
Source: Clement Esco
ff i
er
experiment 2: cloud
Setup:
• 800 requests/second, over 20
days
• SLA > 99%
• AWS instances
Assumptions:
• Costs are for us-east-1 data
centre
Slide 199
Slide 199 text
@holly_cummins #RedHat
interpolated carbon metrics – hardware and electricity
Setup:
• 800 requests/second, over 20 days
• SLA > 99%
Assumptions:
• 50% load
Source: Clement Esco
ffi
er x Teads
cloud carbon impact of framework choice
Slide 200
Slide 200 text
@holly_cummins #RedHat
interpolated carbon metrics – hardware and electricity
Setup:
• 800 requests/second, over 20 days
• SLA > 99%
Assumptions:
• 50% load
Source: Clement Esco
ffi
er x Teads
cloud carbon impact of framework choice
the carbon is lower because
the cost is lower
Slide 201
Slide 201 text
@holly_cummins #RedHat
interpolated carbon metrics – hardware and electricity
Setup:
• 800 requests/second, over 20 days
• SLA > 99%
Assumptions:
• 50% load
Source: Clement Esco
ffi
er x Teads
cloud carbon impact of framework choice
the carbon is lower because
the cost is lower
~½
the carbon
@holly_cummins #Quarkus #IBM #RedHat
mvn quarkus:dev
zero-con
fi
g live coding
Slide 206
Slide 206 text
@holly_cummins #Quarkus #IBM #RedHat
tests are run on every code change
“reverse code coverage” means only relevant tests run
mvn quarkus:dev
continuous testing
Slide 207
Slide 207 text
@holly_cummins #Quarkus #IBM #RedHat
developer UI
Slide 208
Slide 208 text
to the code!
@holly_cummins #RedHat
dev mode and continuous testing
Slide 209
Slide 209 text
@holly_cummins #Quarkus #IBM #RedHat
with quarkus, developers
have to type less boilerplate
Slide 210
Slide 210 text
@holly_cummins #Quarkus #IBM #RedHat
with quarkus, developers
have to read less boilerplate
Slide 211
Slide 211 text
@holly_cummins #Quarkus #IBM #RedHat
zero-con
fi
g testcontainers
Slide 212
Slide 212 text
@holly_cummins #Quarkus #IBM #RedHat
testcontainers integration … without quarkus
@TestConfiguration(proxyBeanMethods = false)
public class ContainersConfig {
@Bean
@ServiceConnection
public PostgreSQLContainer postgres() {
return new PostgreSQLContainer<>(DockerImageName.parse("postgres:14"));
}
}
public class TestApplication {
public static void main(String[] args) {
SpringApplication
.from(MySpringDataApplication::main)
.with(ContainersConfig.class)
.run(args);
}
}
@Import(ContainersConfig.class)
Slide 213
Slide 213 text
@holly_cummins #Quarkus #IBM #RedHat
testcontainers integration … without quarkus
Slide 214
Slide 214 text
@holly_cummins #Quarkus #IBM #RedHat
zero-config testcontainers integration
the only thing you need to do to make
testcontainers work is not con
fi
gure anything
# configure your datasource
quarkus.datasource.db-kind = postgresql
quarkus.datasource.username = sarah
quarkus.datasource.password = connor
quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/mydatabase
# drop and create the database at startup
quarkus.hibernate-orm.database.generation = drop-and-create
Slide 215
Slide 215 text
@holly_cummins #Quarkus #IBM #RedHat
zero-config testcontainers integration
the only thing you need to do to make
testcontainers work is not con
fi
gure anything
# drop and create the database at startup
quarkus.hibernate-orm.database.generation = drop-and-create
Slide 216
Slide 216 text
@holly_cummins #Quarkus #IBM #RedHat
zero-config testcontainers integration
the only thing you need to do to make
testcontainers work is not con
fi
gure anything
Slide 217
Slide 217 text
@holly_cummins #Quarkus #IBM #RedHat
zero-config testcontainers integration
the only thing you need to do to make
testcontainers work is not con
fi
gure anything
quarkus also auto-invokes
fl
yway and liquibase
@holly_cummins #Quarkus #IBM #RedHat
example: panache + hibernate
active record pattern
@Entity
public class Greeting extends PanacheEntity {
public String name;
public LocalDate issued;
@Version
public int version;
public static List getTodaysGreetings() {
return list("date", LocalDate.now());
}
}
Slide 223
Slide 223 text
@holly_cummins #Quarkus #IBM #RedHat
can we quantify that?
https://www.reddit.com/r/SpringBoot/comments/1tj5tsn/comment/on04x23/
40%
less code
Slide 226
Slide 226 text
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 227
Slide 227 text
2019: Moved digital experience to
quarkus (from Spring Boot)
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 228
Slide 228 text
2019: Moved digital experience to
quarkus (from Spring Boot)
• Startup times 40s ➡ 12s
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 229
Slide 229 text
2019: Moved digital experience to
quarkus (from Spring Boot)
• Startup times 40s ➡ 12s
• RAM 800 MB ➡ 360 MB
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 230
Slide 230 text
2019: Moved digital experience to
quarkus (from Spring Boot)
• Startup times 40s ➡ 12s
• RAM 800 MB ➡ 360 MB
• Developer productivity ⬆ 30-40%–
Christos Sotiriou, DXL technical lead at Vodafone Greece
Slide 231
Slide 231 text
2019: Moved digital experience to
quarkus (from Spring Boot)
• Startup times 40s ➡ 12s
• RAM 800 MB ➡ 360 MB
• Developer productivity ⬆ 30-40%–
30-40%
more productive
Christos Sotiriou, DXL technical lead at Vodafone Greece
@holly_cummins #Quarkus #IBM #RedHat
migration
compatibility libraries
tooling
ai skills
Slide 249
Slide 249 text
to the code!
@holly_cummins #RedHat
spring compatibility libraries
Slide 250
Slide 250 text
@holly_cummins #Quarkus #IBM #RedHat
“After a week of development with
Quarkus, I was able to regain the
same level of productivity as when
I was developing with Spring Boot.”
– Fawaz Paraïso, Decathlon
Slide 251
Slide 251 text
the double-win
Slide 252
Slide 252 text
@holly_cummins
#RedHat
Slide 253
Slide 253 text
@holly_cummins
#RedHat
co-benefits
Slide 254
Slide 254 text
@holly_cummins
#RedHat
co-benefits
the double win
Slide 255
Slide 255 text
@holly_cummins
#RedHat
co-benefits
the double win
win-win
Slide 256
Slide 256 text
@holly_cummins
#RedHat
co-benefits
the double win
win-win
twofer
Slide 257
Slide 257 text
@holly_cummins
#RedHat
co-benefits
the double win
win-win
twofer
überwinden
Slide 258
Slide 258 text
@holly_cummins
#RedHat
co-benefits
the double win
win-win
twofer
überwinden
Slide 259
Slide 259 text
@holly_cummins
#RedHat
Slide 260
Slide 260 text
@holly_cummins
#RedHat
cheaper at low load
Slide 261
Slide 261 text
@holly_cummins
#RedHat
cheaper at low load
cheaper at high load
Slide 262
Slide 262 text
@holly_cummins
#RedHat
cheaper at low load
cheaper at high load
greener
Slide 263
Slide 263 text
@holly_cummins
#RedHat
cheaper at low load
cheaper at high load
greener
more productive
Slide 264
Slide 264 text
@holly_cummins
#RedHat
cheaper at low load
cheaper at high load
greener
more productive
happier
Slide 265
Slide 265 text
@holly_cummins #Quarkus #IBM #RedHat
tl;dpa
(too long didn’t pay attention)
deployment density
lower cloud bill
frictionless development experience
Medium Nano
auto-provision services
zero-con
fi
g live coding
continuous testing
developer UI
greener
happy, productive people
Slide 266
Slide 266 text
@holly_cummins #Quarkus #IBM #RedHat
stl;dpa
(still too long didn’t pay attention)
e
ffi
ciency
quarkus can be packed ~2x more
densely than spring boot
quarkus can handle ~2x more
tra
ffi
c on the same hardware
developer experience
quarkus creates joy
quarkus boosts productivity by
Slide 267
Slide 267 text
@holly_cummins #Quarkus #IBM #RedHat
stl;dpa
(still too long didn’t pay attention)
e
ffi
ciency
quarkus can be packed ~2x more
densely than spring boot
quarkus can handle ~2x more
tra
ffi
c on the same hardware
developer experience
quarkus creates joy
quarkus boosts productivity by
2x
less infra
Slide 268
Slide 268 text
@holly_cummins #Quarkus #IBM #RedHat
stl;dpa
(still too long didn’t pay attention)
e
ffi
ciency
quarkus can be packed ~2x more
densely than spring boot
quarkus can handle ~2x more
tra
ffi
c on the same hardware
developer experience
quarkus creates joy
quarkus boosts productivity by
40%
more productive
2x
less infra